プライマリ・コンテンツに移動

Oracle® Application Express APIリファレンス リリース5.1 E85937-02 |
| 目次 | 索引

前 | 次 |

# 5.42 MERGE_MEMBERSプロシージャ

このプロシージャを使用して、指定した名前付きコレクションのメンバーと、配列に渡された値をマージします。名前付きコレクションが存在しない場合は作成されます。p_init_queryが指定されると、コレクションは指定されたSQL問合せから作成されます。名前付きコレクションが存在すると、次のことが行われます。

1. コレクション内に存在し、配列内に存在しない行が削除されます。

2. コレクション内および配列内に存在する行が更新されます。

3. 配列内に存在し、コレクション内に存在しない行が挿入されます。

p_c001 PL/SQL表内の要素数は、すべてのPL/SQL表内のアイテムの合計数として使用されます。たとえば、p_c001.countが2で、p_c002.countが10の場合、2つのメンバーのみがマージされます。p_c001がnullの場合は、アプリケーション・エラーが発生します。

構文

    APEX_COLLECTION.MERGE_MEMBERS (
        p_collection_name IN VARCHAR2,
        p_seq  IN APEX_APPLICATION_GLOBAL.VC_ARR2 DEFAULT empty_vc_arr,
        p_c001 IN APEX_APPLICATION_GLOBAL.VC_ARR2 DEFAULT empty_vc_arr,
        p_c002 IN APEX_APPLICATION_GLOBAL.VC_ARR2 DEFAULT empty_vc_arr,
        p_c003 IN APEX_APPLICATION_GLOBAL.VC_ARR2 DEFAULT empty_vc_arr,
        ...
        p_c050 IN APEX_APPLICATION_GLOBAL.VC_ARR2 DEFAULT empty_vc_arr,
        p_null_index  IN NUMBER DEFAULT 1,
        p_null_value  IN VARCHAR2 DEFAULT null,
        p_init_query  IN VARCHAR2 DEFAULT null);

パラメータ

注意:

4,000文字を超える文字属性は、4,000文字に切り捨てられます。また、追加されるメンバーの数は、1番目の配列内の要素の数に基づきます。

表5-19 MERGE_MEMBERSプロシージャのパラメータ

パラメータ | 説明
--- | ---
`p_collection_name` | コレクションの名前。最大長は255バイトです。コレクション名は大/小文字が区別されず、大文字に変換されます。
`p_c001からp_c050` | マージする属性値の配列。最大長は4,000バイトです。4,000文字を超える文字属性は、4,000文字に切り捨てられます。p_c001配列のカウントは、すべての配列で使用されます。値が指定されないと、アクションは実行されません。
`p_c0xx` | マージするNN属性値の属性。最大長は4,000バイトです。これよりも大きいと、属性値は4,000バイトに切り捨てられます。
`p_seq` | マージするコレクションの順序番号を指定します。
`p_null_index` | この値で識別された要素がnullの場合、この行をnull行とみなします。たとえば、p_null_indexが3である場合、p_c003はnull行とみなされます。つまり、mergeファンクションは、この行を無視するように指示されます。これによって、null行がコレクションから削除されます。null索引は、null値とともに動作します。`p_cXXX`引数の値がp_null_valueと等しい場合、行はnullとみなされます。
p_null_value | p_null_index引数とともに使用します。この引数は、null値を識別します。この値をnullにすることはできません。この引数の通常の値は0(ゼロ)です。
p_init_query | コレクションが存在しない場合、コレクションはこの問合せを使用して作成されます。

例

次の例では、従業員の表でコレクションを作成し、ローカル配列の内容とコレクションをマージします。さらに、2人の従業員の仕事を更新します。

    DECLARE
        l_seq   APEX_APPLICATION_GLOBAL.VC_ARR2;
        l_c001  APEX_APPLICATION_GLOBAL.VC_ARR2;
        l_c002  APEX_APPLICATION_GLOBAL.VC_ARR2;
        l_c003  APEX_APPLICATION_GLOBAL.VC_ARR2;
    BEGIN
        l_seq(1)  := 1;
        l_c001(1) := 7369;
        l_c002(1) := 'SMITH';
        l_c003(1) := 'MANAGER';
        l_seq(2)  := 2;
        l_c001(2) := 7499;
        l_c002(2) := 'ALLEN';
        l_c003(2) := 'CLERK';

        APEX_COLLECTION.MERGE_MEMBERS(
            p_collection_name => 'EMPLOYEES',
            p_seq => l_seq,
            p_c001 => l_c001,
            p_c002 => l_c002,
            p_c003 => l_c003,
            p_init_query => 'select empno, ename, job from emp order by empno');
    END;