这里有关如何对数据行内容的变化记录日志的后续代码部分。 此问题提交于2004年10月26日 v_SINGLE_QUOTE char(1):= chr(39); vSep VARchar2(10); BEGIN DBMS_OUTPUT.PUT_LINE(’create OR REPLACE TRIGGER ’ || GENERATE_TRIG_NAME(p_Table_Name)); DB……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
这里有关如何对数据行内容的变化记录日志的后续代码部分。
此问题提交于2004年10月26日
v_SINGLE_QUOTE char(1):= chr(39); vSep VARchar2(10); |
BEGIN DBMS_OUTPUT.PUT_LINE(’create OR REPLACE TRIGGER ’ || GENERATE_TRIG_NAME(p_Table_Name)); DBMS_OUTPUT.PUT_LINE(’ AFTER update ON ’ || p_Table_Name); DBMS_OUTPUT.PUT_LINE(’ FOR EACH ROW’); DBMS_OUTPUT.PUT_LINE(’DECLARE ’); DBMS_OUTPUT.PUT_LINE(’ vTABLE_NAME VARchar2(30) := ’ || v_SINGLE_QUOTE || p_Table_Name || v_SINGLE_QUOTE || ’;’); -- 创建 Key_Value DBMS_OUTPUT.PUT_LINE(’ vKEY_VALUE VARchar2(100) ’); FOR c1rec IN c1(p_Table_Name) LOOP IF c1rec.POSITION = C1rec.LAST_POSITION THEN vSep:=’;’; ELSE vSep:=’||’’~’’|| ’; END IF; IF c1rec.data_type = ’DATE’ THEN DBMS_OUTPUT.PUT_LINE(’ to_char(:new.’||c1rec.column_name||’,’’MM-DD-YYYY’’)’ || vSep ); ELSIF c1rec.data_type = ’NUMBER’ THEN DBMS_OUTPUT.PUT_LINE(’ to_char(:new.’||c1rec.column_name||’)’ || vSep ); ELSE DBMS_OUTPUT.PUT_LINE(’ :new.’||c1rec.column_name || vSep ); END IF; END LOOP; DBMS_OUTPUT.PUT_LINE(’ vACTION_DATE DATE := SYSDATE’); DBMS_OUTPUT.PUT_LINE(’ vUSER_NAME VARchar2(30) := USER’); DBMS_OUTPUT.PUT_LINE(’BEGIN’); FOR c2rec IN c2(p_Table_Name) LOOP IF c2rec.column_id > 1 THEN BEGIN DBMS_OUTPUT.PUT_LINE(’ log_change_info (vTABLE_NAME, vKEY_VALUE, vACTION_DATE, vUSER_NAME, ’ ); DBMS_OUTPUT.PUT_LINE(’ ’||v_SINGLE_QUOTE||c2rec.COLUMN_NAME||v_SINGLE_QUOTE||’, :old.’||c2rec.COLUMN_NAME||’, :new.’||c2rec.COLUMN_NAME||’);’ ); EXCEPTION WHEN OTHERS THEN dbms_output.put_line(’**** ’); dbms_output.put_line(’**** Error formatting column: ’||c2rec.column_ID); dbms_output.put_line(’**** ’); END; END IF; END LOOP; DBMS_OUTPUT.PUT_LINE(’end;’); DBMS_OUTPUT.PUT_LINE(’/’); --EXCEPTION -- WHEN OTHERS THEN -- NULL; END create_AUDIT_TRIG_DYNAMIC; / create OR REPLACE PROCEDURE log_change_info (vTABLE_NAME IN VARchar2, vKEY_VALUE IN VARchar2, dACTION_DATE IN DATE, vUSER_NAME IN VARchar2, vCOLUMN_NAME IN VARchar2, vOLD_VALUE IN VARchar2, vNEW_VALUE IN VARchar2) IS BEGIN IF (vNEW_VALUE IS NULL AND vOLD_VALUE IS NOT NULL) OR (vNEW_VALUE != vOLD_VALUE) OR (vNEW_VALUE IS NOT NULL AND vOLD_VALUE IS NULL) THEN insert INTO DATA_CHANGE_AUDIT (table_name, primary_key_value, column_name, action_date, old_value, new_value, user_name) VALUES (vTABLE_NAME, vKEY_VALUE, vCOLUMN_NAME, NVL(dACTION_DATE,SYSDATE), vOLD_VALUE, vNEW_VALUE, NVL(vUSER_NAME,USER)); END IF; END log_change_info; / |
作者
相关推荐
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。
-
2017年11月数据库流行度排行榜 半数以上数据库积分减少
数据库知识网站DB-engines更新了2016年11月份的数据库流行度排行榜。TechTarget数据库网站将与您一同关注11月份的榜单排名情况。
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。