我有一個表,它看起來像觸發/約束限制插入或更新
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'有多行? –