sql >> Databasteknik >  >> RDS >> Oracle

Hur väljer jag från Bulk Collected Table of Records Type

Ditt problem är faktiskt ett PLS-00642-fel snarare än ORA-22905. Du kan i huvudsak inte använda lokala samlingstyper i SQL-satser. Lösningen är därför att definiera dina typer på schemanivå. När vi definierar typer på det här sättet kan vi inte använda %TYPE-syntaxen, utan måste uttryckligen definiera kolumnen (Får PLS-00201-fel när en typ i oracle skapas ) dvs

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;

Du måste sedan uttryckligen konvertera värdena till den relevanta typen för att utföra massinsamlingen som nämns här:ORA-00947 Inte tillräckligt med värden när typ deklareras globalt .

Din procedur skulle därför se ut ungefär så här:

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. Hur man skickar en nollvariabel till en lagrad SQL-procedur från C#.net-kod

  2. SUB Dynamic Query Building

  3. MySQL hämta variabel från lagrad procedur i PHP PDO

  4. Parsing Though MySQL Column för att extrahera data