编写一个PL/SQL匿名块,根据用户输入的工资,获得该工资的雇员姓名(此处要求返回结果只能一行,找不到数据行和查询到多行的都属于异常)。按照下面步骤完成:在匿名块中要求如下: 如果正确的查询到1行结果,向MESSAGES表写入获得的该工资的雇员姓名及其工资数额,写入的字符串格式如后面的测试表。 如果查询的结果多于1行,则调用适当的异常处理。在异常处理器中,向MESSAGES表写入一条信息“有多个雇员工资都为***。” 如果没有查询到任何结果,则调用适当的异常处理。在异常处理器中,向MESSAGES表写入一条信息“没有雇员工资为***。” 加入其他异常处理,在异常处理器中,撤销之前的操作,并向MESSAGES表写入“其他错误发生。” 分别输入(10000,3000,6000)测试该匿名块。 在测试后查询MESSAGE表,其表格结果应为: RESULTS 你的名字10000 有多个雇员工资都为3000 没有雇员工资为6000
时间: 2024-03-10 17:45:49 浏览: 61
新建一个雇员类,它的数据成员有雇员代号,年龄,工资,性别, 姓名,输入雇员资料方法,打印雇员资料方法。
好的,下面是PL/SQL匿名块的代码:
```
DECLARE
v_salary NUMBER := &input_salary;
v_name VARCHAR2(100);
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM employees
WHERE salary = v_salary;
IF v_count = 1 THEN
SELECT first_name || ' ' || last_name INTO v_name
FROM employees
WHERE salary = v_salary;
INSERT INTO messages(message)
VALUES('你的名字' || v_name || v_salary);
ELSIF v_count > 1 THEN
INSERT INTO messages(message)
VALUES('有多个雇员工资都为' || v_salary);
ELSE
INSERT INTO messages(message)
VALUES('没有雇员工资为' || v_salary);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
INSERT INTO messages(message)
VALUES('其他错误发生.');
COMMIT;
END;
```
请注意,这个匿名块使用了`&input_salary`来接受用户输入的工资数额。在执行代码之前,会要求用户输入一个工资数额。如果用户输入的不是数字,程序会抛出一个错误。如果用户输入的是数字,程序会根据该工资数额在`employees`表中查找雇员信息。
如果查询到的结果只有一行,程序会将该雇员的姓名和工资数额存储到`messages`表中。
如果查询到的结果超过一行,程序会存储一条信息到`messages`表中,说明有多个雇员工资都为该工资数额。
如果查询不到任何结果,程序会存储一条信息到`messages`表中,说明没有雇员工资为该工资数额。
如果程序遇到任何其他错误,它会撤销之前的操作,并存储一条信息到`messages`表中,说明发生了其他错误。
最后,程序会提交所有的更改,并结束执行。
阅读全文