PostgreSQL:触发器过程
PostgreSQL: Trigger Procedures
我的 postgresql 数据库中有这两个 table:
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
table 我必须检查其余是否 = 0 然后:设置信用 table = 0 的 stat
列并获得 [=更新行的 38=] 并在 credit.id_emp = emp_with_credit.id_emp
[=28 时设置 emp_with_credit table = 0 的统计列=]
编辑:
到目前为止我做了什么:
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
.[=19= 时设置 emp_with_credit
table 的 stat
列 = 0 ]
您的触发器中没有 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;
我的 postgresql 数据库中有这两个 table:
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
table 我必须检查其余是否 = 0 然后:设置信用 table = 0 的 stat
列并获得 [=更新行的 38=] 并在 credit.id_emp = emp_with_credit.id_emp
[=28 时设置 emp_with_credit table = 0 的统计列=]
编辑:
到目前为止我做了什么:
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
.[=19= 时设置 emp_with_credit
table 的 stat
列 = 0 ]
您的触发器中没有 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;