Commit 37614ec4 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Géréation SQL pour vider un schéma : tri par type puis nom d'objet

parent f87e8e9a
Loading
Loading
Loading
Loading
+122 −116
Original line number Diff line number Diff line
@@ -149,11 +149,13 @@ class SchemaService
        $schemaName = $this->extractSchemaNameFromConnection($connection);

        return <<<EOS
WITH TMP(CATEG, NAME, SQL) AS (

    --
    -- triggers
    --
    
SELECT 'DROP TRIGGER ' || owner || '.' || trigger_NAME || ';' || chr(10)
    SELECT 'A_TRIGGER', trigger_NAME, 'DROP TRIGGER ' || owner || '.' || trigger_NAME || ';' || chr(10)
    FROM   ALL_TRIGGERS
    WHERE  owner = '$schemaName'
    
@@ -164,7 +166,7 @@ UNION ALL
    -- views
    --
    
SELECT 'DROP VIEW ' || owner || '.' || view_name || ';' || chr(10)
    SELECT 'B_VIEW', view_name, 'DROP VIEW ' || owner || '.' || view_name || ';' || chr(10)
    FROM   all_views
    WHERE  owner      = '$schemaName'
    
@@ -175,7 +177,7 @@ UNION ALL
    -- materialized views
    --
    
SELECT 'DROP MATERIALIZED VIEW ' || owner || '.' || mview_name || ';' || chr(10)
    SELECT 'C_MATERIALIZED VIEW', mview_name, 'DROP MATERIALIZED VIEW ' || owner || '.' || mview_name || ';' || chr(10)
    FROM   all_mviews
    WHERE  owner = '$schemaName'
    
@@ -186,12 +188,12 @@ UNION ALL
    -- procedures and functions
    --
    
SELECT 'DROP PROCEDURE ' || owner || '.' || OBJECT_NAME || ';' || chr(10)
    SELECT 'D_PROCEDURE', OBJECT_NAME, 'DROP PROCEDURE ' || owner || '.' || OBJECT_NAME || ';' || chr(10)
    FROM   SYS.ALL_OBJECTS
    WHERE  owner = '$schemaName'
           and UPPER(OBJECT_TYPE) = 'PROCEDURE'
    UNION ALL
SELECT 'DROP FUNCTION ' || owner || '.' || OBJECT_NAME || ';' || chr(10)
    SELECT 'E_FUNCTION', OBJECT_NAME, 'DROP FUNCTION ' || owner || '.' || OBJECT_NAME || ';' || chr(10)
    FROM   SYS.ALL_OBJECTS
    WHERE  owner = '$schemaName'
           and UPPER(OBJECT_TYPE) = 'FUNCTION'
@@ -203,7 +205,7 @@ UNION ALL
    -- packages
    --
    
SELECT 'DROP PACKAGE ' || owner || '.' || OBJECT_NAME || ';' || chr(10)
    SELECT 'F_PACKAGE', OBJECT_NAME, 'DROP PACKAGE ' || owner || '.' || OBJECT_NAME || ';' || chr(10)
    FROM   SYS.ALL_OBJECTS
    WHERE  owner = '$schemaName'
           and UPPER(OBJECT_TYPE) = 'PACKAGE'
@@ -215,7 +217,7 @@ UNION ALL
    -- sequences
    --
    
SELECT 'DROP SEQUENCE ' || sequence_owner || '.' || sequence_name || ';' || chr(10)
    SELECT 'G_SEQUENCE', sequence_name, 'DROP SEQUENCE ' || sequence_owner || '.' || sequence_name || ';' || chr(10)
    FROM all_sequences
    where sequence_owner = '$schemaName'
    
@@ -226,7 +228,7 @@ UNION ALL
    -- indexes : supprimés avec les constraints ci-dessous
    --
    
-- SELECT 'DROP INDEX ' || owner || '.' || index_name || ';' || chr(10)
    -- SELECT 'H_INDEX', index_name, 'DROP INDEX ' || owner || '.' || index_name || ';' || chr(10)
    -- FROM   all_indexes
    -- WHERE  owner = '$schemaName'
    --
@@ -238,13 +240,13 @@ UNION ALL
    --
    
    -- d'abord les FK
select 'ALTER TABLE ' || OWNER || '.' || table_name || ' drop CONSTRAINT ' || constraint_name || ';' || chr(10)
    select 'I_CONSTRAINT', constraint_name, 'ALTER TABLE ' || OWNER || '.' || table_name || ' drop CONSTRAINT ' || constraint_name || ';' || chr(10)
    from all_constraints
    where constraint_type = 'R'
          and owner = '$schemaName'
    union all
    -- ensuite les PK
select 'ALTER TABLE ' || OWNER || '.' || table_name || ' drop CONSTRAINT ' || constraint_name || ';' || chr(10)
    select 'J_CONSTRAINT', constraint_name, 'ALTER TABLE ' || OWNER || '.' || table_name || ' drop CONSTRAINT ' || constraint_name || ';' || chr(10)
    from all_constraints
    where constraint_type = 'P'
          and owner = '$schemaName'
@@ -256,7 +258,7 @@ UNION ALL
    -- tables
    --
    
SELECT 'DROP TABLE ' || owner || '.' || table_name || ' PURGE;' || chr(10)
    SELECT 'K_TABLE', table_name, 'DROP TABLE ' || owner || '.' || table_name || ' PURGE;' || chr(10)
    FROM   all_tables
    WHERE  owner = '$schemaName' and
           table_name not in (select mview_name from all_mviews) -- exclusion des tables liées à des vues matérialisées
@@ -266,6 +268,10 @@ WHERE owner = '$schemaName' and
    -- WHERE  owner = '$schemaName'
    -- and rownum = 1
    
)
SELECT SQL 
FROM TMP 
ORDER BY CATEG, NAME
EOS;
    }