1. 程式人生 > >oracle 監控表資料變更觸發器(指令碼生成)

oracle 監控表資料變更觸發器(指令碼生成)

-------------- 構造insert action指令碼---------------- 
select 1,REPLACE( 'CREATE OR REPLACE TRIGGER TR_TB_TEST_LOG
  AFTER INSERT OR UPDATE ON TB_TEST
  FOR EACH ROW
DECLARE
  LOG NUMBER(1)~~~~
BEGIN
   if inserting  then
   insert into tb_log(LOG_ID, OBJECT_NAME,KEY_VALUE, EMP_GCODE, EMP_NAME, ACTION_TYPE,UNDO_SQL,REDO_SQL)
        values(SQ_LOG.NEXTVAL,''TB_TEST'',:new.PROVINCE_CODE, 
         :new.OP_EMP_GCODE,:new.OP_EMP_NAME, ''新增'',
      ''delete TB_TEST where PROVINCE_CODE = ''''''||:new.PROVINCE_CODE||'''''';'',
       ''insert into TB_TEST('||wm_concat(a.column_name)||') 
values('||
       wm_concat(decode(b.data_type,'VARCHAR2','''''''||','CHAR','''''''||',
                 'NUMBER','''||NVL(TO_CHAR(','DATE','TO_DATE(''''''||TO_CHAR(','')||':new.'
        ||a.column_name||
       decode(b.data_type,'VARCHAR2','||''''''','CHAR','||''''''','NUMBER','),''NULL'')||''',
          'DATE',',''YYYY-MM-DD HH24:MI:SS'')||'''''',''''YYYY-MM-DD HH24:MI:SS'''')',''))||');''
          ); else ','~~~~',';') sql_text
          
from user_col_comments a , (select * from user_tab_columns order by column_id) b 
where a.table_name = b.table_name
 and a.column_name = b.column_name
 and a.table_name='TB_TEST'
 union all
---構造update action指令碼
select 2, replace('
select need_log into log from TB_COLUMNS where object_name=''TB_TEST'' and column_name='''||a.column_name||''' ~~~~
if nvl(:old.'||a.column_name||','||decode(b.data_type,'VARCHAR2',''' ''','CHAR',''' ''',
     'NUMBER','-9999','DATE','SYSDATE',''' ''')||') <> nvl(:new.'||a.column_name||','||
     decode(b.data_type,'VARCHAR2',''' ''','CHAR',''' ''',
     'NUMBER','-9999','DATE','SYSDATE',''' ''')||') and log=1 then
     insert into tb_log(LOG_ID, OBJECT_NAME,KEY_VALUE,COLUMN_NAME,
            OLD_VALUE, NEW_VALUE, EMP_GCODE, EMP_NAME, ACTION_TYPE,UNDO_SQL, REDO_SQL)
        values(SQ_LOG.NEXTVAL, ''TB_TEST'',:old.PROVINCE_CODE,'''||a.column_name||
        ''',:old.'||a.column_name||
        ',:new.'||a.column_name||', 
        :new.OP_EMP_GCODE,:new.OP_EMP_NAME,''修改'', 
        ''update TB_TEST set '|| a.column_name
        ||' = 
        '||decode(b.data_type,'VARCHAR2','''''''||',
                                 'CHAR','''''''||',
                                 'NUMBER','''|| nvl(TO_CHAR(',
                                  'DATE','TO_DATE(''''''||TO_CHAR(','''''''||')
        ||':old.'||a.column_name||
        decode(b.data_type,'VARCHAR2','||''''''','CHAR','||''''''','NUMBER','),''null'')||''',
            'DATE',',''YYYY-MM-DD HH24:MI:SS'')||'''''',''''YYYY-MM-DD HH24:MI:SS'''')','||''''''')||'
          where PROVINCE_CODE=''''''||:new.PROVINCE_CODE' ||'||'''''''',
          ''update TB_TEST set '|| a.column_name
        ||' = 
        '||decode(b.data_type,'VARCHAR2','''''''||','CHAR','''''''||','NUMBER','''||nvl(TO_CHAR(',
            'DATE','TO_DATE(''''''||TO_CHAR(','''''''||')
        ||':new.'||a.column_name||decode(b.data_type,'VARCHAR2','||''''''','CHAR','||''''''','NUMBER','),''null'')||''',
            'DATE',',''YYYY-MM-DD HH24:MI:SS'')||'''''',''''YYYY-MM-DD HH24:MI:SS'''')','||''''''')||'
          where PROVINCE_CODE=''''''||:old.PROVINCE_CODE' ||'||'''''''') ~~~~
        
end if;','~~~~',';') AS C1
from user_col_comments a , (select * from user_tab_columns order by column_id) b 
where a.table_name = b.table_name
 and a.column_name = b.column_name
 and a.table_name='TB_TEST'
union all
SELECT 3, REPLACE( '  END IF~~~~ 
END~~~~ ','~~~~',';') FROM DUAL 

order by 1 asc

--------------------替換TB_TEST 為所要監控的表名,執行以上指令碼,將獲得的指令碼執行後將生成監控觸發器

相關推薦

oracle 監控資料變更觸發器指令碼生成

-------------- 構造insert action指令碼----------------  select 1,REPLACE( 'CREATE OR REPLACE TRIGGER TR_TB_TEST_LOG   AFTER INSERT OR UPDATE O

SQL Server 變更資料捕獲CDC監控資料

一.本文所涉及的內容(Contents) 二.背景(Contexts)   在SQL Server 2008版本之前,對錶資料庫的變更監控,我們通常使用DML觸發器進行監控,把DML操作中的INSERT/UPDATE/DELETE資料記錄下來,但是觸發器的維護比較困難;   當SQL Server

SQL Server 更改跟蹤Chang Tracking監控資料

一.本文所涉及的內容(Contents) 二.背景(Contexts)   在SQL Server 2008以上版本中,對資料庫中的使用者表所做的 DML 更改(插入、更新和刪除操作)除了:SQL Server 變更資料捕獲(CDC)監控表資料之外,還有一個新增功能,那就是:更改跟蹤(Chang Tr

兩個資料庫資料實時同步sql2008 觸發器

/****** Object:  Trigger [dbo].[TR_C0T14]    Script Date: 11/01/2011 13:21:04 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -

[轉抄]oracle查詢去重效率比較高的一種方式

sel select 單表查詢 效率 查詢 rownum 說明 acl 分組 1 select 2 * 3 from 4 ( 5 select 6 a.*, rownum r_n 7

oracle匯入資料時遇到外來鍵約束問題導致匯入失敗

1、先關掉所有外來鍵約束: SELECT 'alter table  '|| t.table_name || ' disable constraint ' || t.CONSTRAINT_NAME || ';' FROM USER_CONSTRAINTS t WHERE t.CONST

匯入匯出 Oracle 分割槽資料

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Oracle 備份資料

--備份表資料 select * from t_owners; --建立備份表 create table t_owners_copy ( id number, name varchar2(100), addressid number, housenumber varchar2(1

線性資料結構解讀雜湊結構-HashMap

    前面的部落格中,我給大家分析過陣列和連結串列兩種線性表資料結構。陣列儲存區間連續,查詢方便,但是插入和刪除效率低下;連結串列儲存區間離散,插入刪除方便,但是查詢困難。大家肯定會問,有沒有一種結構,既能做到查詢便捷,又能做到插入刪除方便呢?答案就是我們今天

資料結構——單鏈實現及操作c語言

#include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #d

ORACLE查詢與解鎖指令碼|ORACLE解鎖指令碼|ORACLE

oracle鎖表查詢與解鎖指令碼|oracle解鎖指令碼|oracle鎖表。 首先你要有許可權,沒許可權就沒得玩。 然後你就可以執行下面的sql,童叟無欺。 SELECT b.owner table_owner, b.object_name, c.username, c

線性資料結構解讀鏈式雜湊結構-LinkedHashMap

    上一篇文章我和大家一起解讀了HashMap的原理原始碼,各位童鞋可以點選連結檢視線性表資料結構解讀(五)雜湊表結構-HashMap     這次我們一起來看一下LinkedHashMap,它保

oracle資料鄰行隔行處理

--語法--向後 LAG (value_expression [,offset] [,default]) OVER ([query_partition_clause] order_by_clause) --向前 LEAD (value_expression [,offset]

ORACLE 10G的資料泵自動備份指令碼

專案中遇到客戶有這種需求:資料泵每日定時備份一次,保留7個備份。以下指令碼可以實現此要求: [[email protected] oracle]$ cat /opt/oracle/expdp.sh  #/bin/sh PATH=$PATH:$HOME/bin ex

oracle刪除資料的兩種的方式

平時寫sql中我們都會用到刪除語句,而平時刪除表資料的時候我們經常會用到兩種方式: 在oracle中,truncate、delete都可以刪除表資料,具體的區別以及sql語法如下: truncate table [表名]; delete from [表名]; de

oracle檢視更新,替代觸發器

在oracle中通常如果檢視的資料來源來自單表則該檢視可以進行更新。而如果檢視資料來源來自兩個以上表時這個檢視是不可更新的。但有時候為了操作的方便我們更希望能夠對多表檢視也進行更新。 這時候我們可以通過建立更新觸發器來替代該檢視原有更新以達到多表更新的效果 例如:

oracle建立增加欄位sql指令碼

oracle comment on的用法 oracle中用comment on命令給表或欄位加以說明,語法如下: COMMENT ON { TABLE [ schema. ] { table | view } | COLUMN [ sc

hive部分:hive中載入資料的方式四種

注意:hive不支援insert into table values()的插入資料 hive表中載入資料的四種方式 1.從本地載入資料 hive (hive)> create table wyp > (id int,name strin

oracle-hr查詢命令練習超完整的select命令大全

切換到 oracle的 hr使用者下面練習 1.  查詢工資大於12000的員工姓名和工資 Select initcap(concat(last_name,first_name)) "姓名",salary from employees where salary>

c語言資料結構實現-雜湊/雜湊桶hashtable/hashbucket

一、需求 以“key-value”的形式進行插入、查詢、刪除,是否可以考慮犧牲空間換時間的做法? 二、相關知識 雜湊表(Hashtable)又稱為“雜湊表”,Hashtable是會根據索引鍵的雜湊程式程式碼組織成的索引鍵(Key)和值(Value)配對的集合。Hashtab