postgresql - 如何在触发器函数中选择多个变量?

标签 postgresql plpgsql database-trigger

这是我想要实现的:

CREATE FUNCTION f() RETURNS trigger AS $$
  BEGIN
    SELECT COUNT(*) AS total_num, SUM(width) AS total_width
    FROM some_table WHERE foo = NEW.foo;
    IF total_num > 0 AND total_width > 100
    THEN
      RAISE EXCEPTION 'this is bad';
    END IF;
    RETURN NEW;
  END;
$$ LANGUAGE plpgsql;

但它在语法上还不正确。

我读过我首先需要DECLARE 变量(在本例中为total_numtotal_width)所以我可以使用它们并使用SELECT INTO 但我见过只有一个变量/SELECT 语句的示例。如果我有更多呢?

最佳答案

你可以列出multiple variablesinto 部分。和 declare section需要在第一个 begin 之前出现:

CREATE FUNCTION f() RETURNS trigger 
AS $$
declare
  total_num bigint;
  total_width bigint;
BEGIN
   SELECT COUNT(*), SUM(width)
       into total_num, total_width
   FROM some_table 
   WHERE foo = NEW.foo;

   IF total_num > 0 AND total_width > 100 THEN
      RAISE EXCEPTION 'this is bad';
   END IF;
   RETURN NEW;
END;
$$ LANGUAGE plpgsql;

关于postgresql - 如何在触发器函数中选择多个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54119068/

相关文章:

sql - 如何在给定日期范围内查找列的总和,其中表格只有开始日期和结束日期

postgresql - 带有嵌套函数的 PL/pgSQL 函数名称解析

sql - plpgsql 语法错误

MySQL 表示 : #1336 - Dynamic SQL is not allowed in stored function or trigger

MySQL : automatically update a column in another table with foreign key, 触发器还是什么?

postgresql - 将选择值分配给 PostgreSQL 9.3 中的变量

python-3.x - 从 python psycopg2 客户端连接到 Azure PostgreSQL 服务器

postgresql - 在存储过程中设置自定义选项

sql - 就用途而言,准备好的语句和 SQL 或 PL/pgSQL 函数之间有什么区别?

postgresql - 触发错误-postgresql