Порядок срабатывания перед запуском триггеров в Oracle [duplicate]

public class printer {

    public static void main(String[] args) {
        String a[] = new String[4];
        Scanner sc = new Scanner(System.in);
        System.out.println("enter the data");
        for (int i = 0; i < 4; i++) {
            a[i] = sc.nextLine();
        }
        System.out.println("the entered data is");
        for (String i : a) {
            System.out.println(i);
        }
      }
    }
1
задан meshy 29 July 2013 в 21:28
поделиться

3 ответа

Да. Триггеры являются частью заявления. Хотя вы не можете быть полностью уверены в *) порядка, в котором выполняются несколько триггеров в одном и том же операторе, вы можете быть уверены, что они выполняются, когда выполняется сама инструкция. Таким образом, к моменту шага 2 запускаются все триггеры обновления первого шага.

*) Собственно, порядок по умолчанию:

  1. Уровень выписки перед триггерами
  2. Уровень строки перед триггерами
  3. Уровень строки после триггеров
  4. Уровень выписки после триггеров

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

1
ответ дан GolezTrol 25 August 2018 в 14:49
поделиться

Если вам нужно быть уверенным в порядке выполнения триггера, вы можете указать этот порядок при создании триггера.

Это делается с помощью опций FOLLOWS ... и PRECEEDS ... инструкции create trigger:

Подробнее в руководстве: http://docs.oracle. com / cd / E11882_01 / appdev.112 / e25519 / create_trigger.htm # CJAEJAFB

FOLLOWS | PRECEDES

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

Используйте FOLLOWS, чтобы указать, что создаваемый триггер должен запускаться после указанных триггеров. Вы можете указать FOLLOWS для обычного триггера или для триггера прямого пересечения.

Используйте PRECEDES, чтобы указать, что создаваемый триггер должен срабатывать перед указанными триггерами. Вы можете указать PRECEDES только для триггера обратного пересечения.

2
ответ дан a_horse_with_no_name 25 August 2018 в 14:49
поделиться

Я не вижу необходимости во всех этих таблицах, и поэтому не нужно запускать триггер.

Почему вы не просто используете код причины черного списка в таблице клиентов? Цель таблицы черного списка неясна, так как кажется, что она не добавляет данных и просто повторяет данные из таблицы клиентов с дополнительным столбцом идентификатора?

Или, если вам нужны несколько кодов причин, просто используйте таблицу blacklist_reason, которая ссылается на идентификатор клиента и код причины - я не думаю, что вам даже нужен столбец с черным списком в таблице клиентов.

1
ответ дан David Aldridge 25 August 2018 в 14:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: