Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.20;
Скачать: CL | DM;

Вниз

Триггер - непонятно, для чего он.   Найти похожие ветки 

 
Fishka   (2003-02-25 16:31) [0]

Для таблицы создан (не мной) триггер (и не один). Его текст (и ему подобных):
CREATE TRIGGER CHECK_112 FOR SSD AFTER UPDATE POSITION 1
Для чего он нужен? Когда я пишу точно такое для таблицы в другой базе, у меня возникает ошибка типа: необходимо писать begin ... end. Почему?


 
Johnmen ©   (2003-02-25 16:37) [1]

см. Прилагающуюся к IB документацию по SQL : CREATE TRIGGER


 
Fishka   (2003-02-25 16:52) [2]

Мною написано несколько триггеров к другой таблице. Например, самый простой (остальные с Exists и т.п.):
CREATE TRIGGER CHECK_14 FOR ALTIMETRY BEFORE UPDATE POSITION 0 CHECK (BEGIN_DATE<=END_DATE)
Вопросы по данному триггеру остаются.......


 
Johnmen ©   (2003-02-25 17:01) [3]

Ну божешь ты мой !... :)))
Время и желание постить сюда есть, а глянуть в доку - нет !


 
DarkKnight   (2003-02-25 18:13) [4]

CHECK_XXX - ограничение для поля таблицы, т.е. не совсем триггер ;)
Кстати, свои триггера CHECK_XXX называть не рекомендуется - могут быть грабли при изменении/удалении. В новых версия FB/IB их создание могут вообще запретить.


 
Sergey13 ©   (2003-02-26 09:48) [5]

>Триггер - непонятно, для чего он.
Не заморачивайся. Это буржуи придумали для наших программистов, не читающих книжки, чтоб запутать все окончательно. 8-)


 
Fishka   (2003-02-26 09:55) [6]

Johnmen © (25.02.03 17:01)
В книге Ковязина есть немного о триггерах, но к понять данный триггер я все равно не могу. Примеры триггеров из этой книги понятны.

DarkKnight (25.02.03 18:13)
Спасибо, учту.

CREATE TRIGGER CHECK_112 FOR SSD AFTER UPDATE POSITION 1
Вопрос остается. Что должно делаться в таблице после изменения? Для чего данный триггер?


 
Johnmen ©   (2003-02-26 10:11) [7]

>Fishka

Где тело триггера ?


 
Fishka   (2003-02-26 10:17) [8]

Уже написано тело триггера (оно очень худое). Но повторю еще раз:

CREATE TRIGGER CHECK_112 FOR SSD AFTER UPDATE POSITION 1

И это все о нем........


 
Johnmen ©   (2003-02-26 10:21) [9]

Тела не видно ! :)
Оно расположено между begin и end.


 
Fishka   (2003-02-26 10:42) [10]

В базе много триггеров. Есть с begin и end, но есть и такого типа (тоже их много). Можете еще раз перечитать мой вопрос, там я тоже интересуюсь, где begin и end в данном триггере.

Повторяю:
CREATE TRIGGER CHECK_112 FOR SSD AFTER UPDATE POSITION 1

Каким образом были созданы эти триггеры и для чего?


 
Johnmen ©   (2003-02-26 11:00) [11]

Начнем сначала...
Каким образом получена информация о триггерах ?


 
Fishka   (2003-02-26 11:05) [12]

В SQL Explorer-e жмякаю на Triggers у таблицы, получаю список триггеров. Жмякаю на триггер, смотрю его текст и вижу то, что приведено выше.


 
Johnmen ©   (2003-02-26 11:10) [13]

Похоже ты видишь описательную часть системных триггеров...
Получи метеданные всей базы и глянь триггеры там...


 
Desdechado ©   (2003-02-26 14:13) [14]

в IB все CHECK-CONSTRAINT"ы реализованы через триггеры, поэтому когда ты добавляешь check на поле таблицы или комбинацию полей, IB создает такой вот триггер CHECK_XXX.


 
Fishka   (2003-02-26 15:51) [15]

Johnmen © (26.02.03 11:10)
Не помню, как в IB 5.0 получить метаданные. Подскажите, пожалуйста.(IB 6.0 и прочих у меня нет!)

Desdechado © (26.02.03 14:13)
Например, в приводимом мною триггере:
CREATE TRIGGER CHECK_14 FOR ALTIMETRY BEFORE UPDATE POSITION 0 CHECK (BEGIN_DATE<=END_DATE)
наложено ограничение на поля BEGIN_DATE,END_DATE.

А в том триггере, о котором я спрашиваю:
CREATE TRIGGER CHECK_112 FOR SSD AFTER UPDATE POSITION 1
какое ограничение и на какие поля наложено?




 
Johnmen ©   (2003-02-26 15:58) [16]

Запускаешь isql и там в меню находишь нужное...


 
Fishka   (2003-02-26 16:59) [17]

Johnmen © (26.02.03 15:58)
Спасибо. Но данного триггера среди триггеров и Check-ов там нет. Что делать?
Вопрос остается...............


 
Johnmen ©   (2003-02-26 17:05) [18]

Правильно, нет. Так как этот триггер системный. А системные триггеры трогать категорически не рекомендуется !


 
DarkGreen ©   (2003-02-27 05:28) [19]

2 Johnmen © (26.02.03 17:05)
ИМХО системные триггеры начинаются с RDB$


 
Fishka   (2003-02-27 08:55) [20]

Не могу понять, что это за триггер, с таким "тощим телом" или даже без него. В другой базе, где триггеры созданы мной, триггеров подобного вида нет.
Каким бы не был данный триггер (системным или нет), все-таки для чего он и каким образом создан?


 
Johnmen ©   (2003-02-27 09:29) [21]

>DarkGreen © (27.02.03 05:28)

Нет.

>Fishka (27.02.03 08:55)

Системные триггеры создаются автоматически (для поддержания) при
определении различного типа кострейнтов (FK, CHECK ...), явных или нет. В приведенном тобой примере мы видим описательную часть сист.триг., который реализует констрейнт типа CHECK вида CHECK (BEGIN_DATE<=END_DATE).


 
Fishka   (2003-02-27 09:37) [22]

Johnmen © (27.02.03 09:29)
А как определить для какого CONSTRAINT появился автоматически данный триггер? Почему в другой базе нет подобных триггеров?
От чего это зависит?


 
Johnmen ©   (2003-02-27 09:47) [23]

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


 
Sergey13 ©   (2003-02-27 09:50) [24]

2Fishka (27.02.03 08:55)
Поставь себе какую нибудь нормальную прогу для работы с ИБ. Например IB Manager. Вообще непонятно как ты видишь эти свои тригеры. Если это CHECKи, то они должны быть видимы в констрейнтах(там где ключи всякие), а не в тригерах, к которым(с точки зрения пользователя) они вообще никакого отношения не имеют.


 
Fishka   (2003-02-27 10:02) [25]

Johnmen © (27.02.03 09:47)
С пунктами 2 и 3 не могу согласиться, т.к. в другой базе есть CONSTRAINT-ы, а подобных триггеров в ней нет. А у Вас есть нечто похожее (в смысле таких триггеров)?
Sergey13 © (27.02.03 09:50)
IB Manager-ом я вроде пользуюсь.
База создана не мной, но мне необходимо в ней разобраться.


 
Sergey13 ©   (2003-02-27 10:38) [26]

2Fishka (27.02.03 10:02)
Слушай, а база у тебя не битая? Бэкап проходит нормально? Не должно там быть таких "тригеров бестелесных", ИМХО. Это же мистика какая-то.
>База создана не мной,
А с разработчиком нельзя переговорить?


 
Johnmen ©   (2003-02-27 10:59) [27]

>Fishka (27.02.03 10:02)
>...т.к. в другой базе есть CONSTRAINT-ы, а подобных триггеров в ней нет...

А как ты видишь, что нет ?

>Sergey13 © (27.02.03 10:38)
>Не должно там быть таких "тригеров бестелесных",

Их и не бывает. А то, что он видит (неизвестно как) есть просто (еще раз повторю) описательные части триггеров.


 
Desdechado ©   (2003-02-27 11:01) [28]

а еще я помню, была такая утилита, кот. выкусывала текстовые тела ХП и триггеров, оставляя в БД их откомпилированный вид. Видел, имхо, на www.ibase.ru


 
Fishka   (2003-02-27 12:03) [29]

Sergey13 © (27.02.03 10:38)
>Слушай, а база у тебя не битая? Бэкап проходит нормально?
База живая,рабочая, ежедневно пополняется. Backup проходит ежедневно и нормально.
>А с разработчиком нельзя переговорить?
Теоретически можно, но они вряд ли вспомнят, т.к. занимаются сейчас совсем другим.


Johnmen © (27.02.03 10:59)
>А как ты видишь, что нет ?
Все также: В SQL Explorer-e жмякаю на Triggers у таблицы, получаю список триггеров. Жмякаю на триггер, смотрю его текст и вижу то, что приведено выше.



 
Johnmen ©   (2003-02-27 12:20) [30]

>Fishka (27.02.03 12:03)

Я не знаю, что такое SQL Explorer и как он работает.
Может быть повторяюсь, но еще раз - забей на сист.триггеры и обращай внимание только на "свои рабочие". Как понять, какие из них какие ? См. метаданные - там только "свои рабочие".



Страницы: 1 вся ветка

Текущий архив: 2003.03.20;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.02 c
1-64226
Leviathan
2003-03-09 00:11
2003.03.20
У StringGrid а нет OnPaint??


7-64419
Oleg--
2003-01-22 09:59
2003.03.20
Количество физических дисков


4-64430
[lamer]Barmaglot
2003-01-27 09:43
2003.03.20
Смена Font a у кнопки средствами WINAPI


14-64309
Sir Alex
2003-03-04 11:59
2003.03.20
Сторонний RAS сервер (не майкасофт)


14-64359
qwert-AP
2003-03-05 10:25
2003.03.20
Округления и с чем иго едят