客戶那邊有一個oracle觸發器,該觸發器向其他兩個oracle服務器同步資料,這個觸發器是怎么向其他資料庫同步資料的?也沒有用dblink啊?
CREATE OR REPLACE TRIGGER "QGTG".T_BJ_CB_T_ZSWSBJ_IUD
AFTER INSERT OR UPDATE OR DELETE ON BJ_CB_T_ZSWSBJ
FOR EACH ROW
DECLARE
v_program_name VARCHAR2(128);
cur INTEGER;
v_procname VARCHAR2(128);
rows_processed INTEGER;
file_name VARCHAR2(100);
file_no NUMBER;
clobdata VARCHAR2(32767);
BEGIN
SELECT LOWER(program) INTO v_program_name FROM v$session WHERE audsid=TO_NUMBER(USERENV('sessionid'));
IF INSTR(v_program_name, 'xmltodb') > 0 THEN
RETURN;
END IF;
cur := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cur, 'select LOWER(procname) from exprocdata', DBMS_SQL.NATIVE);
DBMS_SQL.DEFINE_COLUMN(cur, 1, v_procname, 128);
rows_processed := DBMS_SQL.EXECUTE(cur);
LOOP
EXIT WHEN DBMS_SQL.FETCH_ROWS (cur) = 0;
DBMS_SQL.COLUMN_VALUE (cur, 1, v_procname);
IF SUBSTR(v_program_name, 1, LENGTHB(v_procname)) = v_procname THEN
DBMS_SQL.CLOSE_CURSOR (cur);
RETURN;
END IF;
END LOOP;
DBMS_SQL.CLOSE_CURSOR (cur);
SELECT EXDATABUFFER_SEQUENCE.NEXTVAL INTO file_no FROM dual;
IF INSERTING THEN
BEGIN
clobdata := '[BJ_CB_T_ZSWSBJ#INSERT#AI]' || CHR(10);
clobdata := clobdata || 'CBJSBS#VARCHAR2#' || LENGTHB(:new.CBJSBS) || '#' || CHR(10);
IF LENGTHB(:new.CBJSBS) > 0 THEN
clobdata := clobdata || :new.CBJSBS || CHR(10);
END IF;
clobdata := clobdata || 'JCFL#CHAR#' || LENGTHB(:new.JCFL) || '#' || CHR(10);
IF LENGTHB(:new.JCFL) > 0 THEN
clobdata := clobdata || :new.JCFL || CHR(10);
END IF;
clobdata := clobdata || 'ZWCBM#VARCHAR2#' || LENGTHB(:new.ZWCBM) || '#' || CHR(10);
IF LENGTHB(:new.ZWCBM) > 0 THEN
clobdata := clobdata || :new.ZWCBM || CHR(10);
END IF;
clobdata := clobdata || 'YWCBM#VARCHAR2#' || LENGTHB(:new.YWCBM) || '#' || CHR(10);
IF LENGTHB(:new.YWCBM) > 0 THEN
clobdata := clobdata || :new.YWCBM || CHR(10);
END IF;
clobdata := clobdata || 'IMO#VARCHAR2#' || LENGTHB(:new.IMO) || '#' || CHR(10);
IF LENGTHB(:new.IMO) > 0 THEN
clobdata := clobdata || :new.IMO || CHR(10);
END IF;
clobdata := clobdata || 'GJHH#VARCHAR2#' || LENGTHB(:new.GJHH) || '#' || CHR(10);
IF LENGTHB(:new.GJHH) > 0 THEN
clobdata := clobdata || :new.GJHH || CHR(10);
END IF;
clobdata := clobdata || 'GJDQDM#VARCHAR2#' || LENGTHB(:new.GJDQDM) || '#' || CHR(10);
IF LENGTHB(:new.GJDQDM) > 0 THEN
clobdata := clobdata || :new.GJDQDM || CHR(10);
END IF;
clobdata := clobdata || 'CZXM#VARCHAR2#' || LENGTHB(:new.CZXM) || '#' || CHR(10);
IF LENGTHB(:new.CZXM) > 0 THEN
clobdata := clobdata || :new.CZXM || CHR(10);
END IF;
clobdata := clobdata || 'CZGJ#VARCHAR2#' || LENGTHB(:new.CZGJ) || '#' || CHR(10);
IF LENGTHB(:new.CZGJ) > 0 THEN
clobdata := clobdata || :new.CZGJ || CHR(10);
END IF;
clobdata := clobdata || 'DLGSJ#VARCHAR2#' || LENGTHB(:new.DLGSJ) || '#' || CHR(10);
IF LENGTHB(:new.DLGSJ) > 0 THEN
clobdata := clobdata || :new.DLGSJ || CHR(10);
END IF;
clobdata := clobdata || 'SLGK#VARCHAR2#' || LENGTHB(:new.SLGK) || '#' || CHR(10);
IF LENGTHB(:new.SLGK) > 0 THEN
clobdata := clobdata || :new.SLGK || CHR(10);
END IF;
clobdata := clobdata || 'SLGKGJDQDM#VARCHAR2#' || LENGTHB(:new.SLGKGJDQDM) || '#' || CHR(10);
IF LENGTHB(:new.SLGKGJDQDM) > 0 THEN
clobdata := clobdata || :new.SLGKGJDQDM || CHR(10);
END IF;
clobdata := clobdata || 'TKMT#VARCHAR2#' || LENGTHB(:new.TKMT) || '#' || CHR(10);
IF LENGTHB(:new.TKMT) > 0 THEN
clobdata := clobdata || :new.TKMT || CHR(10);
END IF;
clobdata := clobdata || 'TKBW#VARCHAR2#' || LENGTHB(:new.TKBW) || '#' || CHR(10);
IF LENGTHB(:new.TKBW) > 0 THEN
clobdata := clobdata || :new.TKBW || CHR(10);
END IF;
clobdata := clobdata || 'HCZY#VARCHAR2#' || LENGTHB(:new.HCZY) || '#' || CHR(10);
IF LENGTHB(:new.HCZY) > 0 THEN
clobdata := clobdata || :new.HCZY || CHR(10);
END IF;
clobdata := clobdata || 'SZHW#VARCHAR2#' || LENGTHB(:new.SZHW) || '#' || CHR(10);
IF LENGTHB(:new.SZHW) > 0 THEN
clobdata := clobdata || :new.SZHW || CHR(10);
END IF;
clobdata := clobdata || 'DJZS#VARCHAR2#' || LENGTHB(:new.DJZS) || '#' || CHR(10);
IF LENGTHB(:new.DJZS) > 0 THEN
clobdata := clobdata || :new.DJZS || CHR(10);
END IF;
clobdata := clobdata || 'CDGS#VARCHAR2#' || LENGTHB(:new.CDGS) || '#' || CHR(10);
IF LENGTHB(:new.CDGS) > 0 THEN
clobdata := clobdata || :new.CDGS || CHR(10);
END IF;
clobdata := clobdata || 'CBGS#VARCHAR2#' || LENGTHB(:new.CBGS) || '#' || CHR(10);
IF LENGTHB(:new.CBGS) > 0 THEN
clobdata := clobdata || :new.CBGS || CHR(10);
END IF;
clobdata := clobdata || 'ZDW#NUMBER#' || TRIM(:new.ZDW) || CHR(10);
clobdata := clobdata || 'JDW#NUMBER#' || TRIM(:new.JDW) || CHR(10);
clobdata := clobdata || 'CJG#VARCHAR2#' || LENGTHB(:new.CJG) || '#' || CHR(10);
IF LENGTHB(:new.CJG) > 0 THEN
clobdata := clobdata || :new.CJG || CHR(10);
END IF;
clobdata := clobdata || 'CBZLDM#VARCHAR2#' || LENGTHB(:new.CBZLDM) || '#' || CHR(10);
IF LENGTHB(:new.CBZLDM) > 0 THEN
clobdata := clobdata || :new.CBZLDM || CHR(10);
END IF;
clobdata := clobdata || 'FJ#VARCHAR2#' || LENGTHB(:new.FJ) || '#' || CHR(10);
IF LENGTHB(:new.FJ) > 0 THEN
clobdata := clobdata || :new.FJ || CHR(10);
END IF;
clobdata := clobdata || 'SBBZ#VARCHAR2#' || LENGTHB(:new.SBBZ) || '#' || CHR(10);
IF LENGTHB(:new.SBBZ) > 0 THEN
clobdata := clobdata || :new.SBBZ || CHR(10);
END IF;
clobdata := clobdata || 'DLYWY#VARCHAR2#' || LENGTHB(:new.DLYWY) || '#' || CHR(10);
IF LENGTHB(:new.DLYWY) > 0 THEN
clobdata := clobdata || :new.DLYWY || CHR(10);
END IF;
clobdata := clobdata || 'SBR#VARCHAR2#' || LENGTHB(:new.SBR) || '#' || CHR(10);
IF LENGTHB(:new.SBR) > 0 THEN
clobdata := clobdata || :new.SBR || CHR(10);
END IF;
clobdata := clobdata || 'SBSJ#VARCHAR2#' || LENGTHB(:new.SBSJ) || '#' || CHR(10);
IF LENGTHB(:new.SBSJ) > 0 THEN
clobdata := clobdata || :new.SBSJ || CHR(10);
END IF;
clobdata := clobdata || 'CZY#VARCHAR2#' || LENGTHB(:new.CZY) || '#' || CHR(10);
IF LENGTHB(:new.CZY) > 0 THEN
clobdata := clobdata || :new.CZY || CHR(10);
END IF;
clobdata := clobdata || 'CZBM#VARCHAR2#' || LENGTHB(:new.CZBM) || '#' || CHR(10);
IF LENGTHB(:new.CZBM) > 0 THEN
clobdata := clobdata || :new.CZBM || CHR(10);
END IF;
clobdata := clobdata || 'CZSJ#VARCHAR2#' || LENGTHB(:new.CZSJ) || '#' || CHR(10);
IF LENGTHB(:new.CZSJ) > 0 THEN
clobdata := clobdata || :new.CZSJ || CHR(10);
END IF;
clobdata := clobdata || 'SJLY#VARCHAR2#' || LENGTHB(:new.SJLY) || '#' || CHR(10);
IF LENGTHB(:new.SJLY) > 0 THEN
clobdata := clobdata || :new.SJLY || CHR(10);
END IF;
clobdata := clobdata || 'KADM#VARCHAR2#' || LENGTHB(:new.KADM) || '#' || CHR(10);
IF LENGTHB(:new.KADM) > 0 THEN
clobdata := clobdata || :new.KADM || CHR(10);
END IF;
clobdata := clobdata || 'JTGJLXDM#VARCHAR2#' || LENGTHB(:new.JTGJLXDM) || '#' || CHR(10);
IF LENGTHB(:new.JTGJLXDM) > 0 THEN
clobdata := clobdata || :new.JTGJLXDM || CHR(10);
END IF;
clobdata := clobdata || 'CBDH#VARCHAR2#' || LENGTHB(:new.CBDH) || '#' || CHR(10);
IF LENGTHB(:new.CBDH) > 0 THEN
clobdata := clobdata || :new.CBDH || CHR(10);
END IF;
file_name := 'TRIGGER^BJ_CB_T_ZSWSBJ^I^' || TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') || '^' || TRIM(to_char(file_no, '0000000000'));
INSERT INTO EXDATABUFFER VALUES (file_no,'BJ_CB_T_ZSWSBJ',file_name,clobdata);
END;
END IF;
IF UPDATING THEN
BEGIN
clobdata := '[BJ_CB_T_ZSWSBJ#UPDATE#AI]' || CHR(10);
clobdata := clobdata || 'CBJSBS#VARCHAR2#new#' || LENGTHB(:new.CBJSBS) || '#' || CHR(10);
IF LENGTHB(:new.CBJSBS) > 0 THEN
clobdata := clobdata || :new.CBJSBS || CHR(10);
END IF;
clobdata := clobdata || 'JCFL#CHAR#new#' || LENGTHB(:new.JCFL) || '#' || CHR(10);
IF LENGTHB(:new.JCFL) > 0 THEN
clobdata := clobdata || :new.JCFL || CHR(10);
END IF;
clobdata := clobdata || 'ZWCBM#VARCHAR2#new#' || LENGTHB(:new.ZWCBM) || '#' || CHR(10);
IF LENGTHB(:new.ZWCBM) > 0 THEN
clobdata := clobdata || :new.ZWCBM || CHR(10);
END IF;
clobdata := clobdata || 'YWCBM#VARCHAR2#new#' || LENGTHB(:new.YWCBM) || '#' || CHR(10);
IF LENGTHB(:new.YWCBM) > 0 THEN
clobdata := clobdata || :new.YWCBM || CHR(10);
END IF;
clobdata := clobdata || 'IMO#VARCHAR2#new#' || LENGTHB(:new.IMO) || '#' || CHR(10);
IF LENGTHB(:new.IMO) > 0 THEN
clobdata := clobdata || :new.IMO || CHR(10);
END IF;
clobdata := clobdata || 'GJHH#VARCHAR2#new#' || LENGTHB(:new.GJHH) || '#' || CHR(10);
IF LENGTHB(:new.GJHH) > 0 THEN
clobdata := clobdata || :new.GJHH || CHR(10);
END IF;
clobdata := clobdata || 'GJDQDM#VARCHAR2#new#' || LENGTHB(:new.GJDQDM) || '#' || CHR(10);
IF LENGTHB(:new.GJDQDM) > 0 THEN
clobdata := clobdata || :new.GJDQDM || CHR(10);
END IF;
clobdata := clobdata || 'CZXM#VARCHAR2#new#' || LENGTHB(:new.CZXM) || '#' || CHR(10);
IF LENGTHB(:new.CZXM) > 0 THEN
clobdata := clobdata || :new.CZXM || CHR(10);
END IF;
clobdata := clobdata || 'CZGJ#VARCHAR2#new#' || LENGTHB(:new.CZGJ) || '#' || CHR(10);
IF LENGTHB(:new.CZGJ) > 0 THEN
clobdata := clobdata || :new.CZGJ || CHR(10);
END IF;
clobdata := clobdata || 'DLGSJ#VARCHAR2#new#' || LENGTHB(:new.DLGSJ) || '#' || CHR(10);
IF LENGTHB(:new.DLGSJ) > 0 THEN
clobdata := clobdata || :new.DLGSJ || CHR(10);
END IF;
clobdata := clobdata || 'SLGK#VARCHAR2#new#' || LENGTHB(:new.SLGK) || '#' || CHR(10);
IF LENGTHB(:new.SLGK) > 0 THEN
clobdata := clobdata || :new.SLGK || CHR(10);
END IF;
clobdata := clobdata || 'SLGKGJDQDM#VAR
uj5u.com熱心網友回復:
可能是那邊用這些表 做的物化視圖 ,等等一些方式吧轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/48208.html
標籤:開發
上一篇:同一條sql分分別用一張表的三個同型別欄位作為條件查詢,一個查得出,兩個查不出是什么情況?
下一篇:資料庫系統概論(1)
