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

¿Cómo selecciono el tipo de tabla de registros recopilados a granel?

Su problema es en realidad un error PLS-00642, en lugar de ORA-22905. Esencialmente, no puede usar tipos de colección locales en declaraciones SQL. Por lo tanto, la solución es definir sus tipos a nivel de esquema. Al definir tipos de esta manera, no podemos usar la sintaxis %TYPE y, en su lugar, debemos definir explícitamente la columna (Obteniendo el error PLS-00201 al crear un tipo en Oracle ) es decir,

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;

Luego, debe convertir explícitamente los valores en el tipo relevante para realizar la recopilación masiva como se menciona aquí:ORA-00947 No hay suficientes valores al declarar el tipo globalmente .

Por lo tanto, su procedimiento se vería así:

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;