SQL 如何处理用户自定义函数中的异常?
SQL How to handle an exception in user defined functions?
CREATE OR REPLACE Function fun_Find_Staff_Name( v_staffid IN NUMBER )
RETURN VARCHAR2
IS
staff_name VARCHAR2(60);
CURSOR c_staff IS
SELECT staff_firstName || ' ' || staff_lastName
into staff_name
FROM staff
WHERE staff_id = v_staffid;
BEGIN
OPEN c_staff;
FETCH c_staff INTO staff_name;
CLOSE c_staff;
RETURN staff_name;
END;
这个函数接受一个staff_id和returns对应的员工姓名。如果用户输入无效的 ID 并显示错误消息,我想处理异常?我在哪里添加异常块?
SET serveroutput ON;
DECLARE
v_staff_ID NUMBER := &StaffID;
v_message VARCHAR2(100);
BEGIN
v_message := fun_Find_Staff_Name(v_staff_ID);
dbms_output.put_line(v_message);
END;
我使用这个匿名块来检查功能是否正常工作。
在我看来,您不需要显式光标,嵌入式 sql 就可以了:
CREATE OR REPLACE Function fun_Find_Staff_Name
( v_staffid IN NUMBER )
RETURN VARCHAR2
IS
staff_name VARCHAR2(60);
BEGIN
SELECT staff_firstName || ' ' || staff_lastName
INTO staff_name
FROM staff WHERE staff_id = v_staffid;
RETURN staff_name;
EXCEPTION
WHEN NO_DATA_FOUND THEN
--in case of an invalid id no data will be found
--you can treat your exception here
--example
DBMS_OUTPUT.PUT_LINE('No data found for this id: ' || v_staffid);
RAISE;
WHEN OTHERS THEN
RAISE;
END fun_Find_Staff_Name ;
请记住,在处理异常时不要忘记引发它;如果不是,数据库将不会在发生错误时回滚事务。
如果在编译时大喊错误,我很抱歉,但我没有编译就写了代码(我的暴民匆忙)。
干杯,编码愉快。
CREATE OR REPLACE Function fun_Find_Staff_Name( v_staffid IN NUMBER )
RETURN VARCHAR2
IS
staff_name VARCHAR2(60);
CURSOR c_staff IS
SELECT staff_firstName || ' ' || staff_lastName
into staff_name
FROM staff
WHERE staff_id = v_staffid;
BEGIN
OPEN c_staff;
FETCH c_staff INTO staff_name;
CLOSE c_staff;
RETURN staff_name;
END;
这个函数接受一个staff_id和returns对应的员工姓名。如果用户输入无效的 ID 并显示错误消息,我想处理异常?我在哪里添加异常块?
SET serveroutput ON;
DECLARE
v_staff_ID NUMBER := &StaffID;
v_message VARCHAR2(100);
BEGIN
v_message := fun_Find_Staff_Name(v_staff_ID);
dbms_output.put_line(v_message);
END;
我使用这个匿名块来检查功能是否正常工作。
在我看来,您不需要显式光标,嵌入式 sql 就可以了:
CREATE OR REPLACE Function fun_Find_Staff_Name
( v_staffid IN NUMBER )
RETURN VARCHAR2
IS
staff_name VARCHAR2(60);
BEGIN
SELECT staff_firstName || ' ' || staff_lastName
INTO staff_name
FROM staff WHERE staff_id = v_staffid;
RETURN staff_name;
EXCEPTION
WHEN NO_DATA_FOUND THEN
--in case of an invalid id no data will be found
--you can treat your exception here
--example
DBMS_OUTPUT.PUT_LINE('No data found for this id: ' || v_staffid);
RAISE;
WHEN OTHERS THEN
RAISE;
END fun_Find_Staff_Name ;
请记住,在处理异常时不要忘记引发它;如果不是,数据库将不会在发生错误时回滚事务。
如果在编译时大喊错误,我很抱歉,但我没有编译就写了代码(我的暴民匆忙)。
干杯,编码愉快。