我想使用来自FORALL INSERT语句(批量插入)的RETURNING子句将插入记录的ROWID返回到记录的pl / sql表(记录的关联数组)。 我相信,问题在于使用FORALL和BULK COLLECT中的记录表。
参见示例:
CREATE TABLE test2 (num NUMBER);
set serveroutput on
DECLARE
TYPE r_rec IS RECORD (num NUMBER, row_id ROWID);
-- TYPE t_rid IS TABLE OF rowid INDEX BY BINARY_INTEGER;
TYPE t_tab IS TABLE OF r_rec INDEX BY BINARY_INTEGER;
v_tab t_tab;
--v_rid t_rid;
BEGIN
v_tab(1).num := 1.11;
v_tab(2).num := 2.22;
v_tab(3).num := 3.33;
--
FORALL i IN v_tab.first..v_tab.last
INSERT INTO test2 (num)
VALUES (v_tab(i).num)
RETURNING rowid BULK COLLECT INTO v_tab(i).row_id
;
FOR i IN v_tab.first..v_tab.last
LOOP
dbms_output.put_line('num/rowid : ' || v_tab(i).num || '/' || v_tab(i).row_id);
END LOOP;
END;
/
引发错误: PLS-00437:FORALL批量索引不能用于RETURNING子句 这里的问题在哪里?我是否需要另一个PL / SQL表来返回ROWID?
答案 0 :(得分:2)
我是否需要另一个PL / SQL表来返回ROWID?
是 ..您可以尝试如下:您需要另一个集合来保存rowid的返回,因为&#34; FORALL批量索引不能用于RETURNING子句&#34; < / p>
DECLARE
TYPE r_rec IS RECORD (num NUMBER, row_id ROWID);
TYPE t_tab IS TABLE OF r_rec INDEX BY BINARY_INTEGER;
v_tab t_tab;
TYPE r_rw IS TABLE OF ROWID index by pls_integer;
v_rw r_rw;
BEGIN
v_tab(1).num := 1.11;
v_tab(2).num := 2.22;
v_tab(3).num := 3.33;
--
FORALL i IN v_tab.first..v_tab.last
INSERT INTO test2 (num)
VALUES (v_tab(i).num)
RETURNING rowid BULK COLLECT INTO v_rw;
FOR i IN v_tab.first..v_tab.last
LOOP
dbms_output.put_line('num/rowid : ' || v_tab(i).num || '/' ||v_rw(i));
END LOOP;
END;
/