Alo*_*lon 1 sql database postgresql database-trigger pgadmin
我正在尝试通过pgadmin创建一个触发器,以便有一个计算列.
我需要这样做:c = a/b
我创建了一个函数UpdateC,它包含以下代码:
UPDATE table_name
SET c = a / b
WHERE id = @id
Run Code Online (Sandbox Code Playgroud)
我将@id声明为参数.
然后我想我会创建一个触发器并将它链接到该函数,但我发现我需要将它链接到触发器函数而不是函数.
现在我正在尝试使用与上面完全相同的SQL创建触发器函数,但是我收到了下一个错误:
"UPDATE"或其附近的语法错误
在定义选项卡下我必须选择一种语言,所以我选择了"plpgsql"(其他选项是"c"和"internal").
任何帮助将深表感谢!
您应该创建一个BEFORE触发器FOR EACH ROW而不是UPDATE表,但在写入之前更改该行.
有关详细信息,请参阅文档.
这是一个概念证明:
CREATE TABLE t (
id integer PRIMARY KEY,
a double precision,
b double precision,
c double precision
);
CREATE OR REPLACE FUNCTION t_trig() RETURNS trigger
LANGUAGE plpgsql AS
$$BEGIN
NEW.c = NEW.a / NEW.b;
RETURN NEW;
END;$$;
CREATE TRIGGER t_trig BEFORE INSERT OR UPDATE ON t FOR EACH ROW
EXECUTE PROCEDURE t_trig();
INSERT INTO t (id, a, b) VALUES (1, 42, 7);
INSERT 0 1
test=> SELECT * FROM t;
???????????????????
? id ? a ? b ? c ?
???????????????????
? 1 ? 42 ? 7 ? 6 ?
???????????????????
(1 row)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2126 次 |
| 最近记录: |