Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 DB2 - триггер на вставку, почему не создается?  [new]
Nafigator
Member

Откуда:
Сообщений: 216
CREATE TRIGGER USERS_UID NO CASCADE BEFORE INSERT ON USERS REFERENCING NEW AS NEW_USER FOR EACH ROW NEW_USER.USER_ID = GENERATE_UNIQUE()

Ругается на '=' и говорит, что там должен быть <space> (???)

Пример взят из документации, кстати!
21 ноя 06, 18:49    [3432040]     Ответить | Цитировать Сообщить модератору
 Re: DB2 - триггер на вставку, почему не создается?  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4949
CREATE TRIGGER USERS_UID
NO CASCADE BEFORE INSERT ON USERS
REFERENCING NEW AS NEW_USER
FOR EACH ROW
SET NEW_USER.USER_ID = GENERATE_UNIQUE()
22 ноя 06, 09:15    [3433028]     Ответить | Цитировать Сообщить модератору
 Re: DB2 - триггер на вставку, почему не создается?  [new]
Nafigator
Member

Откуда:
Сообщений: 216
Большое спасибо!
22 ноя 06, 10:42    [3433496]     Ответить | Цитировать Сообщить модератору
 Re: DB2 - триггер на вставку, почему не создается?  [new]
Nafigator
Member

Откуда:
Сообщений: 216
Но возник следующий вопрос.
Каков смысл schema в данном случае? Правильно ли я понял, что если в качестве schema используется юзер, работающий с сервером, то триггер будет выполняться для таблицы с именем USERS, обнаруженной в ЛЮБОЙ базе данных, присутствующей на данном сервере?
22 ноя 06, 11:01    [3433682]     Ответить | Цитировать Сообщить модератору
 Re: DB2 - триггер на вставку, почему не создается?  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4949
Какая у вас версия базы?
22 ноя 06, 13:51    [3435173]     Ответить | Цитировать Сообщить модератору
 Re: DB2 - триггер на вставку, почему не создается?  [new]
Nafigator
Member

Откуда:
Сообщений: 216
9.1.0.356
22 ноя 06, 14:49    [3435736]     Ответить | Цитировать Сообщить модератору
 Re: DB2 - триггер на вставку, почему не создается?  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4949
Nafigator
Но возник следующий вопрос.
Каков смысл schema в данном случае? Правильно ли я понял, что если в качестве schema используется юзер, работающий с сервером, то триггер будет выполняться для таблицы с именем USERS, обнаруженной в ЛЮБОЙ базе данных, присутствующей на данном сервере?
Нет, не правильно.
Даже не знаю с чего начать...
Видимо, в вашем понимании "база данных" и "сервер" - это "схема" и "база данных" в понятиях DB2 соответственно.
В момент создания триггера, если не указывать его схему и имя схемы таблицы, на которую он повешен, то в качестве имени схемы для триггера и таблицы будет использовано значение регистровой переменной current schema (ее значение можно получить запросом values current schema).
По умолчанию ее значение равно вашему authorization id (имени пользователя, которым вы соединились с базой).
22 ноя 06, 16:13    [3436473]     Ответить | Цитировать Сообщить модератору
 Re: DB2 - триггер на вставку, почему не создается?  [new]
Nafigator
Member

Откуда:
Сообщений: 216
Хорошо, тогда другой вопрос. Придется ли мне для каждой таблицы, где используется id-поле, которое я хочу "автогенерить" через generate_unique() писать отдельный триггер или я могу использовать единый триггер?
22 ноя 06, 17:23    [3437147]     Ответить | Цитировать Сообщить модератору
 Re: DB2 - триггер на вставку, почему не создается?  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4949
Надо писать отдельный.
А что, это требования системы использовать обязательно generate_unique() в качестве генератора ключа?
Нельзя завести для этого generated always as identity поле?
22 ноя 06, 18:19    [3437594]     Ответить | Цитировать Сообщить модератору
 Re: DB2 - триггер на вставку, почему не создается?  [new]
Nafigator
Member

Откуда:
Сообщений: 216
Переносится база из MS SQL, где поля - uniqueidentifier. Клиент хочет перенести базу, а в дальнейшем использовать такую же структуру ключей, какая была в MS SQL. Я знаю, что generate_unique работает с 13-разрядным полем в db2, но я пока просто тестирую работу. В дальнейшем же, возможно, придется использовать UDF (кстати, интересно, генерирует ли виндовая CoCreateGUID() UID по тому же алгоритму, что newid() в MS SQL...)
23 ноя 06, 10:27    [3439388]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить