我目前正在做一个家庭作业项目,我们正在创建触发器用户plpgsql 我已设法找出更新/插入的触发器,但我在编写时遇到了麻烦 删除一个,感觉就像我在网上用文档圈了一圈。
我们给出的两个表是:
MAJOR(mCode,name)和主键mCode。
使用主键{sId}和外键mCode的STUDENT(sId,firstName,lastName,mCode,pointsEarned)
基本要求是,如果学生选择了专业,则不能删除或更改专业。 (我已经实现了更新/插入触发器)
我99%确定我的创建触发器只是:
CREATE TRIGGER major_delete
BEFORE UPDATE OR INSERT ON student
FOR EACH ROW EXECUTE PROCEDURE major_delete_trigger();
我已经为这个功能提出了两个基本的想法(基于讲座笔记):
CREATE OR REPLACE FUNCTION major_delete_trigger()
RETURNS trigger AS $$
DECLARE m RECORD;
BEGIN
SELECT * INTO m FROM major WHERE OLD.mcode = mcode;
IF NOT FOUND THEN RETURN OLD;
ELSE
DELETE FROM major WHERE mcode = OLD.mcode;
RETURN NULL;
END IF;
END;
$$ LANGUAGE 'plpgsql';
什么都不做 - 在我的数据库上运行测试时删除应该失败仍然成功。
其次:
CREATE OR REPLACE FUNCTION major_delete_trigger()
RETURNS trigger AS $$
BEGIN
IF (TG_OP = 'DELETE') THEN
DELETE FROM major WHERE mcode=OLD.mcode;
IF NOT FOUND THEN RETURN NULL; END IF;
END IF;
END;
$$ LANGUAGE 'plpgsql';
执行行' DELETE FROM major WHERE mcode = OLD.mcode;'直到堆栈上没有剩余空间。
在进行更新功能时,我发现我只是把它看作是非常复杂,所以我不确定这是否相同。 任何有用的想法或文档都将受到高度赞赏!