Om du vill använda rownum
och order by
du har för att lägga beställningen efter i en underfråga. Det finns inget annat sätt att garantera att du får rätt värde.
Det är också bra att ta itu med möjligheten att det kanske inte finns ett id
som matchar din fråga. Jag har lagt till ytterligare en begin... end;
blockera för att hantera detta.
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;
/
Som @raukh noterade (medan jag skrev detta!) är problemet print
, som ska vara dbms_output.put_line()