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

前
次

複数のオブジェクトの取得

例21-1では、オブジェクトが1つしか存在しないことがわかっていたため、FETCH_CLOBプロシージャは1回のみコールされました。scottスキーマのすべての表などの複数のオブジェクトも取得できます。それを行うには、次の構成メンバーを使用する必要があります。

  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;
  END LOOP;

例21-3に、構成メンバーの使用および複数のオブジェクトの取得を示します。この例では、ユーザーscottとして接続します。パスワードは、tigerです。

例21-3 複数のオブジェクトの取得

  1. 次のように、my_metadataという名前の表と、get_tables_mdという名前のプロシージャを作成します。すべてのオブジェクトを返すことはできないため、それらを表に格納して最後に問合せを実行します。

    DROP TABLE my_metadata;
    CREATE TABLE my_metadata (md clob);
    CREATE OR REPLACE PROCEDURE get_tables_md 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('TABLE');
    
     -- Use filters to specify the schema.
     DBMS_METADATA.SET_FILTER(h,'SCHEMA','SCOTT');
    
     -- Request that the metadata be transformed into creation DDL.
     th := DBMS_METADATA.ADD_TRANSFORM(h,'DDL');
    
     -- 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 a table.
       INSERT INTO my_metadata(md) VALUES (doc);
       COMMIT;
     END LOOP;
     
     -- Release resources.
     DBMS_METADATA.CLOSE(h);
    END;
    /
    
  2. 次のようにプロシージャを実行します。

    EXECUTE get_tables_md;
    
  3. my_metadata表を問い合せて、取得された内容を確認します。

    SET LONG 9000000
    SET PAGES 0
    SELECT * FROM my_metadata;