プライマリ・コンテンツに移動
Oracle® Databaseユーティリティ
12cリリース1 (12.1.0.2)
B71303-09
目次へ移動
目次
索引へ移動
索引

前
次

異種オブジェクト型の返りのフィルタ

返されるオブジェクトに対して、より詳細な制御を行うには、SET_FILTERプロシージャを使用して特定のメンバー型にのみフィルタを適用するよう指定します。これを行うには、SET_FILTERの4つ目のパラメータとして、メンバー型のパス名を指定します。また、EXCLUDE_PATH_EXPRフィルタを使用して、オブジェクト型のすべてのオブジェクトを除外できます。有効なパス名のリストは、TABLE_EXPORT_OBJECTSカタログ・ビューを参照してください。

例21-9に、返されるオブジェクトに対して、より詳細な制御を指定するためのSET_FILTERの使用方法を示します。ユーザーscottとして接続します。パスワードは、tigerです。

例21-9 異種オブジェクト型の返りのフィルタ

  1. 取得したオブジェクトを格納するための表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;
    /
    
  2. 次のようにプロシージャを実行します。

    EXECUTE get_schema_md2;
    
  3. 次の問合せを実行して、取得された内容を確認します。

    SET LONG 9000000
    SET PAGESIZE 0
    SELECT * FROM my_metadata;