Oracle 如何使用触发器更新2个表

Oracle 如何使用触发器更新2个表,oracle,plsql,triggers,Oracle,Plsql,Triggers,我有两张桌子 LVU数据 它有以下字段: emp_name tot_days guru 18 emp_name From_date to_date no_of_days remaining_days guru 02/05/2012 03/05/2012 2 留下数据 它有以

我有两张桌子

  • LVU数据
它有以下字段:

              emp_name            tot_days 
                guru                18 
       emp_name   From_date      to_date       no_of_days   remaining_days 
           guru   02/05/2012     03/05/2012         2 
  • 留下数据
它有以下字段:

              emp_name            tot_days 
                guru                18 
       emp_name   From_date      to_date       no_of_days   remaining_days 
           guru   02/05/2012     03/05/2012         2 
在第二个表中,如果插入数据,则将自动计算
天数
(从日期到日期-从日期)+1

在这里,我需要编写触发器来更新剩余天数列

在所有
emp_name
的第一个表中,
tot_days
是18天,因此在第二个表中,每当插入记录时,
剩余的_days
应该这样计算

remaining_days := tot_days - no_of_days 
该(计算)值应在第一个表的
tot_days
列(
lv_data
)中更新

示例:

        emp_name tot_days 
          guru     18 
  • 留下数据

    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个表。有人能帮我通过触发器更新这两个表吗?

在表上有一个插入前触发器,它将在插入前设置记录

需要注意的几件事:

  • 您的数据模型没有行的唯一标识符
  • 我认为你的“没有天数”计算是不对的

用于测试的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
  ); 
INSERT INTO lv_data
VALUES      (1,
             'sathya',
             18);

INSERT INTO LEAVE_DATA
VALUES     ('1',
            'sathya',
            SYSDATE,
            SYSDATE + 2,
            NULL,
            NULL); 
用于测试的DML:

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
  ); 
INSERT INTO lv_data
VALUES      (1,
             'sathya',
             18);

INSERT INTO LEAVE_DATA
VALUES     ('1',
            'sathya',
            SYSDATE,
            SYSDATE + 2,
            NULL,
            NULL);