Po dokładnym przejrzeniu Twojego zapytania stwierdziłem, że masz rację. Insert
nie działa. I też wygląda poprawnie. Mamy już FORALL INSERT
aby pobrać dane z kolekcji do tabeli. Stąd konieczność posiadania dodatkowej instrukcji INSERT as Select Statement
jest wykluczone. Możesz jednak użyć SELECT
oświadczenie przy użyciu kolekcji w Where
klauzulę zapytania. Aby dokonać i wstawić, wystarczy wykonać poniższe czynności.
CREATE OR REPLACE PACKAGE BODY test123
AS
PROCEDURE p1 IS
BEGIN
SELECT c1,c2 BULK COLLECT INTO v_tab FROM tabx;
ForAll rec in 1..v_tab.count
INSERT INTO taby
values v_tab(rec);
--SELECT * FROM TABLE(v_tab);
END;
END;
/
Jeśli chcesz użyć Type
zadeklarowane w PLSQL
zakres w Select
oświadczenie, możesz użyć jak poniżej:
DECLARE
TYPE typ1 IS RECORD(col1 VARCHAR2(100),col2 VARCHAR2(100));
TYPE tab_typ IS TABLE OF typ1 INDEX BY BINARY_INTEGER;
v_tab tab_typ;
BEGIN
SELECT col1,col2 BULK COLLECT INTO v_tab FROM tabx;
DELETE FROM taby
WHERE (col1,col2) in (Select * from table(v_tab));
END;
/