Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите написать присвоение в триггере / 2 сообщений из 2, страница 1 из 1
08.08.2015, 22:02
    #39025616
PCContra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать присвоение в триггере
Было так, но не работает на Insert, т.к. вставка идет с NEW
Код: sql
1.
2.
3.
4.
5.
6.
CREATE OR REPLACE FUNCTION logs.my () RETURNS TRIGGER AS $$
BEGIN
INSERT  INTO logs.my (operation, tnum, tname) 
SELECT  TG_OP,  OLD.tnum, OLD.tname;
END;
$$ LANGUAGE plpgsql;


Писать в теле разветвление не хочу, думаю присвоить в зависимости от операции переменной VAL либо новые, либо старые данные, и потом писать в теле функции VAL (думаю так будет короче):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR REPLACE FUNCTION logs.my () RETURNS TRIGGER AS $$
DECLARE
IF TG_OP = 'INSERT' THEN VAL ALIAS  FOR  NEW ELSE VAL ALIAS FOR OLD END IF;
--VAL ALIAS FOR CASE WHEN  TG_OP = 'INSERT' THEN NEW ELSE OLD END;
BEGIN
INSERT  INTO logs.my (operation, tnum, tname) 
SELECT  TG_OP,  VAL.tnum, VAL.tname;
END;
$$ LANGUAGE plpgsql;


Но вот как написать, незнаю
...
Рейтинг: 0 / 0
08.08.2015, 22:36
    #39025620
PCContra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать присвоение в триггере
Написал так, работает:
Код: sql
1.
2.
3.
4.
DECLARE
VAL RECORD;
BEGIN
IF TG_OP = 'INSERT' THEN VAL := NEW; ELSE VAL := OLD; END IF;


Можете что прокомментировать? Мне нравится )
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите написать присвоение в триггере / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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