如何使用触发器
问题描述:
我有2个表,如何使用触发器
- lv_data,更新2台
它具有以下字段,
emp_name tot_days
guru 18
- leave_data
它具有下列字段,
emp_name From_date to_date no_of_days remaining_days
guru 02/05/2012 03/05/2012 2
在如果该数据被插入时,no_of_days
将自动计算(from to_date - From_date)+1
在这里,我需要写触发更新remaining_days列第二表,
在第一张表中,所有emp_name
,tot_days
为18天,因此在第二张表中,每当插入记录时,remaining_days
应该像这样计算
remaining_days := tot_days - no_of_days
而这个(计算值)的值应在第一个表(lv_data
)tot_days
列被更新,
样品实施例:
emp_name tot_days
guru 18
-
leave_data
emp_name From_date to_date no_of_days remaining_days guru 02/05/2012 03/05/2012 2 16
现在应该更新第一张表,
emp_name tot_days
guru 16
所以我需要更新2个表格。有人可以帮助我通过触发更新这两张表吗?
+0
答
有一个插入前触发器在桌子上,将其插入
几点需要注意前创下的纪录:
- 你的数据模型不具有唯一标识符的行
- 我不认为你的“no_of_days”计算是正确的。
CREATE OR replace TRIGGER leave_data_before_insert
BEFORE INSERT ON LEAVE_DATA
FOR EACH ROW
DECLARE
CURSOR c_lv_data(
p_emp_id IN lv_data.id%TYPE) IS
SELECT tot_days
FROM lv_data
WHERE id = p_emp_id;
v_tot_days NUMBER;
BEGIN
OPEN c_lv_data(:new.id);
FETCH c_lv_data INTO v_tot_days;
:new.no_of_days := (:new.from_date - :new.TO_DATE) + 1;
:new.remaining_days := v_tot_days - :new.no_of_days;
UPDATE lv_data
SET tot_days = :new.remaining_days
WHERE id = :new.id;
CLOSE c_lv_data;
END;
DDL用于测试:
CREATE TABLE lv_data
(
id NUMBER,
emp_name VARCHAR2(240),
tot_days NUMBER
);
CREATE TABLE leave_data
(
id NUMBER,
emp_name VARCHAR2(240),
from_date DATE,
to_date DATE,
no_of_days NUMBER,
remaining_days NUMBER
);
DML用于测试:
INSERT INTO lv_data
VALUES (1,
'sathya',
18);
INSERT INTO LEAVE_DATA
VALUES ('1',
'sathya',
SYSDATE,
SYSDATE + 2,
NULL,
NULL);