メタデータを取得する場合は、DBMS_METADATA
PL/SQL APIを使用します。次に、プログラム・インタフェースおよびブラウザ・インタフェースの例を示します。
関連項目:
例21-1では、DBMS_METADATA
プログラム・インタフェースを使用して1つの表のメタデータを取得する基本的な方法を説明します。この例では、get_table_md
というファンクションを作成するDBMS_METADATA
プログラムを作成します。ファンクションは、1つの表のメタデータを返します。
例21-2に示すとおり、ブラウザ・インタフェースを使用しても同じ結果を得られます。
例21-1 データ取得のためのDBMS_METADATAプログラム・インタフェースの使用
hr
スキーマ内の1つの表(timecards
)のメタデータを返すファンクションget_table_md
を作成するDBMS_METADATA
プログラムを作成します。プログラムの内容は次のようになります。(この例ではプログラムにmetadata_program
.sql
という名前を付けます)。
CREATE OR REPLACE FUNCTION get_table_md RETURN CLOB IS -- Define local variables. h NUMBER; --handle returned by OPEN th NUMBER; -- handle returned by ADD_TRANSFORM doc CLOB; BEGIN -- Specify the object type. h := DBMS_METADATA.OPEN('TABLE'); -- Use filters to specify the particular object desired. DBMS_METADATA.SET_FILTER(h,'SCHEMA','HR'); DBMS_METADATA.SET_FILTER(h,'NAME','TIMECARDS'); -- Request that the metadata be transformed into creation DDL. th := DBMS_METADATA.ADD_TRANSFORM(h,'DDL'); -- Fetch the object. doc := DBMS_METADATA.FETCH_CLOB(h); -- Release resources. DBMS_METADATA.CLOSE(h); RETURN doc; END; /
ユーザーhr
として接続します。
プログラムを実行してget_table_md
ファンクションを作成します。
SQL> @metadata_program
新しく作成したget_table_md
ファンクションを選択操作で使用します。完全で中断のない出力を生成するには、問合せの実行前に、次のとおり、PAGESIZE
を0(ゼロ)にし、またLONG
を大きい数に設定します。
SQL> SET PAGESIZE 0 SQL> SET LONG 1000000 SQL> SELECT get_table_md FROM dual;
hr
スキーマのtimecards
表のメタデータを示す出力は、次のようになります。
CREATE TABLE "HR"."TIMECARDS" ( "EMPLOYEE_ID" NUMBER(6,0), "WEEK" NUMBER(2,0), "JOB_ID" VARCHAR2(10), "HOURS_WORKED" NUMBER(4,2), FOREIGN KEY ("EMPLOYEE_ID") REFERENCES "HR"."EMPLOYEES" ("EMPLOYEE_ID") ENABLE ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "EXAMPLE"
例21-2 データ取得のためのDBMS_METADATAブラウザ・インタフェースの使用
SQL> SET PAGESIZE 0 SQL> SET LONG 1000000 SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','TIMECARDS','HR') FROM dual;
結果は、例21-1の手順5と同様になります。