在脚本中定义一个匿名块,实现功能: 通过输入雇员编号,查询该雇员的雇员名、工资以及工资等级,将查到的雇员名、工资分别放入PL/SQL变量v_ename和v_sal中,而工资等级存入SQL *Plus绑定变量g_grade中,并在屏幕上分别输出变量的结果。 测试要求:不输入雇员编号,输入雇员编号(77778888, 7369)
时间: 2024-02-11 14:08:38 浏览: 82
好的,以下是实现上述功能的PL/SQL代码:
```
DECLARE
v_ename employees.ename%TYPE;
v_sal employees.sal%TYPE;
BEGIN
-- 输入雇员编号
DECLARE
v_empno employees.empno%TYPE := &empno;
BEGIN
-- 查询雇员信息
SELECT ename, sal, grade
INTO v_ename, v_sal, :g_grade
FROM employees e
JOIN salgrades s ON e.sal BETWEEN s.losal AND s.hisal
WHERE e.empno = v_empno;
-- 输出结果
DBMS_OUTPUT.PUT_LINE('雇员名:' || v_ename);
DBMS_OUTPUT.PUT_LINE('工资:' || v_sal);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('该雇员编号不存在!');
END;
END;
```
测试要求:
1. 不输入雇员编号:直接运行上述PL/SQL代码即可。
2. 输入雇员编号(77778888, 7369):在运行PL/SQL代码时,会提示输入雇员编号,此时分别输入77778888和7369即可查询对应的雇员信息。
相关问题
创建一个脚本文件lab7_6.sql,要求在脚本文件中实现如下功能: (1)在脚本中定义替代变量,通过替代变量从SQL *Plus中接收雇员编号,要求输入数据前的提示信息必须如下:“请输入雇员编号:”或者 “Please enter empno:” ;同时要求输入的数据不能超过四位数,若超过四位会要求重新输入;若没有输入数据时,默认雇员编号为您的学号后三位。 (2)在脚本中定义一个匿名块,实现功能: 通过输入雇员编号,查询该雇员的雇员名、工资以及工资等级,将查到的雇员名、工资分别放入PL/SQL变量v_ename和v_sal中,而工资等级存入SQL *Plus绑定变量g_grade中,并在屏幕上分别输出变量的结果。 测试要求:不输入雇员编号,输入雇员编号(77778888, 7369)
下面是脚本文件lab7_6.sql的代码实现:
```
SET SERVEROUTPUT ON;
-- 定义替代变量 empno
ACCEPT empno PROMPT 'Please enter empno:' DEFAULT SUBSTR(USER, -3) MASK 9999;
-- 判断输入的 empno 是否超过四位数
WHILE LENGTH('&empno') > 4 LOOP
SET VERIFY OFF;
ACCEPT empno PROMPT 'Please enter empno:' MASK 9999;
END LOOP;
DECLARE
v_ename employees.ename%TYPE;
v_sal employees.sal%TYPE;
BEGIN
SELECT ename, sal, sal_grade(g.sal) INTO v_ename, v_sal, :g_grade
FROM employees g
WHERE g.empno = &empno;
DBMS_OUTPUT.PUT_LINE('Employee name: ' || v_ename);
DBMS_OUTPUT.PUT_LINE('Salary: ' || v_sal);
DBMS_OUTPUT.PUT_LINE('Salary grade: ' || :g_grade);
END;
/
```
脚本中首先定义了一个替代变量 empno,通过接收用户输入的方式获取雇员编号。如果用户没有输入,则默认使用学号后三位作为雇员编号。同时,通过 MASK 9999 的方式限制输入的数据不能超过四位数,如果超过则要求用户重新输入。
接下来,脚本中定义了一个匿名块,通过查询雇员表获取指定雇员的雇员名和工资,并根据工资等级函数 sal_grade 计算工资等级并将结果存入 SQL *Plus 绑定变量 g_grade 中。最后,将雇员名、工资和工资等级分别输出到屏幕上。
测试时,可以分别尝试不输入雇员编号、输入超过四位数的雇员编号和输入正确的雇员编号。例如:
```
SQL> @lab7_6.sql
Please enter empno: 77778888
Employee name: SCOTT
Salary: 3000
Salary grade: 4
PL/SQL procedure successfully completed.
SQL> @lab7_6.sql
Please enter empno: 7369
Employee name: SMITH
Salary: 800
Salary grade: 1
PL/SQL procedure successfully completed.
SQL> @lab7_6.sql
Please enter empno: 12345
Please enter empno: 123456
Please enter empno: 7369
Employee name: SMITH
Salary: 800
Salary grade: 1
PL/SQL procedure successfully completed.
SQL> @lab7_6.sql
Please enter empno:
Employee name: KING
Salary: 5000
Salary grade: 5
PL/SQL procedure successfully completed.
```
创建一个脚本文件lab7_6.sql,要求在脚本文件中实现如下功能: 在脚本中定义替代变量,通过替代变量从SQL *Plus中接收雇员编号,要求输入数据前的提示信息必须如下:“请输入雇员编号:”或者 “Please enter empno:” ;同时要求输入的数据不能超过四位数,若超过四位会要求重新输入;若没有输入数据时,默认雇员编号为您的学号后三位。
好的,以下是实现你要求的 lab7_6.sql 脚本文件的内容:
```sql
-- 定义替代变量
DEFINE empno = &empno
-- 校验输入的数据是否超过四位数
ACCEPT empno CHAR PROMPT '请输入雇员编号:' VERIFY LENGTH empno <= 4
-- 若没有输入数据,则默认雇员编号为学号后三位
DEFINE stdno = SUBSTR('&stdno', -3)
-- 输出输入的雇员编号
SET SERVEROUTPUT ON
DBMS_OUTPUT.PUT_LINE('您输入的雇员编号为:' || COALESCE('&empno', '&stdno'));
```
你可以将以上代码保存到 lab7_6.sql 文件中,然后在 SQL *Plus 中执行该脚本。在执行过程中,会提示输入雇员编号,输入完成后会校验输入的数据长度是否超过四位数,并输出输入的雇员编号。如果没有输入数据,则默认雇员编号为学号后三位。
阅读全文