下面触发器可以捕获测试表(TEST)上的DML语句
CREATE OR REPLACE TRIGGER tr_capt_sql
BEFORE DELETE OR INSERT OR UPDATE ON test
DECLARE
sql_text ora_name_list_t;
state_sql capt$sql.sql_text%TYPE;
BEGIN
FOR i IN 1 .. ora_sql_txt(sql_text) LOOP
state_sql := state_sql || sql_text(i);
END LOOP;
INSERT INTO capt$sql
(login_user,
sql_text)
VALUES
(ora_login_user,
state_sql);
END tr_capt_sql;
在向测试表中插入数据时报错(如标题),请高手帮助解决,谢谢
CREATE OR REPLACE TRIGGER tr_capt_sql
BEFORE DELETE OR INSERT OR UPDATE ON test
DECLARE
sql_text ora_name_list_t;
state_sql capt$sql.sql_text%TYPE;
BEGIN
FOR i IN 1 .. ora_sql_txt(sql_text) LOOP
state_sql := state_sql || sql_text(i);
END LOOP;
INSERT INTO capt$sql
(login_user,
sql_text)
VALUES
(ora_login_user,
state_sql);
END tr_capt_sql;
在向测试表中插入数据时报错(如标题),请高手帮助解决,谢谢
然后,看看插入的字段类型和变量类型是否一致。
怎么又是你定义的变量,又是表里的字段呢?
可是又出现了一个问题,就是变量state_sql总是返回一个空值,不知道是什么原因
SQL> desc test;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
X VARCHAR2(20)
Y VARCHAR2(20)SQL> desc capt$sql
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
LOGIN_USER VARCHAR2(3000)
SQL_TEXT VARCHAR2(4000)