-1
我的函数通常返回雇员的薪水值,其中empno作为函数的输入。如果没有给定号码的员工存在,我想抛出一个写入屏幕的异常(“没有员工发现该员工号码!”)。问题是,那么没有数字作为返回值,那么如何在Oracle PL/SQL中解决这个问题?PL/SQL:函数有什么返回值,但有例外
我的函数通常返回雇员的薪水值,其中empno作为函数的输入。如果没有给定号码的员工存在,我想抛出一个写入屏幕的异常(“没有员工发现该员工号码!”)。问题是,那么没有数字作为返回值,那么如何在Oracle PL/SQL中解决这个问题?PL/SQL:函数有什么返回值,但有例外
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,因为它会为空返回给出预定义的异常。
如果引发异常,它们不是返回值。引发异常并且调用堆栈在那里结束。
您可以在一个功能肯定用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;
你尝试过什么?关键是要有一个异常处理程序,就像no_data_found然后write_to_the_screen。祝你好运。 –
EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Employee not found!'); \t RETURN sal_output; 这就是我的异常处理程序的样子 - btw:atm它什么都不写到屏幕上 –
在这种情况下,搜索“set serveroutput”。你的问题已被问及答复了一千万次。此外,您的原始问题完全不完整,会误导您的实际问题。 –