【发布时间】:2017-09-12 07:43:59
【问题描述】:
我想使用 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 bulk index cannot be used in RETURNING clause 这里哪里有问题?我是否需要另一个 PL/SQL 表来返回 ROWID?
【问题讨论】:
-
好吧,rowid 是在插入记录时分配给该记录的。可以在 RETURNING 子句中获取它。我只需要将它放回 pl/sql 表+记录中。请参阅示例。我的问题与此有关。