0
exec dbms_metadata.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'CONSTRAINTS_AS_ALTER', TRUE);

SELECT DBMS_METADATA.GET_DDL(object_type, object_name, owner) FROM all_OBJECTS WHERE  
OWNER = 'USERNAME' AND OBJECT_TYPE = 'TABLE';

これらのコマンドを実行すると、残念ながら、各テーブルの後に変更ステートメントが表示されます。すべてのテーブルに対して DDL を生成してから、alter ステートメントを続けて制約を設定することをお勧めします。現在、参照されているテーブルがまだ作成されていないため、alter ステートメントが実行され、いくつかのテーブルで失敗します。

私はこのコマンドを見ました:

select dbms_metadata.get_ddl('CONSTRAINT',constraint_name) from user_constraints; 

しかし、それを使用するにはGET_DDL、制約をまったく生成しないように何らかの方法で指示する必要はありませんか?

テーブルを正しい順序で作成する方法はありますか?

ありがとう!

4

1 に答える 1

2

GET_DDL次を実行して、参照整合性制約を生成しないように指示できます。

exec dbms_metadata.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'REF_CONSTRAINTS', FALSE);

次に、制約 DDL を実行しますが、where constraint_type = 'R'. (すべての制約を個別に実行したくない場合は、外部キーの前に主キーを生成する必要があり、同じ依存関係の問題が発生します。)

変換パラメータ一覧はこちらをご覧ください。

于 2012-06-14T05:49:04.007 に答える