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_datemanager_idある必要がありますNOT NULL

  2. person_typeclient(大文字と小文字を区別しない) である場合、およびemployment_datemanager_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許可される値はemployeeand client(大文字と小文字を区別しない)のみであることに注意してください。他のタイプ (制限あり、なしemployment_date、または制限あり) を許可する場合は、追加の条件manager_idを追加する必要があります。OR

于 2013-05-27T01:18:42.777 に答える