الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

عمل Audit Tables بشكل آلي من خلال Function

Featured Replies

بتاريخ:

مرحبا

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;

بتاريخ:

ممتاز بس مكدبش عليك محتاج بعض التوضيح لو ممكن تتعب شوي كمان وتشرحة لذيادة الفهم اللة يبارك فيك :blink:

بتاريخ:

بسم الله ما شاء الله

بتاريخ:
  • كاتب الموضوع

مرحبا
**هذا تعديل للسكريبت**

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;

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.