powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вопрос по триггеру
5 сообщений из 5, страница 1 из 1
Вопрос по триггеру
    #38938903
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!
Что то туплю с триггером, задача для пустого номера документа, подменять на определенное значение при вставке.
Вот такой триггер:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TRIGGER DOC_ARGUMENT.CONTR_I_NUMDOC
  AFTER INSERT
  ON DOCUMENT.DOC_ARGUMENT
  REFERENCING NEW AS N FOR EACH ROW
BEGIN  ATOMIC
  -- заполнять исходящий номер символами "б/н". 
       update DOCUMENT.DOC_ARGUMENT set INCOMING_NUMDOC = 'б/н'  
       where  
                    ID = N.ID
            and     BINDING_DATE >= date('2012-05-01') and INCOMING_NUMDOC is  null 
            and     ID_DOCUMENT in (select id from TYPE.DOCUMENT where direction = 'INPUT') 
            and     binding_time <> '00:00:00';      
END;



Ошибка такая:
SQLSTATE=560C3
Message: AFTER trigger "CONTR_I_NUMDOC" attempted to modify a row in table "DOC_ARGUMENT" that was modified by an SQL data change statement within a FROM clause.. SQLCODE=-989, SQLSTATE=560C3, DRIVER=3.64.133

Как быть?
...
Рейтинг: 0 / 0
Вопрос по триггеру
    #38938969
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
medoed,

Добрый день.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR REPLACE TRIGGER DOC_ARGUMENT.CONTR_I_NUMDOC
  BEFORE INSERT
  ON DOCUMENT.DOC_ARGUMENT
  REFERENCING NEW AS N FOR EACH ROW
  WHEN (EXISTS (
    SELECT 1 FROM TYPE.DOCUMENT D 
    WHERE D.DIRECTION='INPUT' AND D.ID=N.ID_DOCUMENT
    AND N.BINDING_DATE >= date('2012-05-01') and N.INCOMING_NUMDOC is null and N.binding_time <> '00:00:00'
  ))
set INCOMING_NUMDOC = 'б/н'
...
Рейтинг: 0 / 0
Вопрос по триггеру
    #38939000
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinsteinmedoed,

Добрый день.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR REPLACE TRIGGER DOC_ARGUMENT.CONTR_I_NUMDOC
  BEFORE INSERT
  ON DOCUMENT.DOC_ARGUMENT
  REFERENCING NEW AS N FOR EACH ROW
  WHEN (EXISTS (
    SELECT 1 FROM TYPE.DOCUMENT D 
    WHERE D.DIRECTION='INPUT' AND D.ID=N.ID_DOCUMENT
    AND N.BINDING_DATE >= date('2012-05-01') and N.INCOMING_NUMDOC is null and N.binding_time <> '00:00:00'
  ))
set INCOMING_NUMDOC = 'б/н'

Марк, а в данном случае:
Код: sql
1.
set INCOMING_NUMDOC = 'б/н'

это поле или переменная, если поле то в какой таблице оно изменяется в N или постоянной - смысла если честно не уловил!?
...
Рейтинг: 0 / 0
Вопрос по триггеру
    #38939029
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
medoedМарк, а в данном случае:
Код: sql
1.
set INCOMING_NUMDOC = 'б/н'

это поле или переменная, если поле то в какой таблице оно изменяется в N или постоянной - смысла если честно не уловил!? Это поле изменяемой записи в таблице DOCUMENT.DOC_ARGUMENT.
Вы можете ссылаться на него так, если хотите:
Код: sql
1.
set N.INCOMING_NUMDOC = 'б/н'
...
Рейтинг: 0 / 0
Вопрос по триггеру
    #38939104
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark BarinsteinmedoedМарк, а в данном случае:
Код: sql
1.
set INCOMING_NUMDOC = 'б/н'

это поле или переменная, если поле то в какой таблице оно изменяется в N или постоянной - смысла если честно не уловил!? Это поле изменяемой записи в таблице DOCUMENT.DOC_ARGUMENT.
Вы можете ссылаться на него так, если хотите:
Код: sql
1.
set N.INCOMING_NUMDOC = 'б/н'



Вроде заработало, спасибо Марк, в очередной раз выручили!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вопрос по триггеру
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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