Страница 1 из 1

Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Добавлено: 11 дек 2008, 20:42
_SRG_
Здравствуйте.

Имеется триггер TEST_TRIGGER в БД под FB2.0.

UPDATE RDB$TRIGGERS SET RDB$SYSTEM_FLAG = 1 WHERE RDB$TRIGGER_NAME = 'TEST_TRIGGER';

COMMIT;

Возможно ли после такой манипуляции вернуть SYSTEM_FLAG = NULL или 0???

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Добавлено: 12 дек 2008, 10:33
kdv
сделай b/r базе и пересоздай триггер, если он исчезнет. Вообще нефиг было "эксперименты" проводить. Спросил бы сначала...

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Добавлено: 12 дек 2008, 11:18
WildSery
kdv писал(а):сделай b/r базе и пересоздай триггер, если он исчезнет.
Эээ. А почему "если"? Я думал, по-любому исчезнет.

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Добавлено: 12 дек 2008, 12:48
_SRG_
kdv писал(а):сделай b/r базе и пересоздай триггер, если он исчезнет. Вообще нефиг было "эксперименты" проводить. Спросил бы сначала...
Спасибо за совет, но потребность в таких экспериментах действительно была. Опишу ситуацию более подробно:

Имеется UDF библиотека, которая содержит функцию для извлечения BLOB поля и сохранение этого содержимого в файл. На таблицу RDB$PROCEDURES вешаем триггер AFTER INSERT/UPDATE/DELETE который вызывает UDF функцию и передает ей RDB$PROCEDURE_SOURCE (соответсвенно для извлечения тела процедуры в файл). В IBExpert создаем новую процедуру - на сервере появляется файл с телом процедуры, модифицируем процедуру - на сервере файл с телом процедуры обновляется, т.е. все происходит как и хотелось. Ок.

Далее - создаем sql скрипт который создает новую процедуру и накатываем его на БД с помощью ibescript - на сервере ничего не выгрузилось, хотя процедура в БД появилась (процедуру удалили).

А вот теперь и начались эксперименты: установливаем RDB$SYSTEM_FLAG = 1 для триггера который выгружает тело процедуры. Накатываем скрипт создания процедуры с помощью ibescript и на стороне сервера появляется файл с телом процедуры...

Как можно объяснить это? Как именно накатывает ibescript sql скрипты?

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Добавлено: 12 дек 2008, 13:23
dimitr
а кто вообще сказал, что триггеры на системных таблицах должны работать?

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Добавлено: 12 дек 2008, 13:29
_SRG_
dimitr писал(а):а кто вообще сказал, что триггеры на системных таблицах должны работать?
Об этом никто не говорил, но факты говорят об обратном и описанная мною ситуация имеет место быть. Триггер с флагом RDB$SYSTEM_FLAG = 1 действительно выполняется на системной таблице RDB$PROCEDURES в процессе накатывания скрипта с помощью ibescript.

Linux Classic Server FB 2.0.1.

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Добавлено: 12 дек 2008, 14:44
dimitr
продолжай работать с фактами. Когда и они перестанут работать, вспомнишь меня.

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Добавлено: 12 дек 2008, 15:14
_SRG_
dimitr писал(а):продолжай работать с фактами. Когда и они перестанут работать, вспомнишь меня.
Фразы такого рода от Вас действительно звучат угрожающе :D

Мне просто интересно почему триггер с RDB$SYSTEM_FLAG = 1 при накатке скрипта (создающем процедуру) c помощью ibescript вызывается по событию UPDATING, а в процессе создания процедуры из IBExpert вызывается и по событию INSERTING и UPDATING.

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Добавлено: 12 дек 2008, 16:52
Dimitry Sibiryakov
Если ты посмотришь на скрипт, который эксперт предусмотрительно показывает, то увидишь, что он сначала создаёт процедуру с пустым телом, а затем её альтерит.

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Добавлено: 15 дек 2008, 22:39
_SRG_
_SRG_ писал(а):
dimitr писал(а):а кто вообще сказал, что триггеры на системных таблицах должны работать?
Об этом никто не говорил, но факты говорят об обратном и описанная мною ситуация имеет место быть. Триггер с флагом RDB$SYSTEM_FLAG = 1 действительно выполняется на системной таблице RDB$PROCEDURES в процессе накатывания скрипта с помощью ibescript.

Linux Classic Server FB 2.0.1.
Эх... вот бы CREATE TRIGGER ACTIVE ON METADATA <INSERT | UPDATE | DELETE> :)

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Добавлено: 16 дек 2008, 07:58
dimitr
_SRG_ писал(а):Эх... вот бы CREATE TRIGGER ACTIVE ON METADATA <INSERT | UPDATE | DELETE>
в 3.0 ожидаются триггеры для DDL