Se você quiser usar
rownum
e order by
você tem para colocar a ordem em uma subconsulta. Não há outra maneira de garantir que você obtenha o valor correto. Também é uma boa prática lidar com a possibilidade de não haver um
id
que corresponda à sua consulta. Adicionei um begin... end;
adicional bloco para lidar com isso. 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 @raukh observou (enquanto eu estava escrevendo isso!), o problema é
print
, que deve ser dbms_output.put_line()