Commit a2ae4d9d authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Génération du script SQL de clonage de schéma: correction de la requête SQL...

Génération du script SQL de clonage de schéma: correction de la requête SQL car impossible de mettre des order by au milieu d'un UNION.
parent d3d47df9
Loading
Loading
Loading
Loading
Loading
+147 −152
Original line number Diff line number Diff line
@@ -295,15 +295,28 @@ EOS;
    {
        $schemaName = $this->extractSchemaNameFromConnection($connection);

        $refConstraintsSql = NULL;
        if ($refConstraintsIncluded) {
            $refConstraintsSql = $this->generateSQLForRefConstraintsCreation($connection);
            $refConstraintsSql = <<<EOS
    UNION ALL


$refConstraintsSql
EOS;
        }

        $sql = <<<EOS
        
SELECT sql from (
    
    --
    -- sequences
    --
    
SELECT DBMS_METADATA.GET_DDL ('SEQUENCE', sequence_name, sequence_owner) as sql
    SELECT 'A_'||sequence_name as ord, DBMS_METADATA.get_ddl ('SEQUENCE', sequence_name, sequence_owner) as sql
    FROM all_sequences
    where sequence_owner = '$schemaName'
order by sequence_name
    
    UNION ALL
    
@@ -312,11 +325,10 @@ UNION ALL
    -- tables
    --
    
SELECT DBMS_METADATA.get_ddl ('TABLE', table_name, owner) as sql
    SELECT 'B_'||table_name as ord, DBMS_METADATA.get_ddl ('TABLE', table_name, owner) as sql
    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
order by table_name
    
    UNION ALL
    
@@ -325,13 +337,12 @@ UNION ALL
    -- constraints : unique
    --
    
SELECT DBMS_METADATA.get_ddl ('CONSTRAINT', constraint_name, owner) as sql
    SELECT 'C_'||constraint_name as ord, DBMS_METADATA.get_ddl ('CONSTRAINT', constraint_name, owner) as sql
    from user_constraints
    WHERE constraint_type in ('U') and -- unique type
          index_name is null and -- écarte les contraintes liées automatiquement à un index car créées avec la table
          table_name not in (select mview_name from all_mviews) -- exclusion des tables liées à des vues matérialisées
          and owner = '$schemaName'
order by constraint_name
    
    UNION ALL
    
@@ -340,11 +351,10 @@ UNION ALL
    -- indexes
    --
    
SELECT DBMS_METADATA.get_ddl ('INDEX', index_name, owner) as sql
    SELECT 'D_'||index_name as ord, DBMS_METADATA.get_ddl ('INDEX', index_name, owner) as sql
    FROM   all_indexes i
    WHERE  not exists (select * from user_constraints where index_name = i.index_name) -- écarte les index créés automatiquement car liés à une contrainte 
      and owner = '$schemaName'
order by index_name
    
    --   select * from all_indexes WHERE  owner = '$schemaName';
    
@@ -355,10 +365,9 @@ UNION ALL
    -- views
    --
    
SELECT DBMS_METADATA.get_ddl ('VIEW', view_name, owner) as sql
    SELECT 'E_'||view_name as ord, DBMS_METADATA.get_ddl ('VIEW', view_name, owner) as sql
    FROM   all_views
    WHERE  owner      = '$schemaName'
order by view_name
    
    UNION ALL
    
@@ -367,11 +376,10 @@ UNION ALL
    -- packages specs
    --
    
SELECT DBMS_METADATA.get_ddl ('PACKAGE_SPEC', OBJECT_NAME, owner) as sql
    SELECT 'F_'||OBJECT_NAME as ord, DBMS_METADATA.get_ddl ('PACKAGE_SPEC', OBJECT_NAME, owner) as sql
    FROM   SYS.ALL_OBJECTS
    WHERE  owner = '$schemaName'
           and UPPER(OBJECT_TYPE) = 'PACKAGE'
order by OBJECT_NAME
    
    UNION ALL
    
@@ -380,17 +388,15 @@ UNION ALL
    -- procedures and functions
    --
    
SELECT DBMS_METADATA.get_ddl ('PROCEDURE', OBJECT_NAME, owner) as sql
    SELECT 'G_'||OBJECT_NAME as ord, DBMS_METADATA.get_ddl ('PROCEDURE', OBJECT_NAME, owner) as sql
    FROM   SYS.ALL_OBJECTS
    WHERE  owner = '$schemaName'
           and UPPER(OBJECT_TYPE) = 'PROCEDURE'
order by OBJECT_NAME
    UNION ALL
SELECT DBMS_METADATA.get_ddl ('FUNCTION', OBJECT_NAME, owner) as sql
    SELECT 'G_'||OBJECT_NAME as ord, DBMS_METADATA.get_ddl ('FUNCTION', OBJECT_NAME, owner) as sql
    FROM   SYS.ALL_OBJECTS
    WHERE  owner = '$schemaName'
           and UPPER(OBJECT_TYPE) = 'FUNCTION'
order by OBJECT_NAME
    
    UNION ALL
    
@@ -399,11 +405,10 @@ UNION ALL
    -- packages
    --
    
SELECT DBMS_METADATA.get_ddl ('PACKAGE_BODY', OBJECT_NAME, owner) as sql
    SELECT 'H_'||OBJECT_NAME as ord, DBMS_METADATA.get_ddl ('PACKAGE_BODY', OBJECT_NAME, owner) as sql
    FROM   SYS.ALL_OBJECTS
    WHERE  owner = '$schemaName'
           and UPPER(OBJECT_TYPE) = 'PACKAGE BODY'
order by OBJECT_NAME
    
    UNION ALL
    
@@ -412,10 +417,9 @@ UNION ALL
    -- triggers
    --
    
SELECT DBMS_METADATA.get_ddl ('TRIGGER', trigger_NAME, owner) as sql
    SELECT 'I_'||trigger_NAME as ord, DBMS_METADATA.get_ddl ('TRIGGER', trigger_NAME, owner) as sql
    FROM   ALL_TRIGGERS
    WHERE  owner = '$schemaName'
order by trigger_NAME
    
    UNION ALL
    
@@ -424,22 +428,15 @@ UNION ALL
    -- materialized views
    --
    
SELECT DBMS_METADATA.get_ddl ('MATERIALIZED_VIEW', mview_name, owner) as sql
    SELECT 'J_'||mview_name as ord, DBMS_METADATA.get_ddl ('MATERIALIZED_VIEW', mview_name, owner) as sql
    FROM   all_mviews
    WHERE  owner      = '$schemaName'
order by mview_name

EOS;

        if ($refConstraintsIncluded) {
            $refConstraintsSql = $this->generateSQLForRefConstraintsCreation($connection);
            $sql .= <<<EOS
UNION ALL


$refConstraintsSql

)
ORDER BY ORD
EOS;
        }

        return $sql;
    }
@@ -457,17 +454,15 @@ EOS;
    -- reference constraints
    --
    
--select DBMS_METADATA.GET_DDL('CONSTRAINT', constraint_name, owner) as sql
    --select 'Z_'||mview_name as ord, DBMS_METADATA.get_ddl ('CONSTRAINT', constraint_name, owner) as sql
    --from all_constraints
    --where owner = '$schemaName'
    --      and constraint_type = 'P'
--order by constraint_name
    --union all
select DBMS_METADATA.GET_DDL('REF_CONSTRAINT', constraint_name, owner) as sql
    select 'Z_'||mview_name as ord, DBMS_METADATA.get_ddl ('REF_CONSTRAINT', constraint_name, owner) as sql
    from all_constraints
    where owner = '$schemaName'
          and constraint_type = 'R'
order by constraint_name

EOS;