Гость
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Не получается сделать тригер на вставку / 8 сообщений из 8, страница 1 из 1
23.06.2015, 12:53
    #38990576
D_Sergeevich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается сделать тригер на вставку
У меня процеду amk_get_next_id возвращает 3 значения и вставляет в запись (n5protocol,utc_time,n_year) но мне еще нужно вставить значение в n_protocol
Я вот наваял тригер и вот без селекта т.е. с этими только тремя значениями он работает. Как мне сюда вставить четвертое? которое получается селектом

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DROP TRIGGER "informix".on_ins_protocol;

CREATE TRIGGER "informix".on_ins_protocol INSERT ON "informix".protocol REFERENCING NEW AS n_val



FOR EACH ROW(EXECUTE FUNCTION reglist:"informix".amk_get_next_id(n_val.id_dctype, 
                n_val.id_personal) INTO "informix".protocol.n5protocol, 
            "informix".protocol.utc_time, "informix".protocol.n_year,

SELECT last_id INTO n_protocol FROM spr_dctype WHERE id_dctype = n_val.dctype_p;

INTO "informix".protocol(n_protocol)VALUES(n_protocol+1);
);
...
Рейтинг: 0 / 0
23.06.2015, 15:06
    #38990725
D_Sergeevich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается сделать тригер на вставку
Что никто не знает где тут ошибка и как это сделать синтаксически правильным? Оно ругается на строку где селект
...
Рейтинг: 0 / 0
23.06.2015, 17:32
    #38990920
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается сделать тригер на вставку
D_Sergeevich,
1. Оно ж не просто русским матом ругается, правда, что вы стесняетесь сюда скопировать ругательства?
2. Кто оно? Какая версия информикса?
...
Рейтинг: 0 / 0
24.06.2015, 08:00
    #38991257
D_Sergeevich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается сделать тригер на вставку
АнатоЛой,
IBM Informix Dynamic Server Version 11.70.FC3

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
24.06.15 7:57    Checking statement:
DROP TRIGGER "informix".on_ins_protocol;
No syntax errors found in this statement

24.06.15 7:57    Checking statement:
CREATE TRIGGER "informix".on_ins_protocol INSERT ON "informix".protocol REFERENCING NEW AS n_val    FOR EACH ROW(EXECUTE FUNCTION reglist:"informix".amk_get_next_id(n_val.id_dctype,                  n_val.id_personal) INTO "informix".protocol.n5protocol,              "informix".protocol.utc_time, "informix".protocol.n_year,  SELECT last_id INTO n_protocol FROM spr_dctype WHERE id_dctype = n_val.dctype_p;
A syntax error has occurred.
Error Position: Ln: 11 Col: 8

Syntax check aborted
...
Рейтинг: 0 / 0
24.06.2015, 14:11
    #38991647
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается сделать тригер на вставку
точка с запятой лишния?
WHERE id_dctype = n_val.dctype_p ; INTO
...
Рейтинг: 0 / 0
24.06.2015, 22:44
    #38992092
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается сделать тригер на вставку
Экземпляра сервака под рукой нет, и не все ваши действия в примере понятны, но на 11.70 с человеческим синтаксисом это выглядит примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE PROCEDURE "informix".sp_ins_protocol (
)
  REFERENCING NEW AS new_protocol FOR "informix".protocol;

  LET new_protocol.n5protocol,
        new_protocol.utc_time,
        new_protocol.n_year =
    reglist:"informix".amk_get_next_id(
        new_protocol.id_dctype,                  
        new_protocol.id_personal
    );

  LET new_protocol.n_protocol =
      (SELECT last_id + 1 -- а тут spr_dctype.last_id не забыли обновить ;)
         FROM spr_dctype 
            WHERE id_dctype = n_val.dctype_p);

END PROCEDURE;

CREATE TRIGGER "informix".on_ins_protocol 
  INSERT ON "informix".protocol 
    REFERENCING NEW AS new_p -- вот это возможно и не нужно в данном конкретном случае
    FOR EACH ROW(
      EXECUTE PROCEDURE "informix".sp_ins_protocol(
      ) WITH TRIGGER REFERENCES
    );
...
Рейтинг: 0 / 0
24.06.2015, 22:50
    #38992096
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается сделать тригер на вставку
В вашем варианте возможно так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
DROP TRIGGER "informix".on_ins_protocol;

CREATE TRIGGER "informix".on_ins_protocol 
  INSERT ON "informix".protocol 
    REFERENCING NEW AS n_val
    FOR EACH ROW(
      EXECUTE FUNCTION reglist:"informix".amk_get_next_id(
        n_val.id_dctype, n_val.id_personal) 
        INTO 
          n_val.n5protocol, 
          n_val.utc_time, 
          n_val.n_year, -- никогда не любил этот вариант с разделителем-запятой между операторами
      INSERT INTO n_val.n_protocol 
        VALUES (
          (SELECT last_id+1 
             INTO n_protocol 
                FROM spr_dctype 
                   WHERE id_dctype = n_val.dctype_p
          )
        );
    );
...
Рейтинг: 0 / 0
24.06.2015, 22:54
    #38992101
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается сделать тригер на вставку
Во втором варианте INSERT INTO используется вместо SELECT, потому что SELECT в принципе не является допустим оператором внутри триггера на INSERT.
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Не получается сделать тригер на вставку / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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