Si vous souhaitez utiliser rownum
et order by
vous avez pour placer l'ordre dans une sous-requête. Il n'existe aucun autre moyen de garantir que vous obtenez la valeur correcte.
Il est également recommandé de gérer la possibilité qu'il n'y ait pas d'id
qui correspond à votre requête. J'ai ajouté un begin... end;
supplémentaire bloquer pour gérer cela.
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;
/
Comme @raukh l'a noté (pendant que j'écrivais ceci !), le problème est print
, qui devrait être dbms_output.put_line()