Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie wähle ich aus dem Typ „Massengesammelte Tabelle mit Datensätzen“ aus?

Ihr Problem ist eigentlich ein PLS-00642-Fehler und kein ORA-22905. Im Wesentlichen können Sie keine lokalen Sammlungstypen in SQL-Anweisungen verwenden. Die Lösung besteht daher darin, Ihre Typen auf Schemaebene zu definieren. Wenn wir Typen auf diese Weise definieren, können wir die %TYPE-Syntax nicht verwenden und müssen stattdessen die Spalte explizit definieren (Fehler PLS-00201 beim Erstellen eines Typs in Oracle ) d.h.

create or replace type rec_type as object (
  COLUMN_1 integer,
  COLUMN_2 varchar2(128)
);

create or replace type tab_type as table of rec_type;

Sie müssen die Werte dann explizit in den relevanten Typ konvertieren, um die Massenerfassung wie hier erwähnt durchzuführen:ORA-00947 Nicht genügend Werte beim globalen Deklarieren des Typs .

Ihr Vorgehen würde also etwa so aussehen:

PROCEDURE MYPROC((PARAMS))AS
  TABLE_1 TAB_TYPE;
  lCount  integer;
BEGIN

  SELECT  REC_TYPE(COLUMN_A, COLUMN_B)
  BULK COLLECT INTO TABLE_1 
  FROM  TABLE_A;

  SELECT COUNT(*) INTO lCount FROM TABLE(TABLE_1);
END MYPROC;