oracle表执行更新操作的时候,那些字段被更新了
2015-06-23 16:45
627 查看
问题要求:每次表执行更新操作的时候,要知道是那些字段被更新了?
解决办法:1、在表上建立触发器,先取得表中有那些字段,可以执行一下语句:
ORACLE:
SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = '表名' ORDER BY COLUMN_ID;
或
SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = '表名' ORDER BY COLUMN_ID;
注意:表明要区分大小写。
SQLSERVER:
select name from syscolumns where id=object_id('表名');
或
select count(*) from syscolumns where id=object_id('表名');
2、循环字段,看看那些字段被更新了。
循环用for,判断那些字段被更新了,用updating(字段名);
3、触发器完整代码如下
CREATE OR REPLACE TRIGGER TB_TASK_TRGGER
AFTER UPDATE
ON TB_TASK
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
vrupdate varchar2(100);
BEGIN
vrupdate:='';
FOR TEMPCOLUME IN (SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'TB_TASK' ORDER BY COLUMN_ID)
LOOP
IF UPDATING(TEMPCOLUME.COLUMN_NAME)
THEN
dbms_output.put_line(TEMPCOLUME.COLUMN_NAME);
vrupdate:=vrupdate || ',';
END IF;
END LOOP;
UPDATE USERLIST SET duty=vrupdate where userid='1000000386';
EXCEPTION
WHEN OTHERS
THEN
RAISE;
END;
解决办法:1、在表上建立触发器,先取得表中有那些字段,可以执行一下语句:
ORACLE:
SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = '表名' ORDER BY COLUMN_ID;
或
SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = '表名' ORDER BY COLUMN_ID;
注意:表明要区分大小写。
SQLSERVER:
select name from syscolumns where id=object_id('表名');
或
select count(*) from syscolumns where id=object_id('表名');
2、循环字段,看看那些字段被更新了。
循环用for,判断那些字段被更新了,用updating(字段名);
3、触发器完整代码如下
CREATE OR REPLACE TRIGGER TB_TASK_TRGGER
AFTER UPDATE
ON TB_TASK
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
vrupdate varchar2(100);
BEGIN
vrupdate:='';
FOR TEMPCOLUME IN (SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'TB_TASK' ORDER BY COLUMN_ID)
LOOP
IF UPDATING(TEMPCOLUME.COLUMN_NAME)
THEN
dbms_output.put_line(TEMPCOLUME.COLUMN_NAME);
vrupdate:=vrupdate || ',';
END IF;
END LOOP;
UPDATE USERLIST SET duty=vrupdate where userid='1000000386';
EXCEPTION
WHEN OTHERS
THEN
RAISE;
END;
相关文章推荐
- Oracle 11g ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
- Oracle Flashback Technologies - 闪回被drop的表
- Oracle Flashback Technologies - 估算不同时间段闪回日志的产生量
- Oracle Latch 管理
- Oracle 11g 分区表
- Oracle 索引组织表 IOT
- Oracle 锁管理
- Oracle Dataguard 基本原理
- Oracle Dataguard 参数详解
- Oracle Dataguard 简介
- Oracle trunc()函数的用法
- Oracle 11g R2 RAC TAF 服务端配置
- ORA-03113 故障排除
- Oracle 诊断事件列表
- Oracle 内存结构
- Oracle SGA自动管理
- Oracle PGA作用
- Oracle OEM各种顾问功能
- Oracle Flashback Technologies - 闪回数据库
- Oracle 自动管理 ASMM