Назначение разделов оператора «До» и «После» сложного триггера - PullRequest
0 голосов
/ 22 мая 2018

Насколько я понимаю, раздел «Перед утверждением» составного триггера используется для инициализации заполнителей, которые не нужно использовать: NEW или: OLD для инициализации.Пример можно увидеть здесь:

CREATE OR REPLACE TRIGGER zipcode_compound
    FOR INSERT OR UPDATE
    ON zipcode
    COMPOUND TRIGGER
    v_date   DATE;
    v_user   VARCHAR2 (30);

    BEFORE STATEMENT
    IS
    BEGIN
        v_date := SYSDATE;
        v_user := USER;
    END BEFORE STATEMENT;
END zipcode_compound;

Также из того, что я понимаю, секция After Statement составного триггера используется для обработки ошибок изменяющейся таблицы.

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

Правильно ли мое понимание?Если нет, пожалуйста, укажите, что я не понимаю.

1 Ответ

0 голосов
/ 23 мая 2018

Прежде чем создавать compound trigger, вы должны подумать о том, что вы хотите сделать.Каждый compound trigger может быть разделен на несколько triggers.Если у вас есть triggers на table, то стоит подумать о compound trigger, чтобы объединить эти функции в один trigger.

Вот шаблон по умолчанию, который Toad создает для Compound triggers - объяснено довольно хорошо:

COMPOUND TRIGGER
    tmpVar NUMBER;
  BEFORE STATEMENT IS
  BEGIN
    begin
      -- we cannot reference :new or :old in the before statement section
      tmpVar := 0;
    EXCEPTION
      WHEN OTHERS THEN
       -- Consider logging the error and then re-raise
      RAISE;
    END;
  END BEFORE STATEMENT;

  BEFORE EACH ROW IS
  BEGIN
    begin
      -- we can read or write to :new or :old in the before each row section
      tmpVar := 0;
    EXCEPTION
      WHEN OTHERS THEN
       -- Consider logging the error and then re-raise
      RAISE;
    END;
  END BEFORE EACH ROW;

  AFTER EACH ROW IS
  BEGIN
    begin
      tmpVar := 0;
      -- we can read, but not write to :new or :old in the after each row section
    EXCEPTION
      WHEN OTHERS THEN
       -- Consider logging the error and then re-raise
      RAISE;
    END;
  END AFTER EACH ROW;

  AFTER STATEMENT IS
  BEGIN
    begin
      -- we cannot reference :new or :old in the after statement section
      tmpVar := 0;
    EXCEPTION
      WHEN OTHERS THEN
       -- Consider logging the error and then re-raise
      RAISE;
    END;
  END AFTER STATEMENT;
END MyTrigger;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...