【发布时间】:2014-02-06 14:24:56
【问题描述】:
我有一张桌子,看起来像
MyTable (
Student ID,
Exam)
我想放置一个触发器/约束,描述:
学生 ID 可以出现多次,并且不必是唯一的。但是,这对 (Student ID, "French") 只能出现一次。所以每个学生只能有一个“法语”条目。法语是硬编码的
身份证考试 0001 德语 0001 历史 0001 法语 0001 法语尝试将“德语”字段更新为法语也会失败
到目前为止我已经尝试过
CREATE OR REPLACE TRIGGER MyTrigger BEFORE INSERT OR UPDATE ON MyTable
FOR EACH ROW
DECLARE
rowsCount INTEGER;
BEGIN
select count(*)
INTO rowsCount
from MyTable sc
where SC.SC_TYPE = 'FRENCH' and :new.StudentID = sc.StudentID;
IF rowsCount > 1
THEN
raise_application_error('-20098','You cannot have more than one French record per student.');
END IF;
end;
虽然这会引发 Mutate 错误。无论如何,这与完整性有关,所以我确信约束会更好,但希望得到一些关于如何实现这一点的建议。
【问题讨论】:
-
所以对
French的限制是具体的,应该允许他们有German的多行?