すべてのプロダクト
Search
ドキュメントセンター

PolarDB:DBMS_UTILITY

最終更新日:Oct 08, 2024

このトピックでは、DBMS_UTILITYパッケージの使用方法について説明します。

DBMS_UTILITYパッケージには、次のストアドプロシージャと関数が含まれます。

関数またはストアドプロシージャ

カテゴリ

戻り値タイプ

説明

ANALYZE_DATABASE(method [, estimate_rows [, estimate_percent [, method_opt ]]])

ストアドプロシージャ

非該当

データベーステーブルを分析します。

ANALYZE_PART_OBJECT (スキーマ、object_name [, object_type [, command_type [, command_opt [, sample_clause ]]]])

ストアドプロシージャ

非該当

パーティションテーブルを分析します。

ANALYZE_SCHEMA(schema, method [, estimate_rows [, estimate_percent [, method_opt ]]])

ストアドプロシージャ

非該当

スキーマテーブルを分析します。

CANONICALIZE(name, canon_name OUT, canon_len)

ストアドプロシージャ

非該当

スペースを取り除くなどのメソッドを使用して文字列を正規化します。

COMMA_TO_TABLE (リスト、タブアウト、タブアウト)

ストアドプロシージャ

非該当

名前のコンマ区切りリストを名前のテーブルに変換します。

DB_VERSION (バージョンOUT、互換性OUT)

ストアドプロシージャ

非該当

データベースのバージョンを取得します。

EXEC_DDL_STATEMENT(parse_string)

ストアドプロシージャ

非該当

DDLステートメントを実行します。

FORMAT_CALL_STACK

機能

TEXT

現在の呼び出し履歴のフォーマットされた内容を返します。

FORMAT_ERROR_STACK

機能

TEXT

エラーがスローされたコールスタックのフォーマットされた内容を返します。

FORMAT_ERROR_バックトレース

機能

TEXT

エラーがスローされたコールスタックのフォーマットされた内容を返します。

GET_CPU_TIME

機能

NUMBER

現在の CPU 時刻を取得します。

GET_DEPENDENCY (型、スキーマ、名前)

ストアドプロシージャ

非該当

指定されたオブジェクトに依存するオブジェクトを取得します。

GET_HASH_VALUE(name、base、hash_size)

機能

NUMBER

ハッシュ値を計算します。

GET_PARAMETER_VALUE(parnam, intval OUT, strval OUT)

ストアドプロシージャ

BINARY_INTEGER

データベース初期化パラメーター設定を取得します。

GET_TIME

機能

NUMBER

現在の時間を返します。

NAME_TOKENIZE(name, a OUT, b OUT, c OUT, dblink OUT, nextpos OUT)

ストアドプロシージャ

非該当

指定した名前をコンポーネントに解析します。

TABLE_TO_COMMA (タブ、タブアウト、リストアウト)

ストアドプロシージャ

非該当

名前のテーブルをカンマ区切りのリストに変換します。

DBMS_UTILITYパッケージ内のすべての関数とストアドプロシージャをサポートするOracleデータベースとは異なり、PolarDB for PostgreSQL (Compatible with Oracle) クラスタは、上記の表にリストされている関数とストアドプロシージャのみをサポートします。

下表に、DBMS_UTILITY パッケージで使用可能なパブリック変数を示します。

パブリック変数

データ型

説明

inv_error_on_restrictions

PLS_INTEGER

1

INVALIDATEストアドプロシージャによって使用されます。

lname_array

テーブル

-

長い名前をリストします。

uncl_array

テーブル

-

ユーザーと名前をリストします。

変数

LNAME_ARRAY

LNAME_ARRAY 変数は、完全修飾名を含む長い名前のリストを格納するために使用されます。

TYPE lname_array IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;

UNCL_アレイ

UNCL_ARRAY 変数は、ユーザーと名前のリストを格納するために使用されます。

TYPE uncl_array IS TABLE OF VARCHAR2(227) INDEX BY BINARY_INTEGER;

使用量

ANALYZE_DATABASE、ANALYZE SCHEMA、およびANALYZE PART_OBJECT

ANALYZE_DATABASE() 、ANALYZE_SCHEMA() 、およびANALYZE_PART_OBJECT() ストアドプロシージャは、データベース内のテーブルに関する統計を収集するために使用されます。 ANALYZE 文を実行すると、Postgres はテーブルのデータをサンプリングし、pg_statistics システムテーブルに分布統計を記録します。

ANALYZE_DATABASE、ANALYZE_SCHEMA、および ANALYZE_PART_OBJECTは、処理されるテーブルの数が異なります。

  • ANALYZE_DATABASE は、現在のデータベース内のすべてのスキーマのすべてのテーブルを分析します。

  • ANALYZE_SCHEMA は、現在のデータベース内の指定されたスキーマのすべてのテーブルを分析します。

  • ANALYZE_PART_OBJECT は、単一のテーブルを分析します。

構文

ANALYZE コマンドの構文は以下のとおりです。

ANALYZE_DATABASE(method VARCHAR2 [, estimate_rows NUMBER
  [, estimate_percent NUMBER [, method_opt VARCHAR2 ]]])

ANALYZE_SCHEMA(schema VARCHAR2, method VARCHAR2
  [, estimate_rows NUMBER [, estimate_percent NUMBER
  [, method_opt VARCHAR2 ]]])

ANALYZE_PART_OBJECT(schema VARCHAR2, object_name VARCHAR2
  [, object_type CHAR [, command_type CHAR
  [, command_opt VARCHAR2 [, sample_clause ]]]])

Parameters

  • ANALYZE_DATABASE と ANALYZE_SCHEMA

    パラメーター

    説明

    method

    methodパラメーターは、ANALYZEストアドプロシージャがpg_statisticsテーブルに入力するか、pg_statisticsテーブルからエントリを削除するかを指定します。

    • DELETEのメソッドを指定した場合、ANALYZEストアドプロシージャはpg_statisticsから関連する行を削除します。

    • COMPUTEまたはESTIMATEのメソッドを指定した場合、ANALYZEストアドプロシージャは1つ以上のテーブルを分析し、分布情報をpg_statisticsに記録します。

      説明

      COMPUTEおよびESTIMATE法は同一です。 どちらの方法も Postgres ANALYZE 文を実行します。 他のすべてのパラメーターは検証され、その後無視されます。

    estimate_rows

    推定統計の基となる行の数。 ESTIMATE が指定されている場合は、estimate_rows または estimate_percent のいずれかを指定する必要があります。

    このパラメーターは無視されますが、互換性のために含まれています。

    estimate_percent

    推定統計の基となる行の割合。 ESTIMATE が指定されている場合は、estimate_rows または estimate_percent のいずれかを指定する必要があります。

    このパラメーターは無視されますが、互換性のために含まれています。

    method_opt

    分析するオブジェクト型。 以下の組み合わせがサポートされています。

    [ FOR TABLE ]
    [ FOR ALL [ INDEXED ] COLUMNS ] [ SIZE n ]
    [ FOR ALL INDEXES ]

    このパラメーターは無視されますが、互換性のために含まれています。

  • ANALYZE_PART_OBJECT

    パラメーター

    説明

    schema

    オブジェクトを分析するスキーマの名前。

    object_name

    分析するパーティション化されたオブジェクトの名前。

    object_type

    分析するオブジェクトのタイプ。 有効な値は、T (テーブル) および I (インデックス) です。

    このパラメーターは無視されますが、互換性のために含まれています。

    command_type

    実行する分析関数の型。 有効な値:

    • E:sample_clause 句の指定された行数または行の割合に基づいて推定統計を収集します。

    • C:正確な統計を計算します。

    • V:パーティションの構造と整合性を検証します。

    このパラメーターは無視されますが、互換性のために含まれています。

    command_opt

    command_type が C または E に設定されている場合は、以下の組み合わせがサポートされます。

    [ FOR TABLE ]
    [ FOR ALL COLUMNS ]
    [ FOR ALL LOCAL INDEXES ]

    command_type が V に設定され、object_type が T に設定されている場合は、CASCADE がサポートされます。

    このパラメーターは無視されますが、互換性のために含まれています。

    sample_clause

    command_type が E に設定されている場合は、推定された統計の基になる行の数または行の割合を指定する以下の句が含まれます。

    SAMPLE n { ROWS | PERCENT }

    このパラメーターは無視されますが、互換性のために含まれています。

無制限

CANONICALIZEストアドプロシージャは、入力文字列を管理するための次の機能をサポートします。

  • 文字列が二重引用符で囲まれていない場合は、文字列が有効な識別子の文字を使用していることを確認します。 そうでない場合、例外がスローされます。 文字列が二重引用符で囲まれている場合には、すべての文字が許可されます。

  • 文字列が二重引用符で囲まれておらず、ピリオドが含まれていない場合は、すべてのアルファベット文字を大文字にし、先頭と末尾のスペースを削除します。

  • 文字列が二重引用符で囲まれ、ピリオドが含まれていない場合は、二重引用符を取り除きます。

  • 文字列にピリオドが含まれ、文字列の一部が二重引用符で囲まれていない場合は、文字列の各部分を大文字にし、各部分を二重引用符で囲みます。

  • 文字列にピリオドが含まれ、文字列の一部が二重引用符で囲まれている場合には、変更されていない二重引用符で囲まれた部分 (二重引用符を含む) が返され、大文字で二重引用符で囲まれていない部分が二重引用符で囲まれて返されます。

構文

CANONICALIZE(name VARCHAR2, canon_name OUT VARCHAR2,
  canon_len BINARY_INTEGER)

Parameters

パラメーター

説明

name

正規化される文字列。

canon_name

正規化された文字列。

canon_len

名前の最初の文字から始まる正規化されるバイト数。

  1. CANONICALIZEストアドプロシージャを作成して、入力文字列を正規化します。

    CREATE OR REPLACE PROCEDURE canonicalize (
        p_name      VARCHAR2,
        p_length    BINARY_INTEGER DEFAULT 30
    )
    IS
        v_canon     VARCHAR2(100);
    BEGIN
        DBMS_UTILITY.CANONICALIZE(p_name,v_canon,p_length);
        DBMS_OUTPUT.PUT_LINE('Canonicalized name ==>' || v_canon || '<==');
        DBMS_OUTPUT.PUT_LINE('Length: ' || LENGTH(v_canon));
    EXCEPTION
        WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);
            DBMS_OUTPUT.PUT_LINE('SQLCODE: ' || SQLCODE);
    END;
  2. CANONICALIZEストアドプロシージャを実行します。

    EXEC canonicalize('"_+142%"');

    サンプル結果:

    Canonicalized name ==>_+142%<==
    Length: 6

COMMA_TO_TABLE

構文

COMMA_TO_TABLEストアドプロシージャは、名前のカンマ区切りリストを名前のテーブルに変換します。 リストの各エントリはテーブルエントリに変更されます。 名前は有効な識別子としてフォーマットする必要があります。

COMMA_TO_TABLE(list VARCHAR2, tablen OUT BINARY_INTEGER,
  tab OUT { LNAME_ARRAY | UNCL_ARRAY })

Parameters

パラメーター

説明

list

タブパラメーターからの名前のコンマ区切りリスト。

tablen

各ページのエントリ数。

タブ

リストされた名前を含むテーブル。

LNAME_ARRAY

DBMS_UTILITY LNAME_ARRAY。 詳細については、「LNAME_ARRAY」をご参照ください。

UNCL_ARRAY

DBMS_UTILITY UNCL_ARRAY。 詳細については、「UNCL_ARRAY」をご参照ください。

  1. COMMA_TO_TABLEストアドプロシージャを作成して、名前のカンマ区切りリストを名前のテーブルに変換します。

    CREATE OR REPLACE PROCEDURE comma_to_table (
        p_list      VARCHAR2
    )
    IS
        r_lname     DBMS_UTILITY.LNAME_ARRAY;
        v_length    BINARY_INTEGER;
    BEGIN
        DBMS_UTILITY.COMMA_TO_TABLE(p_list,v_length,r_lname);
        FOR i IN 1..v_length LOOP
            DBMS_OUTPUT.PUT_LINE(r_lname(i));
        END LOOP;
    END;
  2. COMMA_TO_TABLEストアドプロシージャを実行します。

    EXEC comma_to_table('polardb.dept, polardb.emp, polardb.jobhist');

    サンプル結果:

    polardb.dept
     polardb.emp
     polardb.jobhist

DB_バージョン

構文

DB_VERSIONストアドプロシージャは、データベースのバージョン番号を返します。

DB_VERSION(version OUT VARCHAR2, compatibility OUT VARCHAR2)

Parameters

パラメーター

説明

version

インスタンスのエンジンバージョン。

compatibility

データベースの互換性。 意味は実装によって定義されます。

次の匿名ブロックを実行して、データベースのバージョンを表示します。

DECLARE
    v_version       VARCHAR2(150);
    v_compat        VARCHAR2(150);
BEGIN
    DBMS_UTILITY.DB_VERSION(v_version,v_compat);
    DBMS_OUTPUT.PUT_LINE('Version: '       || v_version);
    DBMS_OUTPUT.PUT_LINE('Compatibility: ' || v_compat);
END;

サンプル結果:

Version: PostgreSQL 11.15 (POLARDB Database Compatible with Oracle 11.15.25)
Compatibility: PostgreSQL 11.15 (POLARDB Database Compatible with Oracle 11.15.25)

EXEC_DDL_ステートメント

構文

EXEC_DDL_STATEMENTストアドプロシージャは、DDLステートメントの実行に使用されます。

EXEC_DDL_STATEMENT(parse_string VARCHAR2)

Parameters

パラメーター

説明

parse_string

実行されるDDLステートメント。

次の匿名ブロックを実行してジョブを作成します。

BEGIN
    DBMS_UTILITY.EXEC_DDL_STATEMENT(
        'CREATE TABLE job (' ||
          'jobno NUMBER(3),' ||
          'jname VARCHAR2(9))'
    );
END;
説明

parse_stringに有効なDDLステートメントが含まれていない場合、PolarDB for PostgreSQL (Oracleと互換) クラスターで次のエラーメッセージが返されます。

EXEC dbms_utility.exec_ddl_statement('select rownum from dual');
ERROR:  'parse_string' must be a valid DDL statement

である必要があります

PolarDB for PostgreSQL (Compatible with Oracle) クラスタとは異なり、Oracleデータベースはエラーを生成せずに無効なparse_stringを受け入れます。

FORMAT_CALL_STACK

構文

FORMAT_CALL_STACK関数は、現在のコールスタックのフォーマットされた内容を返します。

DBMS_UTILITY.FORMAT_CALL_STACK return TEXT

この関数をストアドプロシージャ、関数、またはパッケージで使用して、現在の呼び出し履歴を読み取り可能な形式で返すことができます。

FORMAT_ERROR_バックトレース

構文

FORMAT_ERROR_BACKTRACE関数は、エラーがスローされたコールスタックのフォーマットされた内容を返します。

DBMS_UTILITY.FORMAT_ERROR_BACKTRACE return TEXT

この関数は、ストアドプロシージャ、関数、またはパッケージで使用して、読み取り可能な形式でエラーがスローされた呼び出しスタックを返すことができます。

FORMAT_ERROR_STACK

構文

FORMAT_ERROR_STACK関数は、エラーがスローされたコールスタックのフォーマットされた内容を返します。

DBMS_UTILITY.FORMAT_ERROR_STACK return TEXT

この関数は、ストアドプロシージャ、関数、またはパッケージで使用して、読み取り可能な形式でエラーがスローされた呼び出しスタックを返すことができます。

説明

PolarDB for PostgreSQL (Compatible with Oracle) クラスタは、Oracleデータベースとは異なるFORMAT_ERROR_STACK関数を使用します。 Oracleデータベースでは、FORMAT_ERROR_STACK関数から返される文字列にSQLCODEおよびSQLERRM情報が含まれています。 PolarDB for PostgreSQL (Compatible with Oracle) クラスターでは、FORMAT_ERROR_STACK関数はFORMAT_ERROR_BACKTRACE関数と同じように動作します。

GET_CPU_TIME

構文

GET_CPU_TIME関数は、任意の時点から100分の1秒単位でCPU時間を返します。

Parameters

パラメーター

説明

cputime

CPU 時間の 100 分の 1 秒の数。

次のステートメントを実行して、CPU時間を100分の1秒単位で取得します。

SELECT DBMS_UTILITY.GET_CPU_TIME FROM DUAL;

次の結果が返されます。これは、100分の6.03秒または0.0603秒です。

get_cpu_time
--------------
          603

GET_依存性

構文

GET_DEPENDENCYストアドプロシージャは、指定されたオブジェクトに依存するオブジェクトをリストするために使用されます。 GET_DEPENDENCYは、関数またはストアドプロシージャの依存関係を示しません。

GET_DEPENDENCY(type VARCHAR2, schema VARCHAR2,
  name VARCHAR2)

Parameters

パラメーター

説明

type

名前オブジェクトの型。 有効な値: INDEX、PACKAGE、PACKAGE BODY、SEQUENCE、TABLE、TRIGGER、TYPE、および VIEW。

schema

名前オブジェクトが存在するスキーマの名前。

name

依存関係を取得するオブジェクトの名前。

次の匿名ブロックを実行して、EMPテーブルの依存関係を取得します。

BEGIN
    DBMS_UTILITY.GET_DEPENDENCY('TABLE','public','EMP');
END;

サンプル結果:

DEPENDENCIES ON public.EMP
------------------------------------------------------------------
*TABLE public.EMP()
*   CONSTRAINT c public.emp()
*   CONSTRAINT f public.emp()
*   CONSTRAINT p public.emp()
*   TYPE public.emp()
*   CONSTRAINT c public.emp()
*   CONSTRAINT f public.jobhist()
*   VIEW .empname_view()

GET_HASH_値

構文

GET_HASH_VALUE関数はハッシュ値を計算します。

hash NUMBER GET_HASH_VALUE(name VARCHAR2, base NUMBER,
  hash_size NUMBER)

Parameters

パラメーター

説明

name

ハッシュ値が計算される文字列。

base

ハッシュ値が生成される元の値。

hash_size

ハッシュ値の最大数。

hash

ハッシュ値。

次の匿名ブロックを実行して、empテーブルのename列に基づいて100から始まる最大1024ハッシュ値を含むハッシュ値テーブルを作成します。

DECLARE
    v_hash          NUMBER;
    TYPE hash_tab IS TABLE OF NUMBER INDEX BY VARCHAR2(10);
    r_hash          HASH_TAB;
    CURSOR emp_cur IS SELECT ename FROM emp;
BEGIN
    FOR r_emp IN emp_cur LOOP
        r_hash(r_emp.ename) :=
            DBMS_UTILITY.GET_HASH_VALUE(r_emp.ename,100,1024);
    END LOOP;
    FOR r_emp IN emp_cur LOOP
        DBMS_OUTPUT.PUT_LINE(RPAD(r_emp.ename,10) || ' ' ||
            r_hash(r_emp.ename));
    END LOOP;
END;

サンプル結果:

SMITH      377
ALLEN      740
WARD       718
JONES      131
MARTIN     176
BLAKE      568
CLARK      621
SCOTT      1097
KING       235
TURNER     850
ADAMS      156
JAMES      942
FORD       775
MILLER     148

GET_PARAMETER_VALUE

構文

GET_PARAMETER_VALUEストアドプロシージャは、データベース初期化パラメータ設定を取得するために使用されます。

status BINARY_INTEGER GET_PARAMETER_VALUE(parnam VARCHAR2,
  intval OUT INTEGER, strval OUT VARCHAR2)

Parameters

パラメーター

説明

parnam

値が返されるパラメーターの名前。 パラメーターは pg_settings システムビューにリストされます。

intval

整数パラメーターの値または strval パラメーターの長さ。

strval

文字列パラメーターの値。

status

パラメーター値が INTEGER または BOOLEAN の場合には、0 を返します。 パラメーター値が文字列の場合は、1 を返します。

次の匿名ブロックを実行して、初期化パラメーターの値を表示します。

DECLARE
    v_intval        INTEGER;
    v_strval        VARCHAR2(80);
BEGIN
    DBMS_UTILITY.GET_PARAMETER_VALUE('client_encoding', v_intval, v_strval);
    DBMS_OUTPUT.PUT_LINE('client_encoding' || ': ' || v_strval);
END;

サンプル結果:

client_encoding: UTF8

GET_TIME

構文

GET_TIME関数は、現在の時間を100分の1秒で返すために使用されます。

Parameters

パラメーター

説明

time

プログラムが開始されてから経過した 100 分の 1 秒の数。

以下の例は、GET_TIME 関数の呼び出しを示しています。

SELECT DBMS_UTILITY.GET_TIME FROM DUAL;

サンプル結果:

 get_time
----------
  1555860

NAME_TOKENIZE

構文

NAME_TOKENIZEストアドプロシージャは、名前をそのコンポーネントに解析します。 二重引用符で囲まれていない名前は大文字になります。 二重引用符は、二重引用符の付いた名前から削除されます。

NAME_TOKENIZE(name VARCHAR2, a OUT VARCHAR2,   b OUT VARCHAR2,c OUT VARCHAR2, dblink OUT VARCHAR2,   nextpos OUT BINARY_INTEGER)

Parameters

パラメーター

説明

name

次の形式の名前を含む文字列。

a[.b[.c]][@dblink ]

a

左端のコンポーネントを返します。

b

コンポーネントが存在する場合は、2 番目のコンポーネントを返します。

c

コンポーネントが存在する場合は、3 番目のコンポーネントを返します。

dblink

データベースリンク名を返します。

nextpos

名前で解析された最後の文字の位置。

異なる名前をコンポーネントに解析するためのNAME_TOKENIZEストアドプロシージャを作成します。

CREATE OR REPLACE PROCEDURE name_tokenize (
    p_name          VARCHAR2
)
IS
    v_a             VARCHAR2(30);
    v_b             VARCHAR2(30);
    v_c             VARCHAR2(30);
    v_dblink        VARCHAR2(30);
    v_nextpos       BINARY_INTEGER;
BEGIN
    DBMS_UTILITY.NAME_TOKENIZE(p_name,v_a,v_b,v_c,v_dblink,v_nextpos);
    DBMS_OUTPUT.PUT_LINE('name   : ' || p_name);
    DBMS_OUTPUT.PUT_LINE('a      : ' || v_a);
    DBMS_OUTPUT.PUT_LINE('b      : ' || v_b);
    DBMS_OUTPUT.PUT_LINE('c      : ' || v_c);
    DBMS_OUTPUT.PUT_LINE('dblink : ' || v_dblink);
    DBMS_OUTPUT.PUT_LINE('nextpos: ' || v_nextpos);
END;
  • empに設定されているnameパラメーターをトークン化します。

    BEGIN
        name_tokenize('emp');
    END;

    サンプル結果:

    name   : emp
    a      : EMP
    b      :
    c      :
    dblink :
    nextpos: 3
  • edb.list_empに設定されているnameパラメーターをトークン化します。

    BEGIN
        name_tokenize('polardb.list_emp');
    END;

    サンプル結果:

    name   : polardb.list_emp
    a      : polardb
    b      : LIST_EMP
    c      :
    dblink :
    nextpos: 16
  • "polardb" に設定されているnameパラメーターをトークン化します。"Emp_Admin ".update_emp_sal:

    BEGIN
        name_tokenize('"polardb"."Emp_Admin".update_emp_sal');
    END;

    サンプル結果:

    name   : "polardb"."Emp_Admin".update_emp_sal
    a      : polardb
    b      : Emp_Admin
    c      : UPDATE_EMP_SAL
    dblink :
    nextpos: 36
  • polardb.emp @ polardb_dblinkに設定されているnameパラメーターをトークン化します。

    BEGIN
        name_tokenize('polardb.emp@polardb_dblink');
    END;

    サンプル結果:

    name   : polardb.emp@polardb_dblink
    a      : polardb
    b      : EMP
    c      :
    dblink : polardb_DBLINK
    nextpos: 26

TABLE_TO_COMMA

構文

TABLE_TO_COMMAストアドプロシージャは、名前のテーブルを名前のカンマ区切りリストに変換します。 各テーブルエントリはリストエントリに変更されます。 名前は有効な識別子としてフォーマットする必要があります。

TABLE_TO_COMMA(tab { LNAME_ARRAY | UNCL_ARRAY },
  tablen OUT BINARY_INTEGER, list OUT VARCHAR2)

Parameters

パラメーター

説明

tab

名前を含むテーブル。

LNAME_ARRAY

DBMS_UTILITY LNAME_ARRAY。 詳細については、「LNAME_ARRAY」をご参照ください。

UNCL_ARRAY

DBMS_UTILITY UNCL_ARRAY。 詳細については、「UNCL_ARRAY」をご参照ください。

tablen

リスト内のエントリの数。

list

タブパラメーターで指定された名前のコンマ区切りリスト。

  1. COMMA_TO_TABLEストアドプロシージャを作成してカンマ区切りリストをテーブルに変換し、テーブルをカンマ区切りリストに変換するTABLE_TO_COMMAストアドプロシージャを作成します。

    CREATE OR REPLACE PROCEDURE table_to_comma (
        p_list      VARCHAR2
    )
    IS
        r_lname     DBMS_UTILITY.LNAME_ARRAY;
        v_length    BINARY_INTEGER;
        v_listlen   BINARY_INTEGER;
        v_list      VARCHAR2(80);
    BEGIN
        DBMS_UTILITY.COMMA_TO_TABLE(p_list,v_length,r_lname);
        DBMS_OUTPUT.PUT_LINE('Table Entries');
        DBMS_OUTPUT.PUT_LINE('-------------');
        FOR i IN 1..v_length LOOP
            DBMS_OUTPUT.PUT_LINE(r_lname(i));
        END LOOP;
        DBMS_OUTPUT.PUT_LINE('-------------');
        DBMS_UTILITY.TABLE_TO_COMMA(r_lname,v_listlen,v_list);
        DBMS_OUTPUT.PUT_LINE('Comma-Delimited List: ' || v_list);
    END;
  2. COMMA_TO_TABLEストアドプロシージャを実行します。

    EXEC table_to_comma('polardb.dept, polardb.emp, polardb.jobhist');

    サンプル結果:

    Table Entries
    -------------
    polardb.dept
     polardb.emp
     polardb.jobhist
    -------------
    Comma-Delimited List: polardb.dept, polardb.emp, polardb.jobhist