Si desea utilizar rownum
y order by
usted tiene para poner el orden por en una subconsulta. No hay otra forma de garantizar que obtenga el valor correcto.
También es una buena práctica tratar con la posibilidad de que no haya un id
que coincida con su consulta. He agregado un begin... end;
adicional bloquear para lidiar con esto.
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;
/
Como señaló @raukh (¡mientras escribía esto!), el problema es print
, que debería ser dbms_output.put_line()