写一个PL/SQL 块,输入两个员工的编号,实现任意两个员工的工资互换。
时间: 2024-10-19 16:13:59 浏览: 25
在PL/SQL中,你可以创建一个匿名块(anonymous block)来实现这个功能。假设我们有一个名为`EMPLOYEE`的表,其中有`ID`(员工编号)和`SALARY`(工资)字段,我们可以编写如下的代码:
```plsql
DECLARE
-- 定义员工编号变量
emp_id_1 NUMBER,
emp_id_2 NUMBER,
-- 存储工资的临时变量
salary_temp NUMBER;
BEGIN
-- 提示用户输入员工编号
DBMS_OUTPUT.PUT_LINE('请输入第一个员工的编号:');
LOOP
EXIT WHEN USER_INPUT.getString() IS NOT NULL; -- 检查是否输入了非空值
END LOOP;
emp_id_1 := USER_INPUT.getNumber(); -- 获取第一个员工编号
DBMS_OUTPUT.PUT_LINE('请输入第二个员工的编号:');
LOOP
EXIT WHEN USER_INPUT.getString() IS NOT NULL;
END LOOP;
emp_id_2 := USER_INPUT.getNumber(); -- 获取第二个员工编号
-- 验证员工编号是否存在
IF EXISTS (SELECT * FROM EMPLOYEE WHERE ID = emp_id_1) AND EXISTS (SELECT * FROM EMPLOYEE WHERE ID = emp_id_2) THEN
-- 从数据库中获取初始工资
SELECT SALARY INTO salary_temp FROM EMPLOYEE WHERE ID = emp_id_1;
-- 更新工资
UPDATE EMPLOYEE SET SALARY = salary_temp WHERE ID = emp_id_1;
UPDATE EMPLOYEE SET SALARY = (SELECT SALARY FROM EMPLOYEE WHERE ID = emp_id_2) WHERE ID = emp_id_1;
-- 另一员工工资也更新
UPDATE EMPLOYEE SET SALARY = salary_temp WHERE ID = emp_id_2;
UPDATE EMPLOYEE SET SALARY = (SELECT SALARY FROM EMPLOYEE WHERE ID = emp_id_1) WHERE ID = emp_id_2;
DBMS_OUTPUT.PUT_LINE('工资交换完成!');
ELSE
DBMS_OUTPUT.PUT_LINE('其中一个员工编号无效!');
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('发生错误:'|| SQLERRM);
END;
/
```
请记得替换`EMPLOYEE`表名和字段名称,以及上述代码中的`USER_INPUT.getString()`和`USER_INPUT.getNumber()`部分,这取决于实际环境中的输入获取方式。
阅读全文