我有下表。PL/SQL - 一個人只有一個值
CLASS_HAS_STUDENTS (
PER_SSN INTEGER NOT NULL,
PER_YEAR INTEGER NOT NULL, /*These two are PKs for a student*/
SCHOOL_CODE INTEGER NOT NULL, /*PK for a school*/
CLASS_YEAR INTEGER NOT NULL,
CLASS_NUMBER INTEGER NOT NULL,
CLASS_TEACHTYPE CHAR(3) NOT NULL, /*These three are PKs for a class*/
STUDCLASS_STATUS CHAR(1) NOT NULL
constraint CKC_STUDCLASS_STATUS_CLASS_TI check (StudClass_Status IN ('E', 'Y', 'T', 'P', 'F')),
STUDCLASS_LISTNUMBER INTEGER NOT NULL,
STUDCLASS_ROLLNUMBER INTEGER NOT NULL
);
(此代碼缺少一些細微的約束)
現在,我需要一種方法來檢查一個PER_SSN/PER_YEAR(一個人的PK)只能有一個「E」(「已登記」)狀態。我不能用觸發器來做到這一點(因爲我從同一張表中選擇),我不知道我是否可以使用檢查約束(我可以在這裏使用COUNT()?)。任何幫助表示讚賞。
我想你可以用'BEFORE INSERT'觸發器來做到這一點。做一個'count',如果有什麼不對的話'raise_application_error'。你嘗試過嗎? – 2012-07-29 20:47:08
哦,完全沒有!我可以在插入前做到這一點嗎?如果是這樣,那麼這一切都解決了。我會去檢查一下,謝謝! – 2012-07-29 20:48:11