创建数据库触发器以检查是否在一个日期上添加了多个记录?

CREATE OR REPLACE TRIGGER POSITION_NUMber
BEFORE UPDATE OR INSERT OR DELETE ON APPLIES
  DeclARE
  PRAGMA AUTONOMOUS_TRANSactION;
  NUMber_OF_POSITIONS NUMber;

  BEGIN

  SELECT count(pnumber) INTO NUMber_OF_POSITIONS  
  FROM APPLIES WHERE anumber = :NEW.anumber;
  IF( NUMber_OF_POSITIONS > 2 AND count(APPDATE) > 2 )
 THEN
  RAISE_APPLICATION_ERROR(-20000,'an Employee cannot apply for 
  more than two positions');
   END IF;
   END;
  /

我试图创建一个触发器,如果​​申请人在同一天申请两个以上职位,该触发器将关闭,但是我不确定我将如何实现其日期方面。下面是一组关系方案

创建数据库触发器以检查是否在一个日期上添加了多个记录?

yfy332189 回答:创建数据库触发器以检查是否在一个日期上添加了多个记录?

您可以使用TRUNC函数删除时间部分,然后查看应用程序日期是否与今天的日期匹配,而与时间无关。

此外,也不需要自主事务编译。您没有执行任何DML。

CREATE OR REPLACE TRIGGER position_number
   BEFORE UPDATE OR INSERT OR DELETE
   ON applies
DECLARE
   number_of_positions   NUMBER;
BEGIN
   SELECT COUNT (pnumber)
     INTO number_of_positions
     FROM applies
    WHERE anumber = :new.anumber AND TRUNC (appdate) = TRUNC (SYSDATE);

   IF number_of_positions > 2
   THEN
      raise_application_error (
         -20000,'An Employee cannot apply for more than two positions on the same day');
   END IF;
END;
/
本文链接:https://www.f2er.com/3129417.html

大家都在问