DBMS_METADATAパッケージは、オブジェクトのメタデータを取得し、オブジェクトを再作成するために使用されます。 メタデータは、XML形式で、またはデータ定義言語 (DDL) ステートメントとして返されます。
サブプログラム
サブプログラム | 説明 |
GET_DDL関数 | オブジェクトのメタデータをDDL文として取得します。 |
GET_DDL
この関数は、オブジェクトのメタデータをDDL文として取得するために使用されます。 この関数はDBMS_METADATAパッケージで定義されています。
構文
<bx id="1" type="code" text="code uuid=" ljbhdlxt4obhuqaojvd "code=" (
object_type VARCHAR2、VARCHAR2の名前、VARCHAR2 DEFAULT NULLのスキーマ、VARCHAR2 DEFAULT「互換性のある」バージョン、VARCHAR2 DEFAULT 'polardb' のモデル、VARCHAR2 DEFAULT 'ddl' で変換
) RETURN CLOB;"data-tag=" codeblock "outputclass=" language-sql "id=" 626e3f0316cdm ""/>FUNCTION get_ddl (
object_type VARCHAR2、
VARCHAR2の名前、
VARCHAR2 DEFAULT NULLのスキーマ、
VARCHAR2 DEFAULT「互換性のある」バージョン、
VARCHAR2 DEFAULT 'polardb' のモデル、
VARCHAR2 DEFAULT 'ddl' で変換
) リターンクラブ パラメーター
パラメーター | 説明 |
object_type | オブジェクトの型。 サポートされる型の詳細については、このトピックのサポートされる型セクションを参照してください。 |
name | オブジェクトの名前。 |
スキーマ | (オプション)オブジェクトのスキーマ。 |
バージョン | (オプション) オブジェクトメタデータのバージョン。 このパラメーターは、バージョンがPolarDBのOracleのバージョンと互換性がある場合にのみ有効です。 |
モデル | (オプション) メタデータの種類。 このパラメーターは、メタデータ型がPolarDBのOracleのメタデータ型と互換性がある場合にのみ有効です。 |
変換 | (オプション) オブジェクトを変更するために使用します。 このパラメーターは、変換がPolarDBのOracleの変換と互換性がある場合にのみ有効です。 |
例
次の例は、DBMS_METADATA.GET_DDL関数を使用して、テーブルのメタデータをDDLステートメントとして取得する方法を示しています。
パブリックモードでtという名前のテーブルを作成し、DBMS_METADATA.GET_DDL関数を使用して、テーブルのメタデータをDDLステートメントとして取得できます。 この場合、object_typeパラメーターはtable、nameパラメーターはt、schemaパラメーターはpublicに設定されます。
<bx id="1" type="code" text="code uuid=" ljbhdlxviuycdqzzk4m "code=" CREATE TABLE t(a int, b text);
SELECT DBMS_METADATA.GET_DDL('table' 、't' 、'public');
get_ddl
---------------------------------------
public.tが存在しない場合はテーブルを作成します (+
整数、+
bテキストCOLLATE " デフォルト" +
)
(1行) "data-tag=" codeblock "outputclass=" language-sql "id=" 626e8d22163fd ""/>CREATE TABLE t(a int, bテキスト);
SELECT DBMS_METADATA.GET_DDL('table' 、't' 、'public');
get_ddl
---------------------------------------
public.tが存在しない場合はテーブルを作成します (
整数、
bテキスト「デフォルト」COLLATE
)
(1行) DBMS_METADATA.GET_DDL関数を呼び出すときにmodelパラメーターを設定しないと、現在のモードでオブジェクトが検索されます。
使用上の注意
パラメーターの大文字と小文字の区別
object_typeパラメーターは大文字と小文字を区別しません。 たとえば、Table、TABLE、およびTableの値は同等です。
nameパラメーターは大文字と小文字を区別します。 たとえば、オブジェクト名がBIG_tの場合、big_tは入力できません。
schemaパラメーターは大文字と小文字を区別します。 たとえば、スキーマがパブリックの場合、publicを入力することはできません。
nameパラメーターとschemaパラメーターが大文字の場合、オブジェクト名とスキーマ名は二重引用符 ("") で囲まれ、取得したDDLステートメントで大文字と小文字を区別します。
例:
テーブル "BIG_t"("BIG_a" int、"BIG_b" テキスト) を作成します。# object_typeパラメーターは大文字と小文字を区別しません。たとえば、値テーブルとtableは同等です。
SELECT DBMS_METADATA.GET_DDL('table' 、'BIG_t' 、'public');
get_ddl
---------------------------------------------
CREATE TABLE IF NOT EXISTS public."BIG_t" (
"BIG_a" 整数、
"BIG_b" テキストCOLLATE "デフォルト"
)
(1行)
SELECT DBMS_METADATA.GET_DDL('TABLE' 、'BIG_t' 、'public');
get_ddl
---------------------------------------------
CREATE TABLE IF NOT EXISTS public."BIG_t" (
"BIG_a" 整数、
"BIG_b" テキストCOLLATE "デフォルト"
)
(1行)
# 名前とスキーマパラメーターは大文字と小文字を区別します。 正しいオブジェクト名とスキーマ名を入力する必要があります。
SELECT DBMS_METADATA.GET_DDL('table' 、'big_t' 、'public');
エラー: Polar-31603: スキーマ "public" に "table" 型のオブジェクト "big_t" が見つかりません
SELECT DBMS_METADATA.GET_DDL('table', 'BIG_t', 'PUBLIC');
エラー: Polar-31603: タイプ "table" のオブジェクト "BIG_t" がスキーマ "PUBLIC" に見つかりませんサポートされていないスキーマの
一部のオブジェクトタイプでは、指定したスキーマに属していない場合、スキーマを指定できません。 たとえば、ロールの種類にスキーマを指定すると、-31600例外がスローされます。
型のスキーマを指定する必要はありませんロールrole1を作成します。dbms_metadata.get_ddl('role', 'role1') を選択します。 get_ddl ------------------------------------------- ROLE role1を作成する NOSUPERUSER NOCREATEDB NOCREATEROLE ノロジーNOREPLICATION NOBYPASSRLSの継承 CONNECTION LIMIT -1パスワードNULL (1行) dbms_metadata.get_ddl('role', 'role1', 'public') を選択します。エラー: Polar-31600: 関数get_ddlのパラメータSCHEMAの無効な入力値 "public" 詳細: ROLE/USEROracleのトリガーなど、一部のオブジェクトタイプのスキーマを指定できます。 ただし、トリガーが指定されたスキーマに属していないため、PolarDBでトリガーのスキーマを指定することはできません。 Oracleとの互換性を維持するために、オブジェクト型にスキーマを指定してもシステムはエラーを報告しません。 システムは、スキーマが無視されたことを示す警告のみを報告し、結果を返し続けます。
create trigger trigger1 after insert on public.t各行の実行プロシージャprint_insert(); dbms_metadata.get_ddl('trigger', 'trigger1', 'public') を選択します。警告: トリガーのスキーマを指定する必要はありません。無視します。 get_ddl ----------------------------------------------------------------------------------------------------------------------------------- public.t各行のinsertプロシージャprint_insert() の後にトリガーtrigger1を作成します (1行)
サポートされているオブジェクトタイプ
次の表に、DDLステートメントを取得できるオブジェクトの種類を示します。
オブジェクト型 | スキーマを指定できるかどうか |
インデックス | サポート対象 |
表示 | サポート対象 |
マテリアライズドビュー | サポート対象 |
関数 | サポート対象 |
ストアドプロシージャ | サポート対象 |
トリガー | サポートされていません |
制約条件 | サポート対象 |
テーブル | サポート対象 |
テーブルスペース | サポートされていません |
ロール | サポートされていません |
ユーザー | サポートされていません。 このオブジェクトタイプはロールに似ています。 |
例外
PolarDBのDBMS_METADATA.GET_DDL関数は、次の一般的なタイプの例外を返す場合があります。
無効なオブジェクト型、空のオブジェクト型、空のオブジェクト名などのエラーが発生した場合、パラメーターが異常であることを示すコード31600の例外がスローされます。
オブジェクトが存在しない場合、コード31603を持つ例外がスローされます。