sql >> Database >  >> RDS >> Oracle

PLS-00221:'C1'(cursor) is geen procedure of is niet gedefinieerd

U lijkt verwarde expliciete cursors te hebben, bijvoorbeeld:

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

met een ref-cursor - wat een aanwijzer is naar een geopende cursor.

Normaal gesproken zou je een ref-cursor gebruiken om een ​​cursor in de db te openen en deze terug te geven aan de aanroepende app zodat deze kan doorlopen.

De manier waarop je de ref-cursors als out-parameters hebt gedeclareerd en ze vervolgens in dezelfde procedure hebt geprobeerd te doorlopen, is niet logisch - als je eenmaal een record van een cursor hebt gehaald, kun je het niet opnieuw ophalen.

Als je absoluut door een ref-cursor moet lopen, zou je dit soort syntaxis gebruiken:

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;
/

maar zoals ik al zei, in het algemeen zou je niet door ref-cursors in de db lopen, je zou dat doen in de aanroepende code.

Als u uw vraag heeft bijgewerkt met de vereisten waaraan u probeert te voldoen, kunnen we misschien een betere manier voorstellen om dit te doen.




  1. mysql Foreign key constraint is onjuist gevormde fout

  2. Selecteer de dichtstbijzijnde numerieke waarde met MySQL-query

  3. PHP en MySQL:maand en dag vergelijken met dynamisch jaar

  4. Hoe MySQL 5.7 te installeren op Amazon ec2