Jeśli chcesz użyć rownum
i order by
masz złożyć zamówienie w podzapytaniu. Nie ma innego sposobu, aby zagwarantować, że uzyskasz prawidłową wartość.
Dobrą praktyką jest również radzenie sobie z możliwością braku id
pasujące do Twojego zapytania. Dodałem dodatkowy begin... end;
zablokować, aby sobie z tym poradzić.
declare
v_id a.id%type;
begin
begin
select id into v_id
from ( select id
from a
where name = 'test'
order by id desc )
where rownum < 2
;
exception when no_data_found then
v_id := null;
end;
dbms_output.put_line(v_id);
doSomething(v_id);
end;
/
Jak zauważył @raukh (podczas gdy to pisałem!) problemem jest print
, którym powinno być dbms_output.put_line()