Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / проверка уникальности если одно из полей может быть null / 2 сообщений из 2, страница 1 из 1
18.08.2008, 17:49
    #35493304
MindWrapper
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка уникальности если одно из полей может быть null
Привет,

Есть триггер, в нем нужно проверить есть ли уже вставляемая запись в таблице, если да - то сгенерировать ошибку. Уникальность записи определяется по 3-м полям: field1, field2 и field3.
field2 и field3 могу содержать null в этом случае из стоит игнорировать и выполнить проверку по оставшимя ненулевым полям. Подскажите, что не так в фрагменте кода ниже, который по идее должен отвечать за эту проверку. спасибо.

<code>
create trigger T600ICTL.TABLE_BI
referencing new as N ....

IF (SELECT COUNT ( * ) FROM TABLE where
( ( N.FIELD1 = FIELD1 ) OR ( N . FIELD1 IS NULL AND FIELD1 IS NULL ) )
AND ( ( N.FIELD2 = FIELD2) OR ( N . FIELD2 IS NULL AND FIELD2 IS NULL ) )
AND ( ( N.FIELD3 = FIELD3 ) OR ( N . FIELD3 IS NULL AND FIELD3 IS NULL) ) <> 0)
THEN … ERROR
</code>
...
Рейтинг: 0 / 0
18.08.2008, 18:56
    #35493472
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка уникальности если одно из полей может быть null
Добрый день.

Триггером обязательно?
Дело в том, что before trigger не отловит одновременную вставку 2-х строк с одинаковыим значениями этих 3-х полей.
Лучше уникальный индекс по этим 3-м полям.
Если надо триггером, то
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create trigger T600ICTL.TABLE_AIS
after insert on TABLE
referencing new table as n
for each statement
when (exists (
SELECT  1 
from test_uniq t
join n on 
    ( ( N.FIELD1 = t.FIELD1 ) OR ( N.FIELD1 IS NULL AND t.FIELD1 IS NULL ) )
AND ( ( N.FIELD2=t.FIELD2) OR ( N.FIELD2 IS NULL AND t.FIELD2 IS NULL ) )
AND ( ( N.FIELD3 = t.FIELD3 ) OR ( N.FIELD3 IS NULL AND t.FIELD3 IS NULL) ) 
group by N.FIELD1, N.FIELD2, N.FIELD3
having count( 1 )> 1 
))
signal sqlstate '75000' set message_text='achtung!!!'
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / проверка уникальности если одно из полей может быть null / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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