Dopo aver rivisto attentamente la tua domanda, ho scoperto che avevi ragione. Insert
non funziona. E sembra anche corretto. Abbiamo già FORALL INSERT
per ottenere i dati inseriti dalla raccolta in una tabella. Da qui la necessità di avere un ulteriore INSERT as Select Statement
è escluso. Tuttavia puoi usare il SELECT
istruzione utilizzando una raccolta in Where
clausola della query. Per creare e inserire puoi semplicemente seguire i passaggi seguenti.
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;
/
Nel caso tu voglia utilizzare il Type
dichiarato in PLSQL
ambito in Select
dichiarazione, puoi usare come di seguito:
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;
/