在匿名块中完成如下要求(要求分别用if语句和case语句完成): 输入雇员编号,通过雇员编号获得其工资,根据工资等级不同,计算该员工的奖金,并设置该员工的奖金。 如果该雇员工资小于1000美元,则该雇员的奖金为工资的10%。 如果该雇员工资在1000~2000美元之间,则该雇员的奖金为工资的15%。 如果该雇员工资大于2000美元,则该雇员的奖金为工资的20%。 如果该雇员工资为NULL,则该雇员的奖金为0。 最后要求提交事务。(建议测试阶段不要提交事务,确定没有错误再提交)
时间: 2024-02-11 12:09:48 浏览: 21
使用if语句的代码如下:
```
DECLARE
v_empno EMPLOYEES.EMPLOYEE_ID%TYPE;
v_salary EMPLOYEES.SALARY%TYPE;
v_bonus EMPLOYEES.COMMISSION_PCT%TYPE;
BEGIN
-- 输入雇员编号
v_empno := &empno;
-- 通过雇员编号获得其工资
SELECT SALARY
INTO v_salary
FROM EMPLOYEES
WHERE EMPLOYEE_ID = v_empno;
-- 根据工资等级不同,计算该员工的奖金,并设置该员工的奖金
IF v_salary < 1000 THEN
v_bonus := v_salary * 0.1;
ELSIF v_salary >= 1000 AND v_salary <= 2000 THEN
v_bonus := v_salary * 0.15;
ELSIF v_salary > 2000 THEN
v_bonus := v_salary * 0.2;
ELSE
v_bonus := 0;
END IF;
-- 更新员工的奖金
UPDATE EMPLOYEES
SET COMMISSION_PCT = v_bonus
WHERE EMPLOYEE_ID = v_empno;
-- 提交事务
COMMIT;
END;
```
使用case语句的代码如下:
```
DECLARE
v_empno EMPLOYEES.EMPLOYEE_ID%TYPE;
v_salary EMPLOYEES.SALARY%TYPE;
v_bonus EMPLOYEES.COMMISSION_PCT%TYPE;
BEGIN
-- 输入雇员编号
v_empno := &empno;
-- 通过雇员编号获得其工资
SELECT SALARY
INTO v_salary
FROM EMPLOYEES
WHERE EMPLOYEE_ID = v_empno;
-- 根据工资等级不同,计算该员工的奖金,并设置该员工的奖金
v_bonus :=
CASE
WHEN v_salary < 1000 THEN v_salary * 0.1
WHEN v_salary >= 1000 AND v_salary <= 2000 THEN v_salary * 0.15
WHEN v_salary > 2000 THEN v_salary * 0.2
ELSE 0
END;
-- 更新员工的奖金
UPDATE EMPLOYEES
SET COMMISSION_PCT = v_bonus
WHERE EMPLOYEE_ID = v_empno;
-- 提交事务
COMMIT;
END;
```