Oracle
 sql >> Base de données >  >> RDS >> Oracle

Insérer dans la table à partir du type de collection oracle 12c - ORA-00902 :type de données non valide

Après avoir revu attentivement votre requête, j'ai constaté que vous aviez raison. Insert ne marche pas. Et ça a l'air correct aussi. Nous avons déjà FORALL INSERT pour insérer des données de la collection dans une table. D'où la nécessité d'avoir un INSERT as Select Statement supplémentaire est exclu. Cependant, vous pouvez utiliser le SELECT instruction utilisant une collection dans Where clause de la requête. Pour créer et insérer, vous pouvez simplement suivre les étapes ci-dessous.

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

Si vous souhaitez utiliser le Type déclaré sous PLSQL portée dans Select déclaration, vous pouvez utiliser comme ci-dessous :

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