Создание базы данных Триггер, который проверяет, было ли добавлено более одной записи на дату? - PullRequest
0 голосов
/ 10 ноября 2019
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;
  /

Я пытаюсь создать триггер, который сработает, если заявитель подаст заявку на более чем две позиции в один и тот же день, но я не уверен, как бы я реализовал сторону даты. Ниже приведен набор реляционных схем

enter image description here

1 Ответ

0 голосов
/ 10 ноября 2019

Вы можете использовать функцию 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;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...