我只想从过程内部将值SELECT值转换为变量.
SELECT blah1,blah2 INTO var1_,var2_ FROM ...
有时,大型复杂查询将没有行,有时它会有多个 - 两种情况都会导致异常.我希望用类似于以下内容的隐式行为替换异常行为:
没有行=没有值更改,多行=使用最后一行
对于"多行"情况,我可以很容易地约束结果集,但对于不能在SELECT中使用聚合函数的情况,"无行"会更加困难.
有什么特别的解决方法或建议吗?在执行SELECT INTO之前,希望避免显着重写查询或执行两次以获取行数.
使用异常块有什么问题?
create or replace
procedure p(v_job VARCHAR2) IS
v_ename VARCHAR2(255);
begin
select ename into v_ename
from (
select ename
from scott.emp
where job = v_job
order by v_ename desc )
where rownum = 1;
DBMS_OUTPUT.PUT_LINE('Found Rows Logic Here -> Found ' || v_ename);
EXCEPTION WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No Rows found logic here');
end;
SQL> begin
p('FOO');
p('CLERK');
end; 2 3 4
5 /
No Rows found logic here
Found Rows Logic Here -> Found SMITH
PL/SQL procedure successfully completed.
SQL>
Run Code Online (Sandbox Code Playgroud)