Получить возвращаемую строку INSERT в PL / pgSQL

У меня есть стол test с колоннами id, data в базе данных PostgreSQL.

Я создал триггер AFTER INSERT называется insert_test который запускает функцию с тем же именем.

Вставка SQL из PHP это:

insert into test (data) values ('try') returning 'variables' as temp;

Как я могу получить доступ к полученным значениям в temp внутри функции PL / pgSQL?

3

Решение

Этот запрос немного неоднозначный, поэтому мой ответ будет общим. Результат для RETURNING Предложение рассчитывается динамически и отправляется клиенту немедленно. Таким образом, вы не можете коснуться этих значений из PL / pgSQL. Но все значения из таблиц доступны в триггерных функциях через переменные записи NEW или же OLD — так что вы можете пересчитать любое выражение.

CREATE TABLE foo(a int, b int);

CREATE OR REPLACE FUNCTION foo_trig()
RETURNS TRIGGER AS $$
BEGIN
RAISE NOTICE '<<%>>', NEW.a + NEW.b;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER foo_t AFTER INSERT ON foo
FOR EACH ROW EXECUTE PROCEDURE foo_trig();

postgres=# INSERT INTO foo VALUES(10,20) RETURNING a + b;
NOTICE:  <<30>>
┌──────────┐
│ ?column? │
╞══════════╡
│       30 │
└──────────┘
(1 row)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]