FORALL INSERTステートメント(一括挿入)からRETURNING句を使用してレコードのROWIDを取得したいと思います。 私は、この問題は、FORALLとBULK COLLECTのレコードのテーブルを一緒に使用することにあると考えています。 FORALLとRETURNINGを使用してテーブルに挿入するときにROWIDを取得する方法
は、例を参照してください: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句問題はここにある を返すに使用することはできませんか? ROWIDを戻すために別のPL/SQL表が必要ですか?
まあそのレコードが挿入されるときに、レコードにROWIDが割り当てられます。それをRETURNING節で得ることができます。私はそれをPL/SQLテーブル+レコードに戻す必要があります。この例を参照してください。私の質問はそれに関連しています。 – LiborStefek