表
上面的螢屏截圖顯示了兩個表employee,department其中員工包含員工的詳細資訊,部門包含有關部門的資訊。
當在插入或洗掉employee表,根據不同的dno值,遞增/遞減在做dcount了的department表。
目標是在員工表中插入和洗掉時自動計算部門員工的數量。
我嘗試使用使用 if 和 elsif 操作“插入”和“洗掉”來遞增/遞減值的函式,但所做的只是將 dcount 中的所有值遞增 1。
它不會增加/減少與員工表中dcount插入或洗掉的dno值相關的特定部門值。
需要一些幫助和指導。
謝謝你。
格魯希斯
uj5u.com熱心網友回復:
測驗用表
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);
我創建了兩個函式,它們在部門表中遞增和遞減計數器,然后將它們添加到洗掉和插入的觸發器中
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/358019.html
標籤:sql PostgreSQL的 功能 触发器 sql更新
