【问题标题】:Trigger to enter new record触发输入新记录
【发布时间】:2018-10-24 16:45:31
【问题描述】:

我有一个 sql 在员工合同到期前 60 天在通知表中插入记录。

         INSERT INTO notification (name)
    SELECT employee.employee_name
    from EMPLOYEE, employee_info 
    where EMPLOYEE_INFO.EMPLOYEE_NAME(+) =EMPLOYEE.EMPLOYEE_NAME             

AND (LEAVE_TYPE ='Vacation'
             or LEAVE_TYPE = 'Personal')
     group by  EMPLOYEE.EMPLOYEE_NAME, EMPLOYEE.CONTRACT_END_PERIOD, EMPLOYEE.TOTAL_VACATION_LEAVE, EMPLOYEE_INFO.LEAVE_TYPE
      HAVING sum(days_taken) > 0
     and TO_DATE(contract_end_period,'DD-MM-YYYY') < TO_DATE (SYSDATE,'DD-MM-YYYY') + 60
); 

但是,当新员工合同到期时,我只想将新记录插入到通知表中。

我目前得到的是新旧条目的插入(因为我使用的是页面加载 sql),这会导致表中出现重复。

【问题讨论】:

    标签: oracle oracle11g oracle-apex


    【解决方案1】:
    INSERT INTO notification (name)
        SELECT employee.employee_name
        from EMPLOYEE, employee_info 
        where EMPLOYEE_INFO.EMPLOYEE_NAME(+) =EMPLOYEE.EMPLOYEE_NAME             
        AND (LEAVE_TYPE ='Vacation' or LEAVE_TYPE = 'Personal')
     -> AND employee.employee_name NOT IN (select notification.name from notification) <-
         group by  EMPLOYEE.EMPLOYEE_NAME, EMPLOYEE.CONTRACT_END_PERIOD, EMPLOYEE.TOTAL_VACATION_LEAVE, EMPLOYEE_INFO.LEAVE_TYPE
          HAVING sum(days_taken) > 0
         and TO_DATE(contract_end_period,'DD-MM-YYYY') < TO_DATE (SYSDATE,'DD-MM-YYYY') + 60
    ); 
    

    您需要将查询限制为该表中尚不存在的人。上面给出了一个例子:"-> AND employee.employee_name NOT IN (select notification.name from notification) 标记。

    【讨论】:

      猜你喜欢
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2014-06-14
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      相关资源
      最近更新 更多