powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Вопрос про триггеры - 2
6 сообщений из 6, страница 1 из 1
Вопрос про триггеры - 2
    #34505161
Фотография Евгений Фадеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня возник вот какой вопрос (в доках ответ не нашел, возможно плохо искал): при отработке триггера что в какой момент происходит?
То есть:
- триггер на INSERT: существует ли уже запись для ситуаций BEFORE (думаю еще нет), EACH ROW (не знаю), AFTER (полагаю - да)
- триггер на DELETE: существует ли еще запись для ситуаций BEFORE (думаю еще да), EACH ROW (тоже не знаю), AFTER (полагаю что уже нет)

Под существованием можно понимать возможность увидеть ее либо в DIRTY READ'е, либо путем SELECT'а в этом же триггере.

И еще: в какой момент происходит проверка consistency? То есть ключей и т.п. До, после, вместо? :)
...
Рейтинг: 0 / 0
Вопрос про триггеры - 2
    #34505653
talyi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
документ IBM Informix Guide to SQL
ct1sqna_ct1srna.pdf
страница 317
...
Рейтинг: 0 / 0
Вопрос про триггеры - 2
    #34505775
Фотография Евгений Фадеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
talyiдокумент IBM Informix Guide to SQL
ct1sqna_ct1srna.pdf
страница 317
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Triggers and SPL Routines
You cannot define a trigger in an SPL routine that is called inside a DML (data
manipulation language) statement. Thus, the following statement returns an
error if the sp_items procedure includes the CREATE TRIGGER statement:
INSERT INTO items EXECUTE PROCEDURE sp_items
(The DML statements are listed in “Data Manipulation Statements” on
page 1-10.) SPL variables are not valid in CREATE TRIGGER statements. An
SPL routine called by a trigger cannot perform INSERT, DELETE, or UPDATE
operations on any table or view that is not local to the current database.
See also “Rules for SPL Routines” on page 2-298 for additional restrictions on
SPL routines that are invoked in triggered actions.
Trigger Events
The trigger event specifies what DML statements can initiate the trigger. The
event can be an INSERT, DELETE, or UPDATE operation on the table or view, or
(for IDS tables only) a SELECT operation that manipulates the table. You must
specify exactly one trigger event. Any SQL statement that is an instance of the
trigger event is called a triggering statement.
For each table, you can define only one trigger that is activated by an INSERT
statement and only one trigger that is activated by a DELETE statement. The
same table, however, can have multiple triggers that are activated by UPDATE
or SELECT statements, provided that each trigger specifies a disjunct set of
columns in defining the UPDATE or SELECT event on the table.
The INSTEAD OF trigger replaces the trigger event with a triggered action.
A view can have no more than one INSTEAD OF trigger defined for each type
of event (INSERT, DELETE, or UPDATE). You can, however, define a trigger on
one or more other views, each with its own INSTEAD OF trigger. ♦
You cannot specify a DELETE event if the triggering table has a referential
constraint that specifies ON DELETE CASCADE.
You are responsible for guaranteeing that the triggering statement returns the
same result with and without the trigger action. See also the sections “Action
Clause” on page 2-281 and “Triggered-Action List” on page 2-288.
A triggering statement from an external database server can activate the
trigger.

У меня, судя по всему, плоховато с английским... Где именно ответ на мой вопрос?
...
Рейтинг: 0 / 0
Вопрос про триггеры - 2
    #34505901
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Фадеев
- триггер на INSERT: существует ли уже запись для ситуаций BEFORE (думаю еще нет), EACH ROW (не знаю), AFTER (полагаю - да)
- триггер на DELETE: существует ли еще запись для ситуаций BEFORE (думаю еще да), EACH ROW (тоже не знаю), AFTER (полагаю что уже нет)

Под существованием можно понимать возможность увидеть ее либо в DIRTY READ'е, либо путем SELECT'а в этом же триггере.


документ IBM Informix Guide to SQL
ct1sqna.pdf
страница 326

BEFORE Actions
The list of BEFORE trigger actions execute once before the triggering
statement executes
. Even if the triggering statement does not process
any rows, the database server executes the BEFORE trigger actions.
FOR EACH ROW Actions
After a row of the triggering table is processed , the database server executes
all of the statements of the FOR EACH ROW trigger action list; this cycle is
repeated for every row that the triggering statement processes. (But if the
triggering statement does not insert, delete, update, or select any rows, the
database server does not execute the FOR EACH ROW trigger actions.)
You cannot define FOR EACH ROW actions on tables that have globallydetached
indexes. ♦
The FOR EACH ROW action list of a select trigger is executed once for each
instance of a row. For example, the same row can appear more than once in
the result of a query joining two tables. For more information on FOR EACH
ROW actions, see “Guaranteeing Row-Order Independence” on page 2-283.♦
AFTER Actions
The specified set of AFTER trigger actions executes once after the action of the
triggering statement is complete
. If the triggering statement does not process
any rows, the AFTER trigger actions still execute.

Евгений Фадеев

И еще: в какой момент происходит проверка consistency? То есть ключей и т.п. До, после, вместо? :)

IMHO, это зависит, собственно, как раз от "ключей и т.п.". См.
Код: plaintext
SET [CONSTRAINTS|INDEXES|TRIGGERS]
...
Рейтинг: 0 / 0
Вопрос про триггеры - 2
    #34509864
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений ФадеевСегодня возник вот какой вопрос (в доках ответ не нашел, возможно плохо искал): при отработке триггера что в какой момент происходит?
То есть:
- триггер на INSERT: существует ли уже запись для ситуаций BEFORE (думаю еще нет), EACH ROW (не знаю), AFTER (полагаю - да)
- триггер на DELETE: существует ли еще запись для ситуаций BEFORE (думаю еще да), EACH ROW (тоже не знаю), AFTER (полагаю что уже нет)
Под существованием можно понимать возможность увидеть ее либо в DIRTY READ'е, либо путем SELECT'а в этом же триггере.
На интуитивном уровне вы все правильно понимаете и предполагаете :)
Евгений ФадеевИ еще: в какой момент происходит проверка consistency? То есть ключей и т.п. До, после, вместо? :)
Будет полезно почитать о проверке целостности (в том числе и отложенной до конца транзакции)
см. "set constraints ... immediate / deferred"
"SET Transaction Mode" page 2-725 "IBM Informix Guide to SQL. Syntax" (Version 9.4)
...
Рейтинг: 0 / 0
Вопрос про триггеры - 2
    #34510832
Фотография Евгений Фадеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasilisНа интуитивном уровне вы все правильно понимаете и предполагаете :)Ну, у меня интуиция подкреплена определенным опытом :))

vasilisБудет полезно почитать о проверке целостности (в том числе и отложенной до конца транзакции)
см. "set constraints ... immediate / deferred"
"SET Transaction Mode" page 2-725 "IBM Informix Guide to SQL. Syntax" (Version 9.4)Ок, спасибо за наводку. Почитаю.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Вопрос про триггеры - 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]