编写带有异常处理的PL/SQL程序:从键盘随机输入员工编号,查询该雇员的姓名和工资。 如果雇员不存在,触发系统异常,输出:"查无此人"。
时间: 2024-10-13 22:02:50 浏览: 34
在Oracle PL/SQL中编写一个带有异常处理的程序来查询员工信息,你可以按照以下步骤进行:
```plsql
DECLARE
v_employee_id NUMBER;
BEGIN
-- 提示用户输入员工编号
DECLARE EXIT HANDLER FOR NO_DATA_FOUND
BEGIN
DBMS_OUTPUT.PUT_LINE('查无此人');
RAISE_APPLICATION_ERROR(-20001, 'Employee not found.');
END;
-- 从键盘获取员工编号
v_employee_id := &employee_id; -- 这里假设变量employee_id已存储用户输入
-- 使用动态SQL尝试查询员工信息
EXECUTE IMMEDIATE '
SELECT first_name, salary
FROM employees
WHERE employee_id = :v_employee_id'
INTO v_first_name, v_salary
USING v_employee_id;
-- 输出查询结果
IF SQLCODE = 0 THEN
DBMS_OUTPUT.PUT_LINE('员工姓名: ' || v_first_name);
DBMS_OUTPUT.PUT_LINE('工资: ' || v_salary);
ELSE
-- 如果查询失败,不会显示具体的错误信息,因为已经捕获了NO_DATA_FOUND异常
NULL;
END IF;
END;
/
```
在这个程序中,我们首先声明了一个`NO_DATA_FOUND`异常处理器,当查询返回没有数据时(即员工不存在),会抛出这个异常,并打印"查无此人"并设置一个自定义的应用错误。然后尝试动态地根据用户输入的员工ID查询数据。如果查询成功(`SQLCODE = 0`),则输出员工姓名和工资;如果查询失败(非`NO_DATA_FOUND`错误),则默认不会显示详细信息。
请注意,实际运行时需要将`&employee_id`替换为实际的变量或者函数,用于接收用户的输入。
阅读全文