10

DBMS_METADATA.GET_DDLスキーマ名を焼き付けずに、オブジェクトのDDLスクリプトを生成するにはどうすればよいですか?

DBMS_METADATA.GET_DDL

CREATE TABLE "MYSCHEMA"."MYTABLE"
(
  "COL1"  NUMBER(10,0)
)

SQL Developerはそれを行うことができ、DBMS_METADATAを使用してこの目標を達成し、DDLスクリプトを一般化すると思います。

SQL Developerの場合:

CREATE TABLE "MYTABLE"
(
  "COL1"  NUMBER(10,0)
)
4

3 に答える 3

22

私は最近、スキーマ名なしでddlを取得できる次のことに遭遇しました。

Oracleのドキュメントには含まれていませんが、これまでに見た他のどの方法よりもはるかに単純に見えます。SQLDeveloperのステートメントログでそれを見つけました。SQLDeveloperはスキーマ名なしでddlを生成します。

DBMS_METADATA.SET_TRANSFORM_PARAM(dbms_metadata.SESSION_TRANSFORM, 'EMIT_SCHEMA', false);

DBMS_METADATA.GET_DDLを呼び出す前に、上記のEXECだけでハンドルや厄介なものを取得する必要はありません。

于 2015-07-30T13:48:54.970 に答える
8

REMAP_SCHEMAオプションを指定してSET_REMAP_PARAMを使用します。

DBMS_METADATA.SET_REMAP_PARAM(th,'REMAP_SCHEMA','HR',NULL);

これにより、HRスキーマがNULLにマップされます(ただし、ジョブハンドルが必要です)。完全な例については、metadata_apiのドキュメントを参照してください

于 2011-07-21T20:44:10.503 に答える
1

スキーマの削除に加えて(上記のDavid Norrisが提案したように)、ストレージやその他の属性を削除したい場合。基本的に、単純なDDLだけで、以下を使用します。

BEGIN
DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', TRUE);
DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', TRUE);
DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES', FALSE);
DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'STORAGE', FALSE);      
DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'EMIT_SCHEMA', FALSE);
END;
于 2020-05-04T21:10:08.720 に答える