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并返回相应的人员姓名。如果用户输入无效的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;
我用这个anonyomus块检查功能是否正常工作。
答案 0 :(得分:0)
在我看来,你不需要一个显式游标,一个嵌入式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 ;
请记住,当你处理异常时,不要忘记提出异常;如果不是,则数据库在发生错误时不会回滚事务。
如果它在编译时会出现一些错误,我很抱歉,但是我编写了代码而没有编译它(匆忙从我的暴徒那里)。
欢呼和快乐的编码。