需要 PLSQL 块来更新表 A 并在表 B 中插入相同的值

问题描述 投票:0回答:0

我需要编写一个 PLSQL 块,该块从 A 列中的某个记录复制值,并为同一表 A 中的另一条记录更新相同 A 列中的复制值。此外,这些值将插入日志中表表 B.

例如: 表 **emp ** 有列:emp_id、salary、shift

EMP_ID 薪资变动

1 100

1 200 乙

2 400

2 500 乙

emp1有列:emp_id、salary、shift并且是空的。

在 EMP_ID=2 的表 emp 中,根据 SHIFT,SALARY 应与 EMP_ID=1 相同。 所以表格应该如下所示:

EMP_ID 薪资变动

1 100

1 200 乙

*2 100

2 200 乙*

与此同时,我们希望在检查此类记录是否不存在后将更改记录在表emp1中。 所以 emp1 表在更新后应该如下所示:

EMP_ID 薪资变动

2 100

2 200 乙

到目前为止,我有下面的 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 中插入是重复的,如下所示,这是错误的。

EMP_ID 薪资变动

2 100

2 100

2 100

2 100

2 200 乙

2 200 乙

2 200 乙

2 200 乙

如何编辑此查询?

sql plsql plsqldeveloper insert-update
© www.soinside.com 2019 - 2024. All rights reserved.