すべてのプロダクト
Search
ドキュメントセンター

PolarDB:DBMS_METDATA

最終更新日:May 31, 2024

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 &quot; デフォルト&quot; +
)
(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/USER
    型のスキーマを指定する必要はありません
  • Oracleのトリガーなど、一部のオブジェクトタイプのスキーマを指定できます。 ただし、トリガーが指定されたスキーマに属していないため、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ステートメントを取得できるオブジェクトの種類を示します。

オブジェクト型

スキーマを指定できるかどうか

インデックス

サポート対象

表示

サポート対象

マテリアライズドビュー

サポート対象

関数

サポート対象

ストアドプロシージャ

サポート対象

トリガー

サポートされていません

制約条件

サポート対象

テーブル

サポート対象

テーブルスペース

サポートされていません

ロール

サポートされていません

ユーザー

サポートされていません。 このオブジェクトタイプはロールに似ています。

例外

PolarDBDBMS_METADATA.GET_DDL関数は、次の一般的なタイプの例外を返す場合があります。

  • 無効なオブジェクト型、空のオブジェクト型、空のオブジェクト名などのエラーが発生した場合、パラメーターが異常であることを示すコード31600の例外がスローされます。

  • オブジェクトが存在しない場合、コード31603を持つ例外がスローされます。