Hirdetés

Új hozzászólás Aktív témák

  • bpx
    őstag

    Sziasztok!

    Pár hete kezdtem el PL/SQL-es foglalkozni, és akadt egy kérdésem:
    Hogy lehet azt megvalósítani, hogy egy tábla első három sorát dolgozzam csak fel?
    Például van egy 14 soros tábla, aminek van többek közt egy név és egy fizetésmezője, és én az első 3 sorban lévő adatokat szeretném egy általam definiált rekordba eltárolni és kiírni.

    Ezt a kódot írtam rá:

    declare

    emp_adatok emp%ROWTYPE;

    begin

    for i in 1..3
    loop
    select * INTO emp_adatok from emp
    where ROWNUM=i;

    dbms_output.put_line(emp_adatok.ename);
    end loop;
    end;

    no data found hibaüzenetet ad, pedig a táblának van pontosan 14 sora.

    Mit javítsak rajta?

    Egy megoldás már le lett írva, így csak a hibára reagálnék. Azért nem ad eredményt, mert pl. annak, hogy WHERE ROWNUM = 2, nincs értelme, soha nem fog eredményt adni. A ROWNUM eredményhalmazra vonatkozik, és nem táblára. A ROWNUM értéke folyamatosan növekszik az eredményhalmaz sorainak számával együtt. A ROWNUM = 1 azért működik, mert az első sorra teljesül, hogy az az első sor. A ROWNUM = 2 azért nem ad eredményt, mert az első sorra nem teljesül, hogy az a második sor, így nem kerül be az eredményhalmazba, és a ROWNUM értéke sem fog növekedni, így nem lesz eredmény sem.

    Na, lassú voltam.

Új hozzászólás Aktív témák