大家好,请教在oracle中能否获取update记录 所涉及的字段的名称?如能实现的话,请教相关实现方法。谢谢~

0
如题:
例如表 A 有ID,NAME,ADDRESS 3个字段

update A set name='tom' address='CHINA' where ID='001';

想要得到的结果是,得到 NAME,ADDRESS这2个字段名。
已邀请:
2

Amy - 今天我们不成功,一定会有人成功。假如我们不能成功,后悔的一定是我们自己。我们今天要做的,就是不要让自己后悔。 2013-09-17 回答

可以写个触发器来记录的吧,参考下面看看,
create or replace trigger tg_tf_pr_order_test_tg
after update or delete on tf_pr_order_test_tg
for each row
declare
iv_PARTITION_ID number(4);--PARTITION_ID,分区字段 iv_ORDER_ID number(16); --工单编号 iv_STAFF_ID number(16); --修改工号 iv_MODIFY_TIME date; --修改日期 iv_TAB_NAME varchar2(50); --表名 iv_COL_NAME varchar2(50); --字段名 iv_NEW_VALUE varchar2(2000);--新值 iv_OLD_VALUE varchar2(2000);--旧值
begin iv_ORDER_ID := :old.ORDER_ID;
iv_PARTITION_ID := mod(:old.ORDER_ID,10000);
iv_MODIFY_TIME := SYSDATE;
iv_TAB_NAME := 'tf_pr_order_test_tg';
if deleting then
for i in (SELECT * FROM ALL_COL_COMMENTS WHERE TABLE_NAME = 'tf_pr_order_test_tg') loop
iv_COL_NAME := i.COLUMN_NAME;
iv_OLD_VALUE := :old.iv_COL_NAME;
insert into TF_PR_ORDER_LOG values(iv_PARTITION_ID,iv_ORDER_ID,'',iv_MODIFY_TIME,iv_TAB_NAME,iv_COL_NAME,'null',iv_OLD_VALUE);
end loop;
elsif updating then
for j in (SELECT * FROM ALL_COL_COMMENTS WHERE TABLE_NAME = 'tf_pr_order_test_tg') loop
iv_COL_NAME := j.COLUMN_NAME;
if old.iv_COL_NAME <> new.iv_COL_NAME then
insert into TF_PR_ORDER_LOG values(iv_PARTITION_ID,iv_ORDER_ID,'',iv_MODIFY_TIME,iv_TAB_NAME,iv_COL_NAME,new.iv_COL_NAME,old.iv_COL_NAME);
end if;
end loop;
end if;
end;

要回复问题请先登录注册