PL / SQL异常处理

时间:2018-05-28 09:41:44

标签: if-statement plsql exception-handling

我有PL / SQL匿名阻止,可以根据他们的department_id查找员工。我为此写了一个程序。

代码

CREATE OR REPLACE PROCEDURE find_employees (
    p_dept_no         IN     NUMBER,
    p_error_message      OUT VARCHAR2)
AS
    v_dept_no   NUMBER;
    dept_chk    EXCEPTION;

    CURSOR find_emp
    IS
        SELECT employee_id,
               first_name,
               last_name,
               salary,
               hire_date
          FROM employees
         WHERE department_id = p_dept_no;
BEGIN
    -- Check if the department_id in departments table
    IF Condition
    THEN                                --Need to check the condition here
        RAISE dept_chk;
    END IF;

    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);
    END LOOP;
EXCEPTION
    WHEN dept_chk
    THEN
        p_error_message := 'Please enter valid department number';
END find_employees;
  • 如何检查部门表中的department_id是否

注意:

在该过程中,有一个输入参数p_dept_no作为INPUT  并且p_error_message是输出参数。

我需要检查department_id是否在departments表中,然后自动记录将显示其他明智的它显示异常,所以我需要检查条件如何可能让我知道提前谢谢。

1 个答案:

答案 0 :(得分:1)

鉴于您已经扫描了表,您只需在循环中设置变量并在外部检查其值。 例如:

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;