【问题标题】:Retrieve returning row of INSERT in PL/pgSQL在 PL/pgSQL 中检索返回的 INSERT 行
【发布时间】:2015-09-13 00:40:17
【问题描述】:

我在 PostgreSQL 数据库中有一个名为 test 的表,其中包含 iddata 列。

我创建了一个名为insert_test 的触发器AFTER INSERT,用于启动同名函数。

来自 PHP 的插入 SQL 是这样的:

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

如何在 PL/pgSQL 函数内访问 temp 中的结果值?

【问题讨论】:

  • 您甚至可以使用BEFORE 触发器 (one example) 在值之前对其进行存储和返回。

标签: php sql postgresql triggers plpgsql


【解决方案1】:

这个查询有点模棱两可,所以我的回答是笼统的。 RETURNING 子句的结果是动态计算的,并立即发送给客户端。所以你不能从 PL/pgSQL 中触及这些值。但是表中的所有值都可以通过记录变量NEW or 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2013-06-19
    • 2013-07-02
    • 1970-01-01
    相关资源
    最近更新 更多