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

tom*_*tom 2 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;
Run Code Online (Sandbox Code Playgroud)

但它在语法上还不正确。

我读过我首先需要DECLARE变量(在本例中total_num为 和total_width),以便我可以使用它们并使用SELECT INTO,但我见过SELECT仅包含单个变量/语句的示例。如果我有更多怎么办?

小智 5

您可以在零件中列出多个变量into。该declare部分需要位于第一个部分之前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;
Run Code Online (Sandbox Code Playgroud)