从命令的第35行开始出错:
ALTER TABLE lee_person
ADD CONSTRAINT check_person_type
CHECK(CASE WHEN UPPER(person_type) = 'EMPLOYEE'
THEN employment_date IS NOT NULL
AND manager_id IS NOT NULL
WHEN UPPER(person_type) = 'CLIENT'
THEN employment_date IS NULL
AND manager_id IS NULL
END)
错误报告:
SQL Error: ORA-00905: missing keyword
00905. 00000 - "missing keyword"
*Cause:
*Action:
发布于 2013-05-27 01:18:42
您不能像您正在尝试的那样使用CASE
(CASE WHEN condition-A THEN condition-B AND condition-C
)。
看起来,您希望强制执行以下操作:
person_type
是employee
(不区分大小写),则employment_date
和manager_id
必须是NOT NULL
。person_type
是client
(不区分大小写),则employment_date
和manager_id
必须是NULL
。如果是这样的话,试一试吧:
ALTER TABLE lee_person
ADD CONSTRAINT check_person_type
CHECK ( (UPPER(person_type) = 'EMPLOYEE' AND
employment_date IS NOT NULL AND
manager_id IS NOT NULL)
OR (UPPER(person_type) = 'CLIENT' AND
employment_date IS NULL AND
manager_id IS NULL)
)
我已经测试过了,效果很好。
请注意,它允许的唯一person_type
值是employee
和client
(不区分大小写)。如果您希望允许其他类型(无论是否有employment_date
或manager_id
限制),则需要调整其他OR
条件。
https://stackoverflow.com/questions/16765087
复制相似问题