GET_DDL関数は、単一オブジェクトのメタデータをDDLとして返すために使用されます。この関数は、TABLE、VIEW、INDEX、PROCEDURE、SEQUENCE、TRIGGER、SYNONYM、FUNCTION、PACKAGEなどのデータベースオブジェクトのDDL(Data Definition Language)ステートメントを抽出するために使用されます。
GET_xxx関数は、1回の呼び出しでオブジェクトのメタデータを取得するために使用されます。現在、OceanBaseデータベースのバージョンでは、GET_DDLのみがサポートされています。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
構文
FUNCTION GET_DDL (
object_type VARCHAR,
name VARCHAR,
ob_schema VARCHAR DEFAULT NULL,
version VARCHAR DEFAULT 'COMPATIBLE',
model VARCHAR DEFAULT 'ORACLE',
transform VARCHAR DEFAULT 'DDL')
RETURN CLOB;
パラメータの説明
| パラメータ | 説明 |
|---|---|
| object_type | 検索する対象のタイプ。オブジェクトタイプのプロパティは、ネームドオブジェクトでなければなりません。現在サポートされているオブジェクトタイプには、TABLE、VIEW、MATERIALIZED_VIEW、INDEX、PROCEDURE、SEQUENCE、TRIGGER、SYNONYM、FUNCTION、PACKAGE が含まれます。 |
| name | オブジェクトの名前。 |
| ob_schema | このオブジェクトを含むスキーマ。デフォルトでは呼び出し元のスキーマです。 |
| version | オブジェクトのメタデータバージョン。 |
| model | メタデータのオブジェクトモデル。 |
| transform | XSL-T変換を適用して出力結果を変換します。 |
例
シンプルな例
以下の例は、さまざまなオブジェクトタイプに対するSQLステートメントであり、GET_DDL を使用して対応するDDLを取得する方法を示しています。注意してください。これらの例のオブジェクト名(例えば 'MY_TABLE_NAME')は、実際のデータベースに存在するオブジェクト名に置き換える必要があります。
テーブル(TABLE)のDDLステートメントを抽出します:
SELECT DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE_NAME') FROM DUAL;ビュー(VIEW)のDDLステートメントを抽出します:
SELECT DBMS_METADATA.GET_DDL('VIEW', 'MY_VIEW_NAME') FROM DUAL;マテリアライズドビュー(MATERIALIZED VIEW)のDDLステートメントを抽出します:
SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW', 'MY_MATERIALIZED_VIEW_NAME') FROM DUAL;インデックス(INDEX)のDDLステートメントを抽出します:
SELECT DBMS_METADATA.GET_DDL('INDEX', 'MY_INDEX_NAME') FROM DUAL;ストアドプロシージャ(PROCEDURE)のDDLステートメントを抽出します:
SELECT DBMS_METADATA.GET_DDL('PROCEDURE', 'MY_PROCEDURE_NAME') FROM DUAL;シーケンス(SEQUENCE)のDDLステートメントを抽出します:
SELECT DBMS_METADATA.GET_DDL('SEQUENCE', 'MY_SEQUENCE_NAME') FROM DUAL;トリガー(TRIGGER)のDDLステートメントを抽出します:
SELECT DBMS_METADATA.GET_DDL('TRIGGER', 'MY_TRIGGER_NAME') FROM DUAL;同義語(SYNONYM)のDDLステートメントを抽出します:
SELECT DBMS_METADATA.GET_DDL('SYNONYM', 'MY_SYNONYM_NAME') FROM DUAL;関数(FUNCTION)のDDLステートメントを抽出します:
SELECT DBMS_METADATA.GET_DDL('FUNCTION', 'MY_FUNCTION_NAME') FROM DUAL;パッケージ(PACKAGE)のDDLステートメントを抽出します:
SELECT DBMS_METADATA.GET_DDL('PACKAGE', 'MY_PACKAGE_NAME') FROM DUAL;
完全な例
GET_DDLを使用する方法を説明するために、2つの完全な例を示します。
- 例1:tEstという名前の関数を作成し、整数tEst、文字列"nAMe"、および浮動小数点数ageという3つのパラメータを受け取ります。関数の戻り値の型は浮動小数点数です。
create function tEst(tEst int, "nAMe" varchar2, age float)
return float
as
begin
return age;
end;
/
-- サーバー出力を設定し、コンソールにメッセージを出力できるようにします。
set serveroutput on;
-- `DBMS_METADATA.GET_DDL`関数を呼び出して、'TEST'という名前の関数のDDLステートメントを取得します。
call dbms_output.put_line(dbms_metadata.get_ddl('FUNCTION','TEST'));
DBMS_METADATA.GET_DDLは、オブジェクトを作成するDDLステートメントを返します。
実行結果は次のとおりです:
CREATE OR REPLACE PROCEDURE "SYS"."TEST"
(
"TEST" IN int, "nAMe" IN varchar2, "AGE" IN float
) IS
begin
null;
end
- 例2:tEst1という名前のストアドプロシージャを作成し、整数tEst1、文字列"nAMe"、および浮動小数点数ageという3つのパラメータを受け取ります。
create procedure tEst1(tEst1 int, "nAMe" varchar2, age float)
as
begin
null;
end;
/
-- サーバー出力を設定し、SQLコマンドラインインターフェースでメッセージを出力できるようにします。
set serveroutput on;
-- DBMS_METADATA.GET_DDL関数を呼び出して、'TEST1'という名前のストアドプロシージャのDDLステートメントを取得します。
call dbms_output.put_line(dbms_metadata.get_ddl('PROCEDURE','TEST1'));
これは、プロセスTEST1を作成するDDLステートメントが返されます。
実行結果は次のとおりです:
CREATE OR REPLACE PROCEDURE "SYS"."TEST1"
(
"TEST1" IN int, "nAMe" IN varchar2, "AGE" IN float
) IS
begin
null;
end