Hirdetés

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

  • Ablakos
    addikt

    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?

    Igen a rownum ilyen sajátosan működik. Egytől indul, egyesével növekszik. A where-ben kiértékeli a pszeudo értéket, ami először 1. Mivel a feltétel teljesült (=1) lefut, jön a következő ciklus. Következő for ciklusban megint kiértékeli és megint csak 1-el indul a rownum, de a feltétel nem teljesül (i = 2). Ekkor null value akaródzik a változóba menni, és ennek a jutalma no data found kivétel.

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