我必须scl_tb
在其中更新薪水列。
但是我的问题是,在更新薪水列数据复制时,应该在另一个表中进行upd_tb
,如下所示
SELECT * FROM scl_tb;
id Name salary
-----------------
1 A 100
2 B 200
3 C 400
4 D 700
需要如下输出
SELECT * FROM up_tb;
SI_NO id Name new_sal old_sal ind
----------------------------------------
1 1 A 0 100 N
2 1 A 150 100 U
1 2 B 220 200 U
2 2 B 0 220 N
3 1 A 400 150 U
1 3 C 410 400 U
我们如何编写SQL statement
或使用它TRIGGER
?
如果这两种方法或任何一种方法也都给出了解决方案。
首先,您在up_tb中的数据存在问题。在第二行中,old_sal
应为0。因为好像我理解正确,old_sal
列包含雇员的先前薪水或其他任何东西。因此,该表应如下所示。
SI_NO id Name new_sal old_sal ind
--------------------------------------------------
1 1 A 0 100 N
2 1 A 150 0 (not 100) U
因此,解决方案将是一个简单的行触发器。
CREATE OR REPLACE TRIGGER update_table
AFTER UPDATE OR INSERT ON scl_tb
FOR EACH ROW
DECLARE
CURSOR c_up_tb IS SELECT COUNT(*) cnt FROM up_tb ut WHERE ut.id = :NEW.id;
v_cnt c_up_tb%rowtype;
v_status up_tb.ind%type;
BEGIN
v_status := 'U';
IF inserting THEN
v_status := 'N';
END IF;
OPEN c_up_tb;
FETCH c_up_tb INTO v_cnt;
CLOSE c_up_tb;
INSERT INTO up_tb VALUES ( v_cnt.cnt+1, :NEW.id, :NEW.name, :NEW.salary, NVL(:OLD.salary, 0), v_status);
END;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句