我有一個非常簡單的一塊一直現在竊聽我的大腦幾個小時:CHECK約束值
CREATE TABLE driving_school_questions(
question VARCHAR2(200),
picture VARCHAR2(2),
CONSTRAINT q_p_chk CHECK ((question LIKE '%see picture%' AND picture IS NOT NULL)
AND
(question LIKE '% %' OR picture IS NULL))
);
我試圖在這裏實現的是創造一個約束如果問題字段包含「see picture」,那麼圖片不能爲NULL,否則對於每個不包含「see picture」的問題都可以爲NULL。我已經在CHECK子句中嘗試過其他表達式,但是已經有效。
這些插入精細的工作:
INSERT INTO driving_school_questions (question, picture)
VALUES ('blahblah see picture', '23'); --NOT NULL so ok for now
INSERT INTO driving_school_questions (question, picture)
VALUES ('blah blah see picture ', NULL); --It's ok to be NULL(constraint violated)
這不是工作:
INSERT INTO driving_school_questions (question, picture)
VALUES ('blah blah', NULL);--it should work but constraint violation
'問題'可以'空'嗎?大概不會,在這種情況下,你應該把*作爲一個約束(在列定義後面寫下'NOT NULL')。如果它可以是空的,那麼檢查約束將不得不處理這種可能性 - 在這種情況下,您將需要分享業務需求。 – mathguy