我想写一个触发器,用来记录用户对表的操作,包括能记录操作的表名,操作类型,以及操作的前后的新旧值.
当然这个触发器要能针对数据库里的每个表,也就是说这个触发器要有可移植性,我只是需要换下on tab_name 和触发器的名称就能 针对另一个表建立相同的触发器.
好像需要写一个function的..
当然这个触发器要能针对数据库里的每个表,也就是说这个触发器要有可移植性,我只是需要换下on tab_name 和触发器的名称就能 针对另一个表建立相同的触发器.
好像需要写一个function的..
解决方案 »
- 为什么oracle中使用序列在已有数据中增加新数据完成自增序号,序号是增加了 但是为什么新加的数据在1,2,3条数据的前头啊
- 物化视图同步问题?
- C++、Oracle、Linux群,号码:14106362,欢迎常在线的高手加入指导
- 判断表在oracle数据库中是否存在?
- 如何向oracle中存储图片??????????
- ORACLE中列举某库下所有表的语句是什么?
- 如何区分存储过程中的变量与字段
- 各位请进,关于C#调用Oracle存储过程开发的问题
- 问题
- 同一台机器上,os 为win2000,能否同时安装 oracle9i 客户端和服务器?我想通过客户端创建的服务名与数据库建立连接。
- 存储过程中,怎样实现插入一个不定长的结构数组?
- 求一个触发器的写法
after update on asset_transfer_interface
for each row
declare
v_orig_dept varchar2(20);
v_from_table varchar2(50);
begin
if UPDATING('process_status') then
if :NEW.process_status = 'REJECT' then
--本次转移被拒绝
v_from_table := UPPER(trim(:NEW.description));
if v_from_table='LBS_DEPT_INFO' then
v_orig_dept := 'LBS_'||:NEW.dept_no_from;
elsif v_from_table='GBS_DEPT_INFO' then
v_orig_dept := 'GBS_'||:NEW.dept_no_from;
else
v_orig_dept := :NEW.dept_no_from;
end if;
update devicebasicinfo set depid = v_orig_dept
where deviceid = :NEW.deviceid;
elsif :NEW.process_status = 'UPLOAD' then
null;
else
--本次转移完成
update device_interface_log set process_flag='1'
where deviceid=:NEW.deviceid and process_type='T'
and interface_id = :NEW.transfer_interface_id;
end if;
end if;
end;
/举个例子
loop
vsql = 'create or replace trigger TA_'||ct.table_name||'
after update on '||ct.table_name||'
for each row
.....
';
for ct in(select column_name from User_Tab_Cols where column_name =ct.table_name)
loop
vsql = vsql +....
end loop;
vsql = vsql +....
EXECUTE IMMEDIATE vs_sql;
end loop;