Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Непонятки с условием в триггере BU / 12 сообщений из 12, страница 1 из 1
13.10.2014, 08:08
    #38774704
Sign of Chaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с условием в триггере BU
Добрый день!

есть табля
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE CARD_INFO (
    ID         INTEGER NOT NULL,
    CDATE      DATE NOT NULL,
    SOLD       SMALLINT DEFAULT 0 NOT NULL,
    SALE_DATE  DATE,
    DISABLED   SMALLINT DEFAULT 0 NOT NULL,
    DELETED    SMALLINT DEFAULT 0 NOT NULL,
    EXECUTED   SMALLINT DEFAULT 0 NOT NULL
);


с триггером:

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE OR ALTER trigger card_info_bu0 for card_info
active before update position 0
AS
begin
  if (new.executed is null) then
    new.executed = 0;
end



выполняю запрос:
Код: sql
1.
update card_info set deleted = 1 where id = 1



триггер не отрабатывает.. точнее затык в условии - если его закоментить, то все ОК.
так-же пробовал условие поменять на
Код: sql
1.
if (new.executed <> 0) then



безрезультатно ((
как победить?
...
Рейтинг: 0 / 0
13.10.2014, 08:13
    #38774707
Sign of Chaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с условием в триггере BU
упс.. сорри.. не указал: FB 2.1 win
...
Рейтинг: 0 / 0
13.10.2014, 08:20
    #38774711
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с условием в триггере BU
Sign of Chaosтриггер не отрабатывает.. точнее затык в условии - если его закоментить, то все ОК.

Условие какое,where id = 1 ?
а у тебя в таблице точно есть поле с такими данными?
...
Рейтинг: 0 / 0
13.10.2014, 08:26
    #38774712
Sign of Chaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с условием в триггере BU
GallemarSign of Chaosтриггер не отрабатывает.. точнее затык в условии - если его закоментить, то все ОК.



тут речь, совершенно определенно, идет об условии внутри триггера ))

Условие какое,where id = 1 ?
а у тебя в таблице точно есть поле с такими данными?

да, where id = 1 - уловие в запросе на обновление строки
и да, данные есть.
...
Рейтинг: 0 / 0
13.10.2014, 08:29
    #38774714
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с условием в триггере BU
Sign of Chaos EXECUTED SMALLINT DEFAULT 0 NOT NULL

с триггером:


if ( new.executed is null ) then

выполняю запрос:

update card_info set deleted = 1 where id = 1

триггер не отрабатывает.. точнее затык в условии - если его закоментить, то все ОК.


а с чего он должен отработать если new.executed никак не есть нулл
...
Рейтинг: 0 / 0
13.10.2014, 08:34
    #38774716
Sign of Chaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с условием в триггере BU
m7mа с чего он должен отработать если new.executed никак не есть нулл

if ( new.executed is null ) then - я так понимаю в данном условии идет проверка входных данных, а не DDL

когда я делаю запрос на обновление:
Код: sql
1.
update card_info set deleted = 1 where id = 1


и поле executed не указано в перечилении set , то в триггер его значение должно приходить как null
...
Рейтинг: 0 / 0
13.10.2014, 08:52
    #38774720
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с условием в триггере BU
Sign of Chaos,поменяй триггер на after.
...
Рейтинг: 0 / 0
13.10.2014, 08:58
    #38774723
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с условием в триггере BU
Sign of Chaos,

откуда взяться нуллу на апдейте, если нуллы явно запрещены? лазил в системные таблички?
Сюда же твое непонимание как в принципе работают нуллы, тут надо почитать доку и поэкспериментировать, чтобы понять.

GallemarSign of Chaos,поменяй триггер на after.Иногда лучше жевать.(c)
...
Рейтинг: 0 / 0
13.10.2014, 09:05
    #38774727
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с условием в триггере BU
Ivan_PisarevskySign of Chaos,

откуда взяться нуллу на апдейте, если нуллы явно запрещены? лазил в системные таблички?
Сюда же твое непонимание как в принципе работают нуллы, тут надо почитать доку и поэкспериментировать, чтобы понять.

GallemarSign of Chaos,поменяй триггер на after.Иногда лучше жевать.(c)

Блин,проглядел, что поля NOT NULL. В чем тогда смысл триггера?
...
Рейтинг: 0 / 0
13.10.2014, 09:07
    #38774729
Sign of Chaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с условием в триггере BU
смысл в том, чтобы поле executed становилось равным нулю после каждой правки записи.
...
Рейтинг: 0 / 0
13.10.2014, 09:14
    #38774735
Sign of Chaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с условием в триггере BU
как же тогда отрабатывает этот триггер?:

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE OR ALTER trigger card_info_bi0 for card_info
active before insert position 0
AS
begin
  if (new.id is null) then
    new.id = gen_id(gen_card_info_id, 1);
end



new.id же тоже INTEGER NO TULL !
...
Рейтинг: 0 / 0
13.10.2014, 09:16
    #38774737
Sign of Chaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с условием в триггере BU
все... разобрался )))
сам затупил )))
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Непонятки с условием в триггере BU / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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