sql >> Databasteknik >  >> RDS >> Oracle

PLS-00221:'C1' (markör) är inte en procedur eller är odefinierad

Du verkar ha förvirrat explicita markörer, t.ex.:

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-markör - som är en pekare till en öppen markör.

Du skulle vanligtvis använda en ref-markör för att öppna en markör i db och skicka tillbaka den till den anropande appen för att den ska gå igenom.

Sättet du har deklarerat ref-markörerna som out-parametrar och sedan försökt gå igenom dem i samma procedur är inte meningsfullt - när du väl har hämtat en post från en markör kan du inte hämta den igen.

Om du absolut måste gå igenom en ref-markör, skulle du använda den här typen av syntax:

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 jag sa, i allmänhet skulle du inte gå igenom ref-markörerna i db, du skulle göra det i anropskoden.

Om du uppdaterade din fråga med de krav du försöker uppfylla kan vi kanske föreslå ett bättre sätt att göra det på.




  1. Hur skickar man flera CheckBox-värden genom AJAX och bearbetar dem?|

  2. Tablespace SYSMGMTDATA är FULL i Grid Infrastructure Management Repository (MGMTDB)

  3. SQL:Välj poster där ALLA sammanfogade poster uppfyller något villkor

  4. Insamlingstider för Spotlight molnlarm