我只想从过程内部将值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>