Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Можно ли использовать переменные в тригерах? / 15 сообщений из 15, страница 1 из 1
03.07.2006, 09:22
    #33826525
OlegA67
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать переменные в тригерах?
Если да, то какой синтаксис. Пытаюсь сделать следующее, на таблицу table1 создаю тригер на операцию insert и момент действия after, где имеется следующий код.

if exists( select shname into :h1 from schema1.table2 where kod = n.kod) then


end if;

смысл которого, можно ли сохранить значение из поля shname таблицы table2 в переменной, или так можно сделать только через ХП. Естественно при таком синтаксисе тригер не создаеться
...
Рейтинг: 0 / 0
03.07.2006, 10:28
    #33826660
Alexander Mozhaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать переменные в тригерах?
Попробуй так:


declare h1 ...;
set h1 = (select shname from schema1.table2 where kod = n.kod);

if (...) then
end if;
...
Рейтинг: 0 / 0
03.07.2006, 11:09
    #33826781
OlegA67
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать переменные в тригерах?
Ругается на строку с declare

[IBM][CLI Driver][DB2/NT] SQL0104N Обнаружен неправильный
элемент ";" после текста "N ATOMIC declare h1"
...
Рейтинг: 0 / 0
03.07.2006, 11:32
    #33826858
Alexey Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать переменные в тригерах?
Тип переменной указан?
Напр.:
DECLARE H1 VARCHAR(16);
...
Рейтинг: 0 / 0
03.07.2006, 12:59
    #33827228
OlegA67
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать переменные в тригерах?
конечно не указал ))
вроде бы работает с одной переменной, но хотелось бы выяснить один момент.
Мне надо сохранить значение в переменных пяти полей, тогда если так прописывать
set h1 = (select shname from dbadmin.ttrig where kod = n.kod);
set h2 = (select inn from dbadmin.ttrig where kod = n.kod);
....
set h5 = (select okonx from dbadmin.ttrig where kod = n.kod);

то получается, что каждый раз при вставке будет выполняться пять запросов, или в команде SET запросы не выполняются
Пробовал прописать так
set h1, h2,h3,h4,h5 = (select shname,inn,nomer,codeoff,okonx from dbadmin.ttrig where kod = n.kod);

выдает ошибку, буду очень благодарен за разъеснения
...
Рейтинг: 0 / 0
03.07.2006, 13:03
    #33827249
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать переменные в тригерах?
select var1, var2, var3 into h1, h2, h3 from ............
...
Рейтинг: 0 / 0
03.07.2006, 13:10
    #33827281
Alexander Mozhaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать переменные в тригерах?
OlegA67конечно не указал ))
вроде бы работает с одной переменной, но хотелось бы выяснить один момент.
Мне надо сохранить значение в переменных пяти полей, тогда если так прописывать
set h1 = (select shname from dbadmin.ttrig where kod = n.kod);
set h2 = (select inn from dbadmin.ttrig where kod = n.kod);
....
set h5 = (select okonx from dbadmin.ttrig where kod = n.kod);

то получается, что каждый раз при вставке будет выполняться пять запросов, или в команде SET запросы не выполняются
Пробовал прописать так
set h1, h2,h3,h4,h5 = (select shname,inn,nomer,codeoff,okonx from dbadmin.ttrig where kod = n.kod);

выдает ошибку, буду очень благодарен за разъеснения

Место в котором используется триггер насколько критично к скорости выполнения?
...
Рейтинг: 0 / 0
03.07.2006, 13:14
    #33827308
OlegA67
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать переменные в тригерах?
не получается ((

BEGIN ATOMIC
declare h1 varchar(15) ;
declare h2 smallint;
IF exists (select namet,kod into h1,h2 from dbadmin.ttrig where kod = n.kod) THEN
insert into dbadmin.test (rrr,nnn) values (h1,h2) ;
END IF;
END
...
Рейтинг: 0 / 0
03.07.2006, 13:18
    #33827329
OlegA67
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать переменные в тригерах?
Alexander Mozhaev
Место в котором используется триггер насколько критично к скорости выполнения?

в принципе не критично
...
Рейтинг: 0 / 0
03.07.2006, 13:49
    #33827461
Alexander Mozhaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать переменные в тригерах?
OlegA67не получается ((

BEGIN ATOMIC
declare h1 varchar(15) ;
declare h2 smallint;
IF exists (select namet,kod into h1,h2 from dbadmin.ttrig where kod = n.kod) THEN
insert into dbadmin.test (rrr,nnn) values (h1,h2) ;
END IF;
END

Попробуй так, правда не знаю бедет ли компилироваться/работать:

BEGIN ATOMIC
insert into dbadmin.test
select namet,kod from dbadmin.ttrig where kod = n.kod;
END
...
Рейтинг: 0 / 0
03.07.2006, 13:53
    #33827478
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать переменные в тригерах?
OlegA67Пробовал прописать так
set h1, h2,h3,h4,h5 = (select shname,inn,nomer,codeoff,okonx from dbadmin.ttrig where kod = n.kod);

выдает ошибку, буду очень благодарен за разъеснения
А где скобки?

В триггерах и UDF так:
Код: plaintext
1.
set (h1, h2,h3,h4,h5)  = (select shname,inn,nomer,codeoff,okonx  from dbadmin.ttrig where kod = n.kod);
тогда как в SP надо SELECT .. INTO...

EXISTS внутри IF не работает!

Вместо IF EXIST(выборка) надо
Код: plaintext
1.
2.
SET v = (выборка FETCH FIRST  1  ROW ONLY);
IF NOT(v IS NULL)...
Ещё вариант: вместо в принципе не работающего
Код: plaintext
1.
2.
IF EXISTS(выборка) THEN
  INSERT INTO ... VALUES ...
использовать
Код: plaintext
1.
2.
3.
4.
5.
INSERT INTO...
WITH T(...) AS (VALUES ...)
SELECT ...
FROM T
WHERE EXISTS(выборка)
Хотя, конечно, применительно к конкретному коду в написанном Александром INSERT'е больше смысла.
...
Рейтинг: 0 / 0
03.07.2006, 14:02
    #33827520
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать переменные в тригерах?
TORTselect var1, var2, var3 into h1, h2, h3 from ............
В триггерах так нельзя.
Можно
Код: plaintext
set (h1, h2, ...)=(select var1, var2, ... from ...);
...
Рейтинг: 0 / 0
03.07.2006, 16:21
    #33828070
OlegA67
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать переменные в тригерах?
огромное спасибо Victor Metelitsa
set (h1, h2,h3,h4,h5) = (select shname,inn,nomer,codeoff,okonx from dbadmin.ttrig where kod = n.kod);
это то что нужно было
непонятно только, почему не должна работать в тригере конструкция
IF EXISTS(выборка) THEN

у себя проверял, вроде бы как работает
...
Рейтинг: 0 / 0
03.07.2006, 21:28
    #33828785
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать переменные в тригерах?
Хм. Я помню, в предыдущих версиях DB2 EXISTS в IF и CASE WHEN не работал, приходилось выкручитваться через SELECT count(*) и SELECT ... FIRST 1 ROW ... а теперь, значит, работает... ну и дела... Давно я документацию не перечитывал.
...
Рейтинг: 0 / 0
04.07.2006, 07:01
    #33828963
OlegA67
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать переменные в тригерах?
Выбрал все таки вариант предложенный Victor Metelitsa,
потому как проверить переменную на NULL будет быстрее чем делать еще одну выборку в EXISTS. Еще раз спасибо.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Можно ли использовать переменные в тригерах? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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