sql >> Base de Datos >  >> RDS >> Oracle

Insertar en la tabla del tipo de colección Oracle 12c - ORA-00902:tipo de datos no válido

Después de revisar cuidadosamente su consulta, descubrí que tenía razón. Insert No funciona. Y parece correcto también. Ya tenemos FORALL INSERT para obtener datos insertados de la colección a una tabla. De ahí la necesidad de tener un INSERT as Select Statement está descartado. Sin embargo, puede usar el SELECT declaración usando una colección en Where cláusula de la consulta. Para hacer e insertar, simplemente puede seguir los pasos a continuación.

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

En caso de que quiera usar el Type declarado bajo PLSQL alcance en Select declaración, puede usar lo siguiente:

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