データが見つからない場合に、SQLステートメントに基づいて変数に値を割り当てる状況を管理することに疑問があります。まず、これらのブロックは同等ですか?それが本当なら、2つのうちのどちらが良いですか?
declare
nonsense number;
begin
select nvl((select 1 from dual where 1 <> 1),2) into nonsense from dual;
dbms_output.put_line(nonsense);
end;
declare
nonsense number;
begin
begin
select 1 into nonsense from dual where 1<>1;
exception when no_data_found then
nonsense := 2;
end;
dbms_output.put_line(nonsense);
end;