Gau*_*oni 5 oracle plsql oracle11g bulk-collect
有没有办法在第二次批量收集后,数据不会覆盖第一次批量收集.我不想循环迭代.
DECLARE
TYPE abc IS RECORD (p_id part.p_id%TYPE);
TYPE abc_nt
IS
TABLE OF abc
INDEX BY BINARY_INTEGER;
v_abc_nt abc_nt;
BEGIN
SELECT p_id
BULK COLLECT
INTO v_abc_nt
FROM part
WHERE p_id IN ('E1', 'E2');
SELECT p_id
BULK COLLECT
INTO v_abc_nt
FROM part
WHERE p_id IN ('E3', 'E4');
FOR i IN v_abc_nt.FIRST .. v_abc_nt.LAST
LOOP
DBMS_OUTPUT.put_line (
'p_id is ' || v_abc_nt (i).p_id
);
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
注意:E1和E2出现在零件表中.
Jus*_*ave 11
您不能简单地将数据添加到集合中,不.
但是,您可以BULK COLLECT进入一个单独的集合,然后组合集合,假设您确实需要/想要一个嵌套表而不是一个关联数组...
DECLARE
TYPE abc IS RECORD (p_id part.p_id%TYPE);
TYPE abc_nt
IS
TABLE OF abc;
v_abc_nt abc_nt;
v_abc_nt2 abc_nt;
BEGIN
SELECT p_id
BULK COLLECT
INTO v_abc_nt
FROM part
WHERE p_id IN ('E1', 'E2');
SELECT p_id
BULK COLLECT
INTO v_abc_nt2
FROM part
WHERE p_id IN ('E3', 'E4');
v_abc_nt := v_abc_nt MULTISET UNION v_abc_nt2;
FOR i IN v_abc_nt.FIRST .. v_abc_nt.LAST
LOOP
DBMS_OUTPUT.put_line (
'p_id is ' || v_abc_nt (i).p_id
);
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
如果你真的想使用关联数组,你需要编写一些代码,因为当你将一个数组与具有一些相同键的另一个关联数组组合时,Oracle无法自动知道如何重新映射一个数组的关联. .
| 归档时间: |
|
| 查看次数: |
7718 次 |
| 最近记录: |