2013-01-11 43 views
1

我已经创建了如下表触发 - Postgres的

 
professor 
------------------------------------------------------ 
ProfNr | Name | Room | Bonus 
------------------------------------------------------ 

lecture 
-------------------------------------------------- 
Lecture No | Title | semester hours | held by (Prof Reference) 
-------------------------------------------------- 

我要找使用每周一课的教授Postgres的下一个触发给奖金(年薪)

也许我可以帮助别人会, 非常好!

或者为可能触发其他应用

+0

什么你问像应用程序逻辑的声音,将得到更好的放置在应用程序代码,而不是在一个触发器。或者这是一项学术演习?如果是这样,你能更详细地描述你想要做什么吗? –

+0

我只是想举个例子,一个触发器显示了完整性,(从上下文学生管理我有表格:学生,讲座,教授,助理和听(与学生和课程)和检查(与教授,学生,当然和年级!) 现在我想有一个在postgres下运行良好的触发器,也可以是另一个应用程序,也不是那么复杂,主要的事情触发器与表做的事情! 会很好如果有人可以帮助我 非常感谢 – viv1d

+0

@ viv1d;请将相关信息放入您的*问题*中,而不是放入注释中,在您的问题左侧点击“编辑”并澄清它[此处是触发器的一个示例](http://stackoverflow.com/a/12791071/939860)有基本的解释搜索更多](http://stackoverflow.com/search?q= [postgresql] + [触发器] ++创建+功能)。 –

回答

0

首先更是一种理念,我觉得你的奖金应该是另一个表,以便您可以根据需要聚集。因此,这让三个表:

CREATE TABLE professor (
    profid serial not null unique, 
    ... 
); 

CREATE TABLE lecture (
    lecture_id serial not null unique, 
    professor int not null references professor(profid), 
    ... 
); 

CREATE TABLE prof_bonus (
    lecture_id int references lecture(id), 
    profid int references professor (profid), 
    bonus_amt numeric not null, 
    primary key (lecture_id, profid) 
); 

CREATE FUNCTION add_bonus() RETURNS TRIGGER LANGUAGE PLPGSQL AS 
$$ 
BEGIN 
INSERT INTO prof_bonus (lecture_id, profid, bonus_amt) 
VALUES (new.lecture_id, new.profid, 100); 
RETURN NEW; 
END; 
$$; 

CREATE TRIGGER add_bonus AFTER INSERT TO lecture FOR EACH ROW 
EXECUTE PROCEDURE add_bonus();