Increment/decrement table 中的计数值取决于另一个 table 的特定列值的 insert/delete 使用 postgresql 中的触发器
Increment/decrement count value in a table depending on insert/delete of a specific column value of another table using triggers in postgresql
Tables
上面的屏幕截图显示了两个 tables employee
和 department
,其中 employee 包含员工的详细信息,department 包含有关部门的信息。
在 employee
table 中插入或删除时,根据 dno
值,必须在 dcount
中执行 increment/decrement department
table.
目标 是在插入和删除员工 table.
时自动计算部门中的员工人数
我尝试使用函数 increments/decrements 使用 if 和 elsif 进行操作 'INSERT' 和 'DELETE' 的值,但所做的只是将 dcount 中的所有值递增 1。
它不 increase/decrease 特定部门 dcount
值对应于从员工 table 中插入或删除的 dno
值。
需要一些帮助和指导。
谢谢。
格鲁希斯
tables 用于测试
create table employee (fname text, dno integer);
create table department (dname text, dnumber integer, dcount integer default 0);
insert into department (dname,dnumber) values ('Research',5),('Administration',4),('Headquarters',1);
我在部门table中创建了两个递增和递减计数器函数,然后将它们添加到删除和插入时的触发器
CREATE or replace FUNCTION increment_c() RETURNS trigger AS $increment_c$
BEGIN
update department set dcount=dcount+1 where dnumber=NEW.dno;
RETURN NULL;
END;
$increment_c$ LANGUAGE plpgsql;
CREATE or replace FUNCTION decrement_c() RETURNS trigger AS $decrement_c$
BEGIN
update department set dcount=dcount-1 where dnumber=OLD.dno;
RETURN NULL;
END;
$decrement_c$ LANGUAGE plpgsql;
create TRIGGER tr_insert AFTER insert on employee for each row execute procedure increment_c();
create TRIGGER tr_delete AFTER delete on employee for each row execute procedure decrement_c();
测试和结果插入
insert into employee values ('James',1),('Jhon',5),('Frenklin',5);
INSERT 0 3
postgres=# select * from department;
dname | dnumber | dcount
----------------+---------+--------
Administration | 4 | 0
Headquarters | 1 | 1
Research | 5 | 2
和删除
delete from employee where fname='Jhon';
DELETE 1
postgres=# select * from department;
dname | dnumber | dcount
----------------+---------+--------
Administration | 4 | 0
Headquarters | 1 | 1
Research | 5 | 1
Tables
上面的屏幕截图显示了两个 tables employee
和 department
,其中 employee 包含员工的详细信息,department 包含有关部门的信息。
在 employee
table 中插入或删除时,根据 dno
值,必须在 dcount
中执行 increment/decrement department
table.
目标 是在插入和删除员工 table.
时自动计算部门中的员工人数我尝试使用函数 increments/decrements 使用 if 和 elsif 进行操作 'INSERT' 和 'DELETE' 的值,但所做的只是将 dcount 中的所有值递增 1。
它不 increase/decrease 特定部门 dcount
值对应于从员工 table 中插入或删除的 dno
值。
需要一些帮助和指导。
谢谢。
格鲁希斯
tables 用于测试
create table employee (fname text, dno integer);
create table department (dname text, dnumber integer, dcount integer default 0);
insert into department (dname,dnumber) values ('Research',5),('Administration',4),('Headquarters',1);
我在部门table中创建了两个递增和递减计数器函数,然后将它们添加到删除和插入时的触发器
CREATE or replace FUNCTION increment_c() RETURNS trigger AS $increment_c$
BEGIN
update department set dcount=dcount+1 where dnumber=NEW.dno;
RETURN NULL;
END;
$increment_c$ LANGUAGE plpgsql;
CREATE or replace FUNCTION decrement_c() RETURNS trigger AS $decrement_c$
BEGIN
update department set dcount=dcount-1 where dnumber=OLD.dno;
RETURN NULL;
END;
$decrement_c$ LANGUAGE plpgsql;
create TRIGGER tr_insert AFTER insert on employee for each row execute procedure increment_c();
create TRIGGER tr_delete AFTER delete on employee for each row execute procedure decrement_c();
测试和结果插入
insert into employee values ('James',1),('Jhon',5),('Frenklin',5);
INSERT 0 3
postgres=# select * from department;
dname | dnumber | dcount
----------------+---------+--------
Administration | 4 | 0
Headquarters | 1 | 1
Research | 5 | 2
和删除
delete from employee where fname='Jhon';
DELETE 1
postgres=# select * from department;
dname | dnumber | dcount
----------------+---------+--------
Administration | 4 | 0
Headquarters | 1 | 1
Research | 5 | 1