PostgreSQL:触发过程

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

我的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时,我必须设置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;