【发布时间】:2015-02-21 10:05:27
【问题描述】:
我的 postgresql 数据库中有这两个表:
CREATE TABLE credit
(
id serial NOT NULL,
id_emp integer,
amount double precision,
refund double precision,
rest double precision,
stat integer,
CONSTRAINT credit_pkey PRIMARY KEY (id)
)
还有这个:
CREATE TABLE emp_with_credit
(
id serial NOT NULL,
id_emp integer,
stat integer,
CONSTRAINT emp_with_credit_pkey PRIMARY KEY (id)
)
我想创建一个过程触发器ON UPDATE 来完成这项工作:
当我更新credit 表中的一行时,我必须检查其余部分是否 = 0:设置 credit 表的 stat 列 = 0 并获取更新行的 id_emp 并设置 emp_with_credit 表的 stat 列 = 0 当 credit.id_emp = emp_with_credit.id_emp
编辑:
到目前为止我做了什么:
CREATE FUNCTION credit_stamp() RETURNS trigger AS $credit_stamp$
BEGIN
IF NEW.rest = 0 THEN
NEW.stat = 0;
END IF;
RETURN NEW;
END;
$emp_stamp$ LANGUAGE plpgsql;
CREATE TRIGGER credit_stamp BEFORE UPDATE ON credit
FOR EACH ROW EXECUTE PROCEDURE credit_stamp();
这很好用,但仍然是第二部分,当credit.id_emp = emp_with_credit.id_emp 时,我必须设置emp_with_credit table = 0 的stat 列。
【问题讨论】:
-
@FrankHeikens 检查我的更新。
-
看起来您需要在函数中对表 emp_with_credit 进行更新。
-
永远不要使用浮点类型(浮点、实数、双精度)来赚钱。改用 numeric()。
-
@MikeSherrill'CatRecall' 你能解释一下区别吗?
标签: postgresql triggers procedure