返されるオブジェクトに対して、より詳細な制御を行うには、SET_FILTER
プロシージャを使用して特定のメンバー型にのみフィルタを適用するよう指定します。これを行うには、SET_FILTER
の4つ目のパラメータとして、メンバー型のパス名を指定します。また、EXCLUDE_PATH_EXPR
フィルタを使用して、オブジェクト型のすべてのオブジェクトを除外できます。有効なパス名のリストは、TABLE_EXPORT_OBJECTS
カタログ・ビューを参照してください。
例21-9に、返されるオブジェクトに対して、より詳細な制御を指定するためのSET_FILTER
の使用方法を示します。ユーザーscott
として接続します。パスワードは、tiger
です。
例21-9 異種オブジェクト型の返りのフィルタ
取得したオブジェクトを格納するための表my_metadata
を作成します。さらに、プロシージャget_schema_md2
を作成します。
DROP TABLE my_metadata; CREATE TABLE my_metadata (md CLOB); CREATE OR REPLACE PROCEDURE get_schema_md2 IS -- Define local variables. h NUMBER; -- handle returned by 'OPEN' th NUMBER; -- handle returned by 'ADD_TRANSFORM' doc CLOB; -- metadata is returned in a CLOB BEGIN -- Specify the object type. h := DBMS_METADATA.OPEN('SCHEMA_EXPORT'); -- Use filters to specify the schema. DBMS_METADATA.SET_FILTER(h,'SCHEMA','SCOTT'); -- Use the fourth parameter to SET_FILTER to specify a filter -- that applies to a specific member object type. DBMS_METADATA.SET_FILTER(h,'NAME_EXPR','!=''MY_METADATA''','TABLE'); -- Use the EXCLUDE_PATH_EXPR filter to exclude procedures. DBMS_METADATA.SET_FILTER(h,'EXCLUDE_PATH_EXPR','=''PROCEDURE'''); -- Request that the metadata be transformed into creation DDL. th := DBMS_METADATA.ADD_TRANSFORM(h,'DDL'); -- Use the fourth parameter to SET_TRANSFORM_PARAM to specify a parameter -- that applies to a specific member object type. DBMS_METADATA.SET_TRANSFORM_PARAM(th,'SEGMENT_ATTRIBUTES',false,'TABLE'); -- Fetch the objects. LOOP doc := dbms_metadata.fetch_clob(h); -- When there are no more objects to be retrieved, FETCH_CLOB returns NULL. EXIT WHEN doc IS NULL; -- Store the metadata in the table. INSERT INTO my_metadata(md) VALUES (doc); COMMIT; END LOOP; -- Release resources. DBMS_METADATA.CLOSE(h); END; /
次のようにプロシージャを実行します。
EXECUTE get_schema_md2;
次の問合せを実行して、取得された内容を確認します。
SET LONG 9000000 SET PAGESIZE 0 SELECT * FROM my_metadata;