我有一个表,它看起来像触发/约束限制插入或更新
MyTable (
Student ID,
Exam)
我想将触发/约束描述:
学生证可以出现很多次,不必须是独一无二的。但是,这对(学生证,“法国”)只能出现一次。所以每个学生只能有一个“法国”条目。法国是硬编码
ID Exam 0001 German 0001 History 0001 French 0001 French <-- This insert should fail.
Attemting更新“德国”字段法国人也应该会失败
到目前为止,我已经试过
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;
这虽然抛出一个变异的错误。无论如何,这与完整性有关,所以我相信一个限制会更好,但是会对如何实现这一点提供一些建议。
那么对'French'的限制是特定的,他们应该被允许与'German'有多行? –