Thứ Hai, 28 tháng 5, 2018

[Oracle PLSQL] Truncate Table in many Schemas

/* Formatted on 5/28/2018 2:54:17 PM (QP5 v5.149.1003.31008) */
DECLARE
   TYPE T_V_SCHEMA IS TABLE OF VARCHAR2 (20);
   V_SCHEMA   T_V_SCHEMA;
BEGIN
   V_SCHEMA := T_V_SCHEMA ('TEST1','TEST2','TEST3');          --Input Schema Name

   FOR L_V_SCHEMA IN 1 .. V_SCHEMA.COUNT             --Loop schema in the list
   LOOP
      FOR L_V_TABLE
         IN (SELECT TABLE_NAME, CONSTRAINT_NAME --Disable first the foreign key
               FROM DBA_CONSTRAINTS
              WHERE     CONSTRAINT_TYPE = 'R'
                    AND STATUS = 'ENABLED'
                    AND OWNER = V_SCHEMA (L_V_SCHEMA))
      LOOP
         --                     EXECUTE IMMEDIATE   ' ALTER TABLE '
         --                        || V_SCHEMA (L_V_SCHEMA)
         --                        || '.'
         --                        || L_V_TABLE.TABLE_NAME
         --                        || ' DISABLE CONSTRAINT '
         --                        || V_SCHEMA (L_V_SCHEMA)
         --                        || '.'
         --                        || L_V_TABLE.CONSTRAINT_NAME;

         DBMS_OUTPUT.
          PUT_LINE (
               'ALTER TABLE '
            || V_SCHEMA (L_V_SCHEMA)
            || '.'
            || L_V_TABLE.TABLE_NAME
            || ' DISABLE CONSTRAINT '
            || L_V_TABLE.CONSTRAINT_NAME || ';');
      END LOOP L_V_TABLE;


      FOR L_V_TABLE
         IN (SELECT TABLE_NAME, CONSTRAINT_NAME -- then disable all constraints
               FROM DBA_CONSTRAINTS
              WHERE STATUS = 'ENABLED' AND OWNER = V_SCHEMA (L_V_SCHEMA))
      LOOP
         --                     EXECUTE IMMEDIATE   'ALTER TABLE '
         --                        || V_SCHEMA (L_V_SCHEMA)
         --                        || '.'
         --                        || L_V_TABLE.TABLE_NAME
         --                        || ' DISABLE CONSTRAINT '
         --                        || V_SCHEMA (L_V_SCHEMA)
         --                        || '.'
         --                        || L_V_TABLE.CONSTRAINT_NAME;
         DBMS_OUTPUT.
          PUT_LINE (
               'ALTER TABLE '
            || V_SCHEMA (L_V_SCHEMA)
            || '.'
            || L_V_TABLE.TABLE_NAME
            || ' DISABLE CONSTRAINT '
            || L_V_TABLE.CONSTRAINT_NAME || ';');
      END LOOP L_V_TABLE;

      FOR L_V_TABLE IN (SELECT TABLE_NAME                     --Truncate Table
                          FROM DBA_TABLES
                         WHERE OWNER = V_SCHEMA (L_V_SCHEMA))
      LOOP
         --                     EXECUTE IMMEDIATE  'TRUNCATE table '
         --                        || V_SCHEMA (L_V_SCHEMA)
         --                        || '.'
         --                        || L_V_TABLE.TABLE_NAME;

         DBMS_OUTPUT.
          PUT_LINE (
               'TRUNCATE table '
            || V_SCHEMA (L_V_SCHEMA)
            || '.'
            || L_V_TABLE.TABLE_NAME || ';');
      END LOOP L_V_TABLE;
   END LOOP;
END;
/