我需要编写一个 PLSQL 块,该块从 A 列中的某个记录复制值,并为同一表 A 中的另一条记录更新相同 A 列中的复制值。此外,这些值将插入日志中表表 B.
例如: 表 **emp ** 有列:emp_id、salary、shift
表emp1有列:emp_id、salary、shift并且是空的。
在 EMP_ID=2 的表 emp 中,根据 SHIFT,SALARY 应与 EMP_ID=1 相同。 所以表格应该如下所示:
与此同时,我们希望在检查此类记录是否不存在后将更改记录在表emp1中。 所以 emp1 表在更新后应该如下所示:
到目前为止,我有下面的 PLSQL 块,它使用游标正确更新 emp 表,但插入查询正在循环表 emp 中的所有数据,并在表 emp1.
中插入重复值声明 游标 c_emp 是 选择 e2.emp_id、e1.shift、e1.salary 来自 emp e1, emp e2 其中 e1.shift = e2.shift 和 e1.emp_id = 1 和 e2.emp_id = 2 和 e1.salary <> e2.salary;
开始 对于 c_emp 循环中的 r_emp
update emp
set salary = r_emp.salary
where shift = r_emp.shift;
insert into emp1 (emp_id,salary,shift)
(select 2,r_emp.salary,r_emp.shift
from emp
where not exists (select * from emp1
where emp1.emp_id = 2
and emp1.shift = r_emp.shift));
结束循环;
结束;
这个 PLSQL 块在运行时按预期更新表 emp 但在表 emp1 中插入是重复的,如下所示,这是错误的。
如何编辑此查询?