powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Триггер перед вставкой. Что я делаю не так?
6 сообщений из 6, страница 1 из 1
Триггер перед вставкой. Что я делаю не так?
    #38397969
Leshgan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE OR ALTER TRIGGER SKLIT_H_BI0 FOR SKLIT_H
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE cnt int;
begin
  if (new.cod_cl is not null and new.cod_ap is not null) then begin
    select cod_cl
    from spr_ap
    where cod_cl = new.cod_cl and cod_ap = new.cod_ap into :cnt;
    if (row_count > 0) then
        new.autoload = 1;
    else new.autoload = 0;
  end

  if (new.cod_cl is not null and new.cod_ap is null or new.cod_ap = 0 ) then begin
    select cod_cl
    from spr_ap
    where cod_cl = new.cod_cl into :cnt;
    if (row_count > 0) then
        new.autoload = 0;
    else new.autoload = 1;
  end

end



иногда срабатывает, иногда нет. Не дает вставить запись. И в большинстве случаев не дает обновить записи в таблице sklit_h если сделает его
Код: plsql
1.
active before insert or update position 0
...
Рейтинг: 0 / 0
Триггер перед вставкой. Что я делаю не так?
    #38398018
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leshgan,

как именно не даёт? Какую ошибку пишет?

Ты уверен что это условие верное

Код: sql
1.
if (new.cod_cl is not null and new.cod_ap is null or new.cod_ap = 0 )
...
Рейтинг: 0 / 0
Триггер перед вставкой. Что я делаю не так?
    #38398049
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leshgan,

на кой здесь переменная cnt если она не используется.

тогда уж

Код: plsql
1.
2.
3.
4.
5.
6.
    select count(*)
    from spr_ap
    where cod_cl = new.cod_cl and cod_ap = new.cod_ap into :cnt;
    if (cnt > 0) then
        new.autoload = 1;
    else new.autoload = 0;



Код: plsql
1.
if (new.cod_cl is not null and new.cod_ap is null or new.cod_ap = 0 ) then begin



заменить на

Код: plsql
1.
if (new.cod_cl is not null and NULLIF(new.cod_ap, 0) is null) then begin



Если конечно мой ХШ правильно сработал...
...
Рейтинг: 0 / 0
Триггер перед вставкой. Что я делаю не так?
    #38398058
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leshganиногда срабатывает, иногда нет.
Такой бред написан...
Во-первых, хорошенько подумай что будет если new.cod_ap = 0
Во-вторых, открой для себя if (exists(...)).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Триггер перед вставкой. Что я делаю не так?
    #38398343
Leshgan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovВо-первых, хорошенько подумай что будет если new.cod_ap = 0

Выполнятся оба условия.
Во-вторых, открой для себя if (exists(...)).
[/quot]
Большое спасибо!


Симонов Денисзаменить на

Код: plsql
1.
if (new.cod_cl is not null and NULLIF(new.cod_ap, 0) is null) then begin



Если конечно мой ХШ правильно сработал...

Спасибо! Ну и лажи я написал! Стыдно!
...
Рейтинг: 0 / 0
Триггер перед вставкой. Что я делаю не так?
    #38398410
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov пишет:

> Во-вторых, открой для себя if (exists(...)).

Кстати. Когда-то давно AM написал страшилку про if (exists(...)).

Лично я - пользуюсь. Ничего страшного не наблюдал. Интересно, эти страшилки все еще актуальны ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Триггер перед вставкой. Что я делаю не так?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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