3

从命令中的第 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:
4

1 回答 1

4

你不能使用CASE你想要做的事情(CASE WHEN condition-A THEN condition-B AND condition-C)。

看起来您想要强制执行以下操作:

  1. 如果person_typeemployee(不区分大小写),employment_date并且manager_id必须是NOT NULL.

  2. 如果person_typeclient(不区分大小写),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它允许的唯一值是employeeclient(不区分大小写)。如果您想允许其他类型(有或没有employment_datemanager_id限制),您需要附加附加OR条件。

于 2013-05-27T01:18:42.777 回答