If statement PL/SQL异常处理
我使用PL/SQL匿名块根据员工的If statement PL/SQL异常处理,if-statement,plsql,exception-handling,If Statement,Plsql,Exception Handling,我使用PL/SQL匿名块根据员工的部门id查找员工。我为此写了一个程序 代码 如何检查departments表中的部门id 注: 在该过程中,有一个输入参数p\u dept\u no作为输入 p\u error\u message是输出参数 我需要检查部门id是否在departments表中,然后记录会自动显示其他信息,它显示异常,因此我需要检查条件如何可能,请提前通知我谢谢。鉴于您已经扫描了该表,您只需在循环内设置一个变量,并在循环外检查其值。 例如: CREATE OR REPLACE
部门id
查找员工。我为此写了一个程序
代码
- 如何检查departments表中的
部门id
p\u dept\u no
作为输入
p\u error\u message
是输出参数
我需要检查部门id是否在departments表中,然后记录会自动显示其他信息,它显示异常,因此我需要检查条件如何可能,请提前通知我谢谢。鉴于您已经扫描了该表,您只需在循环内设置一个变量,并在循环外检查其值。 例如:
CREATE OR REPLACE PROCEDURE find_employees(p_dept_no IN
NUMBER,p_error_message OUT VARCHAR2)
AS
v_dept_no NUMBER;
dept_chk EXCEPTION;
vEmployeeFound boolean := false; -- a boolean variable
CURSOR find_emp
IS
SELECT
employee_id, first_name, last_name, salary, hire_date
FROM
employees
WHERE
department_id = p_dept_no;
BEGIN
FOR i in find_emp
LOOP
dbms_output.put_line(i.employee_id);
dbms_output.put_line(i.first_name);
dbms_output.put_line(i.last_name);
dbms_output.put_line(i.salary);
dbms_output.put_line(i.hire_date);
vEmployeeFound := true; -- set the variable
END LOOP;
-- Check if the department_id in departments table
IF NOT vEmployeeFound THEN -- check the variable value
RAISE dept_chk;
END IF;
EXCEPTION
WHEN dept_chk THEN
p_error_message:='Please enter valid department number';
END find_employees;
我从不喜欢这样的设计,即过程通过成功返回并通过
out
参数传回一些错误消息来处理异常。我认为如果它在没有这样的部门ID时什么也不做,或者正确地失败,那就更好了。在这种情况下,您只需记录已处理的行数,并在0
时执行某些操作。
CREATE OR REPLACE PROCEDURE find_employees(p_dept_no IN
NUMBER,p_error_message OUT VARCHAR2)
AS
v_dept_no NUMBER;
dept_chk EXCEPTION;
vEmployeeFound boolean := false; -- a boolean variable
CURSOR find_emp
IS
SELECT
employee_id, first_name, last_name, salary, hire_date
FROM
employees
WHERE
department_id = p_dept_no;
BEGIN
FOR i in find_emp
LOOP
dbms_output.put_line(i.employee_id);
dbms_output.put_line(i.first_name);
dbms_output.put_line(i.last_name);
dbms_output.put_line(i.salary);
dbms_output.put_line(i.hire_date);
vEmployeeFound := true; -- set the variable
END LOOP;
-- Check if the department_id in departments table
IF NOT vEmployeeFound THEN -- check the variable value
RAISE dept_chk;
END IF;
EXCEPTION
WHEN dept_chk THEN
p_error_message:='Please enter valid department number';
END find_employees;