के साथ डीडीएल स्क्रिप्ट के रूप में कैसे प्राप्त करूं, मुझे डीबीएमएस_एमटीएडीएटीएए के साथ दिए गए स्कीमा के लिए डीडीएल निकालने में परेशानी हो रही है, शायद इसलिए कि मेरी समझ गलत है।मैं ओबीकल स्कीमा को डीबीएमएस_एमटीएडीएटीए (और SCHEMA_EXPORT)
set termout off
create table copy_dml_schema(c clob, i number);
declare
m number;
t number;
e number;
c clob;
i number := 0;
begin
e := dbms_metadata.session_transform;
dbms_metadata.set_transform_param (e, 'REF_CONSTRAINTS' , false );
dbms_metadata.set_transform_param (e, 'CONSTRAINTS_AS_ALTER', true );
dbms_metadata.set_transform_param (e, 'CONSTRAINTS' , true );
dbms_metadata.set_transform_param (e, 'FORCE' , true );
m := dbms_metadata.open('SCHEMA_EXPORT');
t := dbms_metadata.add_transform (m, 'DDL' );
dbms_metadata.set_transform_param (t, 'PRETTY' , true );
dbms_metadata.set_transform_param (t, 'SQLTERMINATOR' , true );
dbms_metadata.set_filter (m, 'SCHEMA' , 'XYZ');
dbms_metadata.set_filter (m, 'EXCLUDE_PATH_EXPR' , 'in (' ||
'''GRANT'' ,' ||
'''SYNONYM'' ,' ||
'''STATISTICS'' ,' ||
'''COMMENT'' ' ||
')');
loop
c := dbms_metadata.fetch_clob(m);
exit when c is null;
insert into copy_dml_schema values (c, i);
i := i+1;
end loop;
dbms_metadata.close(m);
end;
/
commit;
set pages 0
set trimspool on
set long 1000000
set lines 300
set longchunksize 300
spool c:\temp\the_schema.sql
select
c
from
copy_dml_schema
order
by i;
spool off
drop table copy_dml_schema;
set termout on
मैं यह धारणा थी कि इस विधि में इस तरह के आदेश है कि वे बनाया जा सकता है में "टेबल बनाएं" बयान वापस होगा, कि है, निर्भर टेबल उत्सर्जित किया जाएगा:
यहाँ क्या मैं मूल रूप से करते हैं बाद में।
हालांकि, यह पता चला है कि तालिकाओं का क्रम मनमाने ढंग से है कि कुछ तालिकाओं को एक विदेशी कुंजी बाधा के साथ उत्सर्जित किया जाता है जो उत्सर्जित नहीं होने वाली तालिका को संदर्भित करता है।
इस समस्या को हल करने के लिए, मैंने REF_CONSTRAINT
और CONSTRAINTS_AS_ALTER
क्रमशः झूठी और सत्य के लिए सेट किया है, क्योंकि मुझे लगता है कि इससे मेरी समस्या दूर हो जाएगी। जो मामला नहीं है।
तो, क्या मेरी समस्या के आसपास कोई काम है, या क्या ऐसी सेटिंग है जिसे मैंने अनदेखा किया है?
अच्छा सवाल। उत्तर के लिए तत्पर हैं। – Rene