• 3 odgovora
  • 2.907 pregleda
PL/SQL promenljiva tipa cursor%rowtype 06.07.2010. u 09:17 · pre 198 meseci #1
U sledecem primeru
Code:
declare
  cursor c is ...;
  r c%rowtype;
begin
  open c;
  loop
    fetch c into r;
    exit when c%notfound or (neki uslov);
  end loop;
end;

Interesuje me kakva je vrednost promenljive r po izlasku iz petlje?
I to u slucaju da se desilo c%notfound i da nije.
Pretpostavljam da ako nije, r zadrzava vrednosti poslednjeg sloga iz kursora.
Re: PL/SQL promenljiva tipa cursor%rowtype 11.07.2010. u 00:22 · pre 198 meseci #3
Tek danas sam video ovo pitanje.

Jednostavno rečeno, vrednost promenljive r nakon što je tačan uslov c%notfound ne treba koristiti. Sad, ti imaš i neki OR uslov, pa ako je program iskočio zbog onoga što je iza OR, tada bi u r mogao da bude poslednji fečovan slog iz kurzora c.

Ako je zaista bilo tačno c%notfoud, tada bi vrednost varijable r mogla da bude ili vrednost poslednjeg fečovanog sloga, ili da sva polja budu null ili da bude potpuno besmislen podatak. Šta je zaista u r moglo bi da zavisi i od verzije baze na kojoj se procedura izvršava. Na primer, ono što sigurno znam je da se, recimo select u varijablu u slučaju kad select vrati TOO_MANY_ROWS promenio tako da je u verziji baze 9 tu bio prvi slog, dok je u 10 vrednost null.

Jedino što je 100% sigurno je da je: ako je c%notfound tačno, vrednost varijable r je NEDIFINISANA i ne treba da bude korišćena.
Re: PL/SQL promenljiva tipa cursor%rowtype 12.07.2010. u 07:17 · pre 198 meseci #4
Hvala na odgovoru. Ja sam testirao ovo i rekao bih da r zadrzava vrednost bez obzira na %notfound (u mom radnom okruzenju).
Ali verovatno ipak treba biti oprezan s' obzirom na tu pricu sa verzijama baze.
Tako da ako zelim taj poslednji vraceni slog, morao bih da napravim novu promenljivu u kojoj cu drzati tekuce vrednosti iz kursora.
Inace i meni je nekako logicnije da TOO_MANY_ROWS vrati NULL u promenljivu :)
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme