powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли передать NEW в качестве параметра ф-ции?
4 сообщений из 4, страница 1 из 1
Можно ли передать NEW в качестве параметра ф-ции?
    #32965614
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В триггере присутствует предопределённая "переменная" NEW типа table_name%ROWTYPE. Если есть ф-ция с параметром этого же типа, то можно ли как-нибудь передать ей это значение?
На вызов ф-ции func1(NEW) выдало что нельзя юзать NEW в не правилах.
Присвоить NEW переменной этого типа тоже неполучилось, выдало ошибку парсера. Хотя тут могла быть и моя какая-то ошибка - писалось всё быстро и не аккуратно -времени нет(((
Есть вариант побробовать руками поприваивать все поля поодному, но это как-то не кузяво.
Делал ли кто-либо подобное? Поделитесь кодом, если не тяжело.
...
Рейтинг: 0 / 0
Можно ли передать NEW в качестве параметра ф-ции?
    #32965952
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как - то сталкивался с такой проблемой. Кроме как по полю присвоить - общих решений не наскр еб. Правда, в зависимости от времени исполнения (BEFORE/AFTER), иногда можно передать не NEW/OLD, а саму запись (причем, если в динамике (EXECUTE) - даже "переменного типа"). Примерно так:

Код: plaintext
1.
2.
3.
If TG_RELNAME = \'main\' THEN
	SELECT INTO rec  * FROM main WHERE m_id = OLD.m_id;
	--тут уже можно передавать  rec в ф-ю
END IF;
Но это далеко не то же самое, что передать _само_ NEW или OLD

Если кто решил задачу "в общем виде" - было бы интересно. (боюсь, придется обходить pg_class и т.п. и формировать EXECUTe-ы по полям, а то и не получиться и этого)
...
Рейтинг: 0 / 0
Можно ли передать NEW в качестве параметра ф-ции?
    #32967177
фффф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На 8.0 все нормально работает:
Код: plaintext
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.
27.
CREATE TABLE test_trigger (
  id serial primary key,
  t text
);
CREATE OR REPLACE FUNCTION test_trigger_str(r test_trigger) RETURNS text AS $_$
BEGIN
  return 'hello '||r.t;
END;
$_$ LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION ftrig_test_trigger() RETURNS trigger AS $_$
BEGIN
  NEW.t := test_trigger_str(NEW);
  return NEW;
END;
$_$ LANGUAGE plpgsql;

CREATE TRIGGER test_trigger_bi BEFORE INSERT
  ON test_trigger FOR EACH ROW
  EXECUTE PROCEDURE ftrig_test_trigger();
  
insert into test_trigger(t) values ('world');
select * from test_trigger;

 id |      t
----+-------------
   1  | hello world
...
Рейтинг: 0 / 0
Можно ли передать NEW в качестве параметра ф-ции?
    #32967845
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ффффНа 8.0 все нормально работает:

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


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