DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'PRETTY', true); -- formatting the output with indentation and line feeds ?
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SQLTERMINATOR', true); -- appending a SQL terminator (; or /) to each DDL statement ?
DBMS_METADATA.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'CONSTRAINTS', true); -- including non-referential table constraints in the CREATE TABLE statement ?
DBMS_METADATA.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'REF_CONSTRAINTS', false); -- including referential constraints (foreign keys) in the CREATE TABLE statement ?
DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'FORCE', true); -- using the FORCE keyword in the CREATE VIEW statement ?
DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'TABLESPACE', false); -- including tablespace clauses in the DDL ?
DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES', false); -- including segment attributes clauses (physical attributes, storage attributes, tablespace, logging) in the DDL ?
DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'STORAGE', false); -- including storage clauses in the DDL ?
end;
EOS;
}
/**
* @param string $schemaName
* @return string
*/
functiongenerateSQLForSchemaCreation($schemaName)
{
return<<<EOS
--
-- sequences
--
SELECT DBMS_METADATA.GET_DDL ('SEQUENCE', sequence_name, sequence_owner) as sql
FROM all_sequences
where sequence_owner = '$schemaName'
UNION ALL
--
-- tables
--
SELECT 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
UNION ALL
--
-- constraints : unique
--
SELECT 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'
UNION ALL
--
-- indexes
--
SELECT 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'
-- select * from all_indexes WHERE owner = '$schemaName';
UNION ALL
--
-- packages
--
SELECT DBMS_METADATA.get_ddl ('PACKAGE_SPEC', OBJECT_NAME, owner) as sql
FROM SYS.ALL_OBJECTS
WHERE owner = '$schemaName'
and UPPER(OBJECT_TYPE) = 'PACKAGE'
UNION ALL
--
-- procedures and functions
--
SELECT DBMS_METADATA.get_ddl ('PROCEDURE', OBJECT_NAME, owner) as sql
FROM SYS.ALL_OBJECTS
WHERE owner = '$schemaName'
and UPPER(OBJECT_TYPE) = 'PROCEDURE'
UNION ALL
SELECT DBMS_METADATA.get_ddl ('FUNCTION', OBJECT_NAME, owner) as sql
FROM SYS.ALL_OBJECTS
WHERE owner = '$schemaName'
and UPPER(OBJECT_TYPE) = 'FUNCTION'
UNION ALL
--
-- packages
--
SELECT DBMS_METADATA.get_ddl ('PACKAGE_BODY', OBJECT_NAME, owner) as sql
FROM SYS.ALL_OBJECTS
WHERE owner = '$schemaName'
and UPPER(OBJECT_TYPE) = 'PACKAGE BODY'
UNION ALL
--
-- triggers
--
SELECT DBMS_METADATA.get_ddl ('TRIGGER', trigger_NAME, owner) as sql
FROM ALL_TRIGGERS
WHERE owner = '$schemaName'
UNION ALL
--
-- views
--
SELECT DBMS_METADATA.get_ddl ('VIEW', view_name, owner) as sql
FROM all_views
WHERE owner = '$schemaName'
UNION ALL
--
-- materialized views
--
SELECT DBMS_METADATA.get_ddl ('MATERIALIZED_VIEW', mview_name, owner) as sql
FROM all_mviews
WHERE owner = '$schemaName'
UNION ALL
--
-- data inserts
--
--
-- [...]
--
--
-- constraints
--
--select DBMS_METADATA.GET_DDL('CONSTRAINT', constraint_name, owner) as sql
--from all_constraints
--where owner = '$schemaName'
-- and constraint_type = 'P'
--union all
select DBMS_METADATA.GET_DDL('REF_CONSTRAINT', constraint_name, owner) as sql
DBMS_METADATA.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM,'CONSTRAINTS',true);-- including non-referential table constraints in the CREATE TABLE statement ?
DBMS_METADATA.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM,'REF_CONSTRAINTS',false);-- including referential constraints (foreign keys) in the CREATE TABLE statement ?
DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform,'FORCE',true);-- using the FORCE keyword in the CREATE VIEW statement ?
DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform,'TABLESPACE',false);-- including tablespace clauses in the DDL ?
DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform,'SEGMENT_ATTRIBUTES',false);-- including segment attributes clauses (physical attributes, storage attributes, tablespace, logging) in the DDL ?
DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform,'STORAGE',false);-- including storage clauses in the DDL ?