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

Come faccio a selezionare dal tipo di tabella dei record raccolti in blocco

Il tuo problema è in realtà un errore PLS-00642, piuttosto che ORA-22905. In sostanza non è possibile utilizzare i tipi di raccolta locali nelle istruzioni SQL. La soluzione, quindi, è definire i tipi a livello di schema. Quando si definiscono i tipi in questo modo, non possiamo utilizzare la sintassi %TYPE e invece dobbiamo definire esplicitamente la colonna (Ricevere l'errore PLS-00201 durante la creazione di un tipo in Oracle ) cioè

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;

È quindi necessario convertire in modo esplicito i valori nel tipo pertinente per eseguire la raccolta in blocco come menzionato qui:ORA-00947 Valori insufficienti durante la dichiarazione del tipo a livello globale .

La tua procedura sarebbe quindi simile a questa:

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;