بتاريخ: 15 فبراير 201016 سنة comment_185030 مرحبا DECLARE OUT VARCHAR2(10000); OUTT VARCHAR2(10000); CURSOR C1 IS SELECT A.TABLE_NAME FROM USER_TABLES A WHERE TABLE_NAME not like '%_ADT'; CURSOR C2(TAB_NAME VARCHAR2) IS SELECT A.TABLE_NAME, A.COLUMN_NAME, A.DATA_TYPE, A.DATA_LENGTH FROM DBA_TAB_COLUMNS A WHERE A.TABLE_NAME = TAB_NAME ; BEGIN DBMS_OUTPUT.PUT_LINE('--------------------- Start ------------------'); FOR I IN C1 LOOP OUT :='CREATE TABLE ' || I.TABLE_NAME || '_ADT(' || CHR(10)|| '/* -------------[AUTO GENRATED SCRIPT]-------------' || CHR(10)|| ' --------[uSER: '||USER||' DATE: '||TO_CHAR(SYSDATE,'DD/MM/YYYY')||']-------- */'|| CHR(10); OUTT :='CREATE OR REPLACE TRIGGER '|| I.TABLE_NAME|| '_TRGR' || CHR(10) || 'AFTER INSERT OR UPDATE OR DELETE ' || CHR(10)|| 'ON '||I.TABLE_NAME||CHR(10)|| 'FOR EACH ROW ' || CHR(10)|| 'BEGIN ' || CHR(10)|| '/* -------------[AUTO GENRATED SCRIPT]-------------' || CHR(10)|| ' --------[uSER: '||USER||' DATE: '||TO_CHAR(SYSDATE,'DD/MM/YYYY')||']-------- */'|| CHR(10)|| ' INSERT INTO '||I.TABLE_NAME || '_ADT VALUSE('|| CHR(10); FOR J IN C2(I.TABLE_NAME) LOOP IF J.DATA_TYPE != 'DATE' THEN OUT := OUT ||' '|| J.COLUMN_NAME || '_New ' || J.DATA_TYPE || ' (' || J.DATA_LENGTH || '),' || CHR(10); OUTT:=OUTT||' :NEW.'||J.COLUMN_NAME||','; OUT := OUT ||' '|| J.COLUMN_NAME || '_Old ' || J.DATA_TYPE || ' (' || J.DATA_LENGTH || '),' || CHR(10); OUTT:=OUTT||':OLD.'||J.COLUMN_NAME||','||CHR(10); ELSE OUT := OUT ||' '|| J.COLUMN_NAME || '_New ' || J.DATA_TYPE || ' ,' || CHR(10); OUTT:=OUTT||' :NEW.'||J.COLUMN_NAME||','; OUT := OUT ||' '|| J.COLUMN_NAME || '_Old ' || J.DATA_TYPE || ' ,' || CHR(10); OUTT:=OUTT||':OLD.'||J.COLUMN_NAME||','||CHR(10); END IF; END LOOP; OUT := OUT || ' USERNM VARCHAR2(33),'||CHR(10)|| ' CHNGDATE DATE' || CHR(10) || ')' || CHR(10); OUTT := OUTT||' USER,'||CHR(10)|| ' SYSDATE);' || CHR(10); OUTT:=OUTT||'END'; begin EXECUTE IMMEDIATE(OUT); --DBMS_OUTPUT.PUT_LINE(OUT); DBMS_OUTPUT.PUT_LINE('--------------------- Create Audit Table ['||i.TABLE_NAME||'_ADT] ------------------'); exception when others then null; end; begin EXECUTE IMMEDIATE(OUTT); --DBMS_OUTPUT.PUT_LINE(OUTT); DBMS_OUTPUT.PUT_LINE('--------------------- Create Trigger ['||i.TABLE_NAME||'_TRGR] ------------------'); exception when others then null; end; END LOOP; DBMS_OUTPUT.PUT_LINE('--------------------- End ------------------'); END; تقديم بلاغ
بتاريخ: 15 فبراير 201016 سنة comment_185050 ممتاز بس مكدبش عليك محتاج بعض التوضيح لو ممكن تتعب شوي كمان وتشرحة لذيادة الفهم اللة يبارك فيك تقديم بلاغ
بتاريخ: 16 فبراير 201016 سنة كاتب الموضوع comment_185132 مرحبا**هذا تعديل للسكريبت** DECLARE OUT VARCHAR2(10000); OUTT VARCHAR2(10000); CURSOR C1 IS SELECT A.TABLE_NAME FROM USER_TABLES A WHERE TABLE_NAME not like '%_ADT'; CURSOR C2(TAB_NAME VARCHAR2) IS SELECT A.TABLE_NAME, A.COLUMN_NAME, A.DATA_TYPE, A.DATA_LENGTH FROM DBA_TAB_COLUMNS A WHERE A.TABLE_NAME = TAB_NAME /*'ACC_TYPES'*/ ; BEGIN DBMS_OUTPUT.PUT_LINE('--------------------- Start ------------------'); FOR I IN C1 LOOP OUT :='CREATE TABLE ' || I.TABLE_NAME || '_ADT(' || CHR(10)|| '/* -------------[AUTO GENRATED SCRIPT]-------------' || CHR(10)|| ' --------[uSER: '||USER||' DATE: '||TO_CHAR(SYSDATE,'DD/MM/YYYY')||']-------- */'|| CHR(10); OUTT :='CREATE OR REPLACE TRIGGER '|| I.TABLE_NAME|| '_TRGR' || CHR(10) || 'AFTER INSERT OR UPDATE OR DELETE ' || CHR(10)|| 'ON '||I.TABLE_NAME||CHR(10)|| 'FOR EACH ROW ' || CHR(10)|| 'BEGIN ' || CHR(10)|| '/* -------------[AUTO GENRATED SCRIPT]-------------' || CHR(10)|| ' --------[uSER: '||USER||' DATE: '||TO_CHAR(SYSDATE,'DD/MM/YYYY')||']-------- */'|| CHR(10)|| ' INSERT INTO '||I.TABLE_NAME || '_ADT VALUES('|| CHR(10); FOR J IN C2(I.TABLE_NAME) LOOP IF J.DATA_TYPE != 'DATE' THEN OUT := OUT ||' '|| J.COLUMN_NAME || '_New ' || J.DATA_TYPE || ' (' || J.DATA_LENGTH || '),' || CHR(10); OUTT:=OUTT||' :NEW.'||J.COLUMN_NAME||','; OUT := OUT ||' '|| J.COLUMN_NAME || '_Old ' || J.DATA_TYPE || ' (' || J.DATA_LENGTH || '),' || CHR(10); OUTT:=OUTT||':OLD.'||J.COLUMN_NAME||','||CHR(10); ELSE OUT := OUT ||' '|| J.COLUMN_NAME || '_New ' || J.DATA_TYPE || ' ,' || CHR(10); OUTT:=OUTT||' :NEW.'||J.COLUMN_NAME||','; OUT := OUT ||' '|| J.COLUMN_NAME || '_Old ' || J.DATA_TYPE || ' ,' || CHR(10); OUTT:=OUTT||':OLD.'||J.COLUMN_NAME||','||CHR(10); END IF; END LOOP; OUT := OUT || ' USERNM VARCHAR2(33),'||CHR(10)|| ' CHNGDATE DATE' || CHR(10) || ');' || CHR(10); OUTT := OUTT||' USER,'||CHR(10)|| ' SYSDATE);' || CHR(10); OUTT:=OUTT||'END;'; begin EXECUTE IMMEDIATE(OUT); --DBMS_OUTPUT.PUT_LINE(OUT); DBMS_OUTPUT.PUT_LINE('--------------------- Create Audit Table ['||i.TABLE_NAME||'_ADT] ------------------'); exception when others then null; end; begin EXECUTE IMMEDIATE(OUTT); --DBMS_OUTPUT.PUT_LINE(OUTT); DBMS_OUTPUT.PUT_LINE('--------------------- Create Trigger ['||i.TABLE_NAME||'_TRGR] ------------------'); exception when others then null; end; END LOOP; DBMS_OUTPUT.PUT_LINE('--------------------- End ------------------'); END; تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.