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

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

И еще: в какой момент происходит проверка consistency? То есть ключей и т.п. До, после, вместо? :)
...
Рейтинг: 0 / 0
04.05.2007, 16:15
    #34505653
talyi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про триггеры - 2
документ IBM Informix Guide to SQL
ct1sqna_ct1srna.pdf
страница 317
...
Рейтинг: 0 / 0
04.05.2007, 16:43
    #34505775
Евгений Фадеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про триггеры - 2
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
04.05.2007, 17:30
    #34505901
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про триггеры - 2
Евгений Фадеев
- триггер на 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
07.05.2007, 15:09
    #34509864
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про триггеры - 2
Евгений ФадеевСегодня возник вот какой вопрос (в доках ответ не нашел, возможно плохо искал): при отработке триггера что в какой момент происходит?
То есть:
- триггер на 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
07.05.2007, 19:12
    #34510832
Евгений Фадеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про триггеры - 2
vasilisНа интуитивном уровне вы все правильно понимаете и предполагаете :)Ну, у меня интуиция подкреплена определенным опытом :))

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


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