PostgreSQL:触发过程
我的postgresql数据库中有以下两个表: 这是: 我想在更新时创建一个执行此操作的过程触发器: 当我更新信用表中的一行时,我必须检查其余部分是否为0,然后:设置信用表的stat列=0,并获取更新行的id_emp,当credit.id_emp=emp_credit.id_emp时,设置emp_的stat列with_credit table=0 编辑: 到目前为止我所做的:PostgreSQL:触发过程,postgresql,triggers,procedure,Postgresql,Triggers,Procedure,我的postgresql数据库中有以下两个表: 这是: 我想在更新时创建一个执行此操作的过程触发器: 当我更新信用表中的一行时,我必须检查其余部分是否为0,然后:设置信用表的stat列=0,并获取更新行的id_emp,当credit.id_emp=emp_credit.id_emp时,设置emp_的stat列with_credit table=0 编辑: 到目前为止我所做的: 这非常有效,但仍然是第二部分,当credit.id\u emp=emp\u with\u credit.id\u emp
这非常有效,但仍然是第二部分,当credit.id\u emp=emp\u with\u credit.id\u emp时,我必须设置emp\u with\u credit table=0的stat列。触发器中没有UPDATE语句
CREATE FUNCTION credit_stamp()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.rest = 0
THEN
UPDATE emp_with_credit SET stat = 0 WHERE emp_with_credit.id_emp = NEW.id_emp
NEW.stat = 0;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
到目前为止你尝试了什么@FrankHeikens检查我的更新。看起来您需要更新表emp_,并在函数中使用_信用。切勿使用浮点类型float、real和double-precision。用数字代替。@MikeSherrill'CatRecall'你能解释一下区别吗?
CREATE TABLE emp_with_credit
(
id serial NOT NULL,
id_emp integer,
stat integer,
CONSTRAINT emp_with_credit_pkey PRIMARY KEY (id)
)
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();
CREATE FUNCTION credit_stamp()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.rest = 0
THEN
UPDATE emp_with_credit SET stat = 0 WHERE emp_with_credit.id_emp = NEW.id_emp
NEW.stat = 0;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;