sql >> Database >  >> RDS >> Oracle

Hoe maak ik een keuze uit Bulk Verzamelde tabel met records Type?

Uw probleem is eigenlijk een PLS-00642-fout, in plaats van ORA-22905. In wezen kunt u geen lokale verzamelingstypen gebruiken in SQL-instructies. De oplossing is daarom om uw typen op schemaniveau te definiëren. Wanneer we typen op deze manier definiëren, kunnen we de %TYPE-syntaxis niet gebruiken en moeten we in plaats daarvan expliciet de kolom definiëren (PLS-00201-fout ontvangen tijdens het maken van een type in Oracle ) d.w.z.

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;

U moet dan de waarden expliciet converteren naar het relevante type om de bulkverzameling uit te voeren zoals hier vermeld:ORA-00947 Niet genoeg waarden bij het wereldwijd declareren van type .

Uw procedure ziet er daarom ongeveer zo uit:

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;



  1. SQL-server DB wijzigen van tabel naar multidimensionaal

  2. Welke functie voor gegevensmaskering moet ik gebruiken?

  3. Hoe te vinden of een lijst/set zich in een andere lijst bevindt?

  4. De voordelen van het indexeren van buitenlandse sleutels