15.22 MERGE_MEMBERSプロシージャ
指定した名前付きコレクションのメンバーと、配列に渡された値をマージします。
名前付きコレクションが存在しない場合は作成されます。
p_init_query
が指定されると、コレクションは指定されたSQL問合せから作成されます。
名前付きコレクションが存在すると、次のことが行われます。
- コレクション内に存在し、配列内に存在しない行が削除されます。
- コレクション内および配列内に存在する行が更新されます。
- 配列内に存在し、コレクション内に存在しない行が挿入されます。
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番目の配列内の要素の数に基づきます。
パラメータ | 説明 |
---|---|
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行とみなされます。その後、マージ・ファンクションはこの行を無視します。これによって、コレクションから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;
親トピック: APEX_COLLECTION