Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como seleciono a partir do tipo de tabela de registros coletados em massa


Seu problema é na verdade um erro PLS-00642, em vez de ORA-22905. Essencialmente, você não pode usar tipos de coleção local em instruções SQL. A solução, portanto, é definir seus tipos no nível do esquema. Ao definir tipos dessa maneira, não podemos usar a sintaxe %TYPE e, em vez disso, devemos definir explicitamente a coluna (Obtendo erro PLS-00201 ao criar um tipo no oracle ) ou seja
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;

Em seguida, você precisa converter explicitamente os valores no tipo relevante para realizar a coleta em massa conforme mencionado aqui:ORA-00947 Não há valores suficientes ao declarar o tipo globalmente .

Seu procedimento, portanto, ficaria assim:
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;