DBMS_UTILITY パッケージは、以下のユーティリティプログラムをサポートしています。

関数/プロシージャ カテゴリー 戻り値の型 説明
ANALYZE_DATABASE(method [, estimate_rows [, estimate_percent [, method_opt ]]]) プロシージャ N/A データベーステーブルを分析します。
ANALYZE_PART_OBJECT(schema, object_name [, object_type [, command_type [, command_opt [, sample_clause ]]]]) プロシージャ N/A パーティションテーブルを分析します。
ANALYZE_SCHEMA(schema, method [, estimate_rows [, estimate_percent [, method_opt ]]]) プロシージャ N/A スキーマテーブルを分析します。
CANONICALIZE(name, canon_name OUT, canon_len) プロシージャ N/A スペース文字を削除するなどの方法を使用して、文字列を正規化します。
COMMA_TO_TABLE(list, tablen OUT, tab OUT) プロシージャ N/A 名前のコンマ区切りリストを名前のテーブルに変換します。
DB_VERSION(version OUT, compatibility OUT) プロシージャ N/A データベースのバージョンを取得します。
EXEC_DDL_STATEMENT(parse_string) プロシージャ N/A データ記述言語 (DDL) 文を実行します。
FORMAT_CALL_STACK 関数 TEXT 現在の呼び出し履歴をフォーマットします。
GET_CPU_TIME 関数 NUMBER 現在の CPU 時刻を取得します。
GET_DEPENDENCY(type, schema, name) プロシージャ N/A 指定されたオブジェクトに依存するオブジェクトを取得します。
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) プロシージャ N/A 指定された名前を構成要素に解析します。
TABLE_TO_COMMA(tab, tablen OUT, list OUT) プロシージャ N/A 名前のテーブルをカンマ区切りのリストに変換します。

Oracle 互換の PolarDB データベースでの DBMS_UTILITY の実装は、ネイティブ Oracle と比較すると部分的な実装です。 上表にリストされている関数とプロシージャのみがサポートされています。

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

パブリック変数 データ型 説明
inv_error_on_restrictions PLS_INTEGER 1 INVALIDATE プロシージャで使用されます。
lname_array TABLE - 長い名前をリストします。
uncl_array TABLE - ユーザーと名前をリストします。

LNAME_ARRAY

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

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

UNCL_ARRAY

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 ]]]])

パラメーター

  • 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 プロシージャは、入力文字列を管理する以下の機能をサポートしています。

  • 文字列が二重引用符で囲まれていない場合、文字列が有効な識別子の文字を使用しているかどうかを確認します。 そうでない場合は、エラーメッセージが返されます。 文字列が二重引用符で囲まれている場合には、すべての文字が許可されます。
  • 文字列が二重引用符で囲まれておらず、ピリオドが含まれていない場合は、すべてのアルファベット文字を大文字にし、先頭と末尾のスペースを削除します。
  • 文字列が二重引用符で囲まれ、ピリオドが含まれていない場合は、二重引用符を削除します。
  • 文字列にピリオドが含まれ、文字列の一部が二重引用符で囲まれていない場合は、文字列の各部分を大文字にし、各部分を二重引用符で囲みます。
  • 文字列にピリオドが含まれ、文字列の一部が二重引用符で囲まれている場合には、変更されていない二重引用符で囲まれた部分 (二重引用符を含む) が返され、大文字で二重引用符で囲まれていない部分が二重引用符で囲まれて返されます。
CANONICALIZE(name VARCHAR2, canon_name OUT VARCHAR2,
  canon_len BINARY_INTEGER)

パラメーター

パラメーター 説明
name 正規化される文字列。
canon_name 正規化された文字列。
canon_len 名前の最初の文字から始まる正規化されるバイト数。

以下のプロシージャでは、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;

EXEC canonicalize('Identifier')
Canonicalized name ==>IDENTIFIER<==
Length: 10

EXEC canonicalize('"Identifier"')
Canonicalized name ==>Identifier<==
Length: 10

EXEC canonicalize('"_+142%"')
Canonicalized name ==>_+142%<==
Length: 6

EXEC canonicalize('abc.def.ghi')
Canonicalized name ==>"ABC"." DEF"." GHI"<==
Length: 17

EXEC canonicalize('"abc.def.ghi"')
Canonicalized name ==>abc.def.ghi<==
Length: 11

EXEC canonicalize('"abc".def."ghi"')
Canonicalized name ==>"abc"." DEF"."ghi"<==
Length: 17

EXEC canonicalize('"abc.def".ghi')
Canonicalized name ==>"abc.def"." GHI"<==
Length: 15

COMMA_TO_TABLE

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

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

パラメーター

パラメーター 説明
list タブパラメーターからの名前のコンマ区切りリスト。
tablen 各ページのエントリ数。
tab リストされた名前を含むテーブル。
LNAME_ARRAY DBMS_UTILITY LNAME_ARRAY。 詳細については、「LNAME_ARRAY」をご参照ください。
UNCL_ARRAY DBMS_UTILITY UNCL_ARRAY。 詳細については、「UNCL_ARRAY」をご参照ください。

以下の例は、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;

EXEC comma_to_table('edb.dept, edb.emp, edb.jobhist')

edb.dept
edb.emp
edb.jobhist

DB_VERSION

DB_VERSION プロシージャを使用して、データベースのバージョン番号を返すことができます。

DB_VERSION(version OUT VARCHAR2, compatibility OUT VARCHAR2)

パラメーター

パラメーター 説明
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: EnterpriseDB 10.0.0 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48), 32-bit
Compatibility: EnterpriseDB 10.0.0 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 4.1.220080704 (Red Hat 4.1.2-48), 32-bit

EXEC_DDL_STATEMENT

EXEC_DDL_STATEMENT プロシージャを使用して、DDL コマンドを実行することができます。

EXEC_DDL_STATEMENT(parse_string VARCHAR2)

パラメーター

パラメーター 説明
parse_string 実行する DDL コマンド。

以下の無名ブロックは、ジョブテーブルを作成します。

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

parse_string に有効な DDL 文が含まれていない場合には、以下のエラーメッセージが返されます。

#  exec dbms_utility.exec_ddl_statement('select rownum from dual');
ERROR:  EDB-20001: 'parse_string' must be a valid DDL statement

この場合、Oracle 互換の PolarDB データベースの動作は、Oracle の動作とは異なります。 Oracle は無効な parse_string をサポートしており、エラーメッセージは返されません。

FORMAT_CALL_STACK

FORMAT_CALL_STACK 関数を使用して、現在の呼び出し履歴のフォーマットされた内容を返すことができます。

DBMS_UTILITY.FORMAT_CALL_STACKreturn VARCHAR2

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

GET_CPU_TIME

GET_CPU_TIME 関数を使用して、任意の時点から 100 分の 1 秒単位で CPU 時間を返すことができます。

パラメーター

パラメーター 説明
cputime CPU 時間の 100 分の 1 秒の数。

以下の SELECT コマンドは、現在の CPU 時間 (100 分の 603 秒、つまり 0.0603 秒) を取得します。

SELECT DBMS_UTILITY.GET_CPU_TIME FROM DUAL;

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

GET_DEPENDENCY

GET_DEPENDENCY プロシージャを使用して、指定したオブジェクトに依存するオブジェクトをリストすることができます。 このプロシージャでは、関数またはプロシージャの依存関係は示されていません。

GET_DEPENDENCY(type VARCHAR2, schema VARCHAR2,
  name VARCHAR2)

パラメーター

パラメーター 説明
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_VALUE

GET_HASH_VALUE 関数を使用して、指定した文字列のハッシュ値を計算することができます。

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

パラメーター

パラメーター 説明
name ハッシュ値が計算される文字列。
base ハッシュ値が生成される元の値。
hash_size 予想されるハッシュテーブルのハッシュ値の数。
hash 生成されるハッシュ値。

以下の無名ブロックは、emp テーブルの ename 列を使用してハッシュ値のテーブルを作成し、ハッシュ値とともにキーを表示します。 ハッシュ値は 100 から始まり、最大 1,024 個の異なる値を含みます。

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)

パラメーター

パラメーター 説明
parnam 値が返されるパラメーターの名前。 パラメーターは pg_settings システムビューにリストされます。
intval 整数パラメーターの値または strval パラメーターの長さ。
strval 文字列パラメーターの値。
status パラメーター値が INTEGER または BOOLEAN の場合には、0 を返します。 パラメーター値が文字列の場合は、1 を返します。

以下の無名ブロックは、2 つの初期化パラメーターの値を示しています。

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

max_fsm_pages: 72625
client_encoding: SQL_ASCII

GET_TIME

GET_TIME 関数を使用して、現在の時刻を 100 分の 1 秒単位で返すことができます。

パラメーター

パラメーター 説明
time プログラムが開始されてから経過した 100 分の 1 秒の数。

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

SELECT DBMS_UTILITY.GET_TIME FROM DUAL;

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

SELECT DBMS_UTILITY.GET_TIME FROM DUAL;

 get_time
----------
  1556037

NAME_TOKENIZE

NAME_TOKENIZE プロシージャを使用して、名前を解析してコンポーネント部分にすることができます。 二重引用符で囲まれていない名前は大文字になります。 二重引用符は、二重引用符のある名前から削除されます。

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

パラメーター

パラメーター 説明
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 に設定された 名前パラメーターをトークン化します。

BEGIN
    name_tokenize('emp');
END;

name   : emp
a      : EMP
b      :
c      :
dblink :
nextpos: 3

edb.list_emp に設定された名前パラメーターをトークン化します。

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

name   : edb.list_emp
a      : EDB
b      : LIST_EMP
c      :
dblink :
nextpos: 12

"edb" に設定された名前パラメーターをトークン化します。Emp_Admin".update_emp_sal。

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

name   : "edb"." Emp_Admin".update_emp_sal
a      : edb
b      : Emp_Admin
c      : UPDATE_EMP_SAL
dblink :
nextpos: 32

edb.emp@edb_dblink に設定された名前パラメーターをトークン化します。

BEGIN
    name_tokenize('edb.emp@edb_dblink');
END;

name   : edb.emp@edb_dblink
a      : EDB
b      : EMP
c      :
dblink : EDB_DBLINK
nextpos: 18

TABLE_TO_COMMA

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

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

パラメーター

パラメーター 説明
tab 名前を含むテーブル。
LNAME_ARRAY DBMS_UTILITY LNAME_ARRAY。 詳細については、「LNAME_ARRAY」をご参照ください。
UNCL_ARRAY DBMS_UTILITY UNCL_ARRAY。 詳細については、「UNCL_ARRAY」をご参照ください。
tablen リスト内のエントリの数。
list タブパラメーターで指定された名前のコンマ区切りリスト。

以下の例は、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;

EXEC table_to_comma('edb.dept, edb.emp, edb.jobhist')

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