2013-11-27 44 views
-1

我的函数通常返回雇员的薪水值,其中empno作为函数的输入。如果没有给定号码的员工存在,我想抛出一个写入屏幕的异常(“没有员工发现该员工号码!”)。问题是,那么没有数字作为返回值,那么如何在Oracle PL/SQL中解决这个问题?PL/SQL:函数有什么返回值,但有例外

+1

你尝试过什么?关键是要有一个异常处理程序,就像no_data_found然后write_to_the_screen。祝你好运。 –

+0

EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Employee not found!'); \t RETURN sal_output; 这就是我的异常处理程序的样子 - btw:atm它什么都不写到屏幕上 –

+0

在这种情况下,搜索“set serveroutput”。你的问题已被问及答复了一千万次。此外,您的原始问题完全不完整,会误导您的实际问题。 –

回答

0
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,因为它会为空返回给出预定义的异常。

1

如果引发异常,它们不是返回值。引发异常并且调用堆栈在那里结束。

您可以在一个功能肯定用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; 
相关问题