oracle PL/SQL:发生异常的函数的返回值是什么

1yjd4xko  于 2023-03-01  发布在  Oracle
关注(0)|答案(3)|浏览(180)

通常,我的函数返回雇员的薪水值,并将empno作为函数的输入。如果不存在具有给定编号的雇员,我想抛出一个异常,并在屏幕上写入(“找不到具有此雇员编号的雇员!”)。问题是,没有编号作为返回值,那么我如何在Oracle PL/SQL中解决这个问题?

fumotvh3

fumotvh31#

如果抛出异常,则没有返回值。引发异常,调用堆栈在此结束。
当然,您可以在函数中使用no_data_found:

CREATE OR REPLACE function get_employees (pID in varchar2) return Number 
As
salary Number;
begin

begin
select e.salary into salary from employees e where employee_id=pID;
EXCEPTION WHEN NO_DATA_FOUND THEN
salary := -1;
END;

return salary;

end get_employees;
5q4ezhmt

5q4ezhmt2#

CREATE OR REPLACE function get_employees (id in varchar2) return varchar2 is

   sal employees.salary%type;

begin

   select salary  into sal from employees where employee_id=id;

   return sal;

EXCEPTION WHEN NO_DATA_FOUND THEN
   raise_application_error(-20001, 'Custom NO_DATA_FOUND');    
end get_employees;

不能在函数中使用NO_DATA_FOUND,因为它将给予一个预定义的异常,用于空返回。

igetnqfo

igetnqfo3#

希望下面的例子有助于解决退货问题......

SET SERVEROUTPUT ON ;

    /

    CREATE OR REPLACE FUNCTION FN_CHK
    RETURN NUMBER
    IS   
        V_CHK NUMBER :=1;
    BEGIN
        FOR I IN 1..100
        LOOP
            DBMS_OUTPUT.PUT_LINE(I);
            IF(I>=4) THEN
                --DBMS_OUTPUT.PUT_LINE('BREAK');
                V_CHK:=0;
                --V_CHK:=0/0;
                exit;
            END IF;
        END LOOP;
        RETURN V_CHK;
      
    EXCEPTION WHEN OTHERS THEN
    V_CHK:=1000;  

    RETURN V_CHK;
    END;

    /

    SELECT FN_CHK
    FROM DUAL;

相关问题