Oracle
 sql >> Database >  >> RDS >> Oracle

Inserisci nella tabella dal tipo di raccolta Oracle 12c - ORA-00902:tipo di dati non valido

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;
/