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

Hvordan vælger jeg fra Masseindsamlet Table of Records Type

Dit problem er faktisk en PLS-00642-fejl snarere end ORA-22905. Grundlæggende kan du ikke bruge lokale samlingstyper i SQL-sætninger. Løsningen er derfor at definere dine typer på skemaniveau. Når vi definerer typer på denne måde, kan vi ikke bruge %TYPE-syntaksen, og skal i stedet definere kolonnen eksplicit (Få PLS-00201 fejl under oprettelse af en type i oracle ) 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 skal derefter eksplicit konvertere værdierne til den relevante type for at udføre masseindsamlingen som nævnt her:ORA-00947 Ikke nok værdier, mens type erklæres globalt .

Din procedure vil derfor se nogenlunde sådan ud:

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. Problemer med at kontrollere, om en tabel findes eller ej i db

  2. Hent et fast antal rækker i SQL-forespørgsel i Oracle

  3. Uddrag måneden fra en dato i PostgreSQL

  4. MySQL - nummerforbindelse nået