Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.008 c
6-64248
sergey2
2003-01-29 09:32
2003.03.20
Как в TWebBrowser отключить фрейм зная его номер?


14-64294
Num Lock
2003-03-06 09:35
2003.03.20
СКУЧНО,,,


4-64431
Cosmic
2003-01-24 08:00
2003.03.20
Bitmap & WinAPI


3-64029
altarasjuk
2003-03-02 13:05
2003.03.20
Работа с БД в потоках


7-64422
Artyom
2003-01-18 15:00
2003.03.20
сменить фон рабочего стола





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский