Если вы хотите использовать rownum
и order by
, у вас есть для размещения заказа в подзапросе.Нет другого способа гарантировать, что вы получите правильное значение.
Хорошей практикой также является вероятность того, что не может быть id
, который соответствует вашему запросу.Я добавил дополнительный блок begin... end;
, чтобы справиться с этим.
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;
/
Как заметил @raukh (пока я писал это!), Проблема заключается в print
, который должен быть dbms_output.put_line()