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

PLS-00221:'C1'(markør) er ikke en procedure eller er udefineret

Du ser ud til at have forvirrede eksplicitte markører, f.eks.:

declare
  cursor cur is
  select dummy from dual;
begin
  for rec in cur
  loop
    dbms_output.put_line(rec.dummy);
  end loop;
end;
/

med en ref cursor - som er en pegepind til en åben markør.

Du vil typisk bruge en ref-markør til at åbne en markør i db'en og sende den tilbage til den kaldende app, så den kan gå igennem.

Den måde, du har erklæret ref-markørerne som ud-parametre og derefter forsøgt at gå igennem dem i samme procedure, giver ikke mening - når du først har hentet en post fra en markør, kan du ikke hente den igen.

Hvis du absolut skal gå gennem en ref-markør, ville du bruge denne slags syntaks:

declare
  cur sys_refcursor;
  rec dual%rowtype;
begin
  open cur for select dummy from dual;
  loop
    fetch cur into rec;
    exit when cur%notfound;
    dbms_output.put_line(rec.dummy);
  end loop;
end;
/

men som jeg sagde, generelt ville du ikke gå gennem ref-markører i db'en, du ville gøre det i kaldekoden.

Hvis du opdaterede dit spørgsmål med de krav, du forsøger at opfylde, kunne vi måske foreslå en bedre måde at gøre det på.




  1. Kolonnesammenkædning returnerer Null Mysql - Php

  2. mysql union med fuldtekst søgefejl

  3. MySQL mellem klausul ikke inkluderende?

  4. udløser hvis andet