2014-12-16 2 views
0

누구든지 내 SQL 문을보고 잘못된 점을 알 수 있습니까? 기존 테이블에 새 제약 조건을 추가하려고하면 오류가 계속 발생합니다.CHECK를 사용하여 기존 테이블에 제약 조건 추가

Error report: 
SQL Error: ORA-01735: invalid ALTER TABLE option 
01735. 00000 - "invalid ALTER TABLE option" 
*Cause:  
*Action: 
+1

참고 :이 표현식은 정규 표현식처럼 의심 스럽습니다 :'[^ A-L]'- 그들은'LIKE' 연산자로 어떻게 생각할 수 있는지를 알 수 없습니다. 'REGEXP_LIKE' (그리고'%'s)를 제거해야 할 수도 있습니다. –

답변

3

당신은 check의 전체 상태 괄호가 필요합니다

alter table seat 
    add constraint check_seats 
     CHECK ((BLOCKNO = 'FRONT' AND ROWNO NOT LIKE '%[^A-J]%' AND SEATNO <=40) OR 
       (BLOCKNO = 'MIDDLE' AND ROWNO NOT LIKE '%[^A-L]%' AND SEATNO <=50) OR 
       (BLOCKNO = 'BACK' AND ROWNO NOT LIKE '%[^A-N]%' AND SEATNO <=60) 
      ); 
+0

@NashTamu. . . 이 답변에 대해 저에게 감사했지만 다른 대답을 선택하신 것은 드뭅니다. 물론, OP로서, 당신은 당신이 좋아하는 대답을 받아 들일 권리가 있습니다. –

3

는 점검 제한 조건에 대한 또 하나의 괄호를 추가합니다.

 CHECK ((BLOCKNO = 'FRONT' AND ROWNO NOT LIKE '%[^A-J]%' AND SEATNO <=40) OR 
      (BLOCKNO = 'MIDDLE' AND ROWNO NOT LIKE '%[^A-L]%' AND SEATNO <=50) OR 
      (BLOCKNO = 'BACK' AND ROWNO NOT LIKE '%[^A-N]%' AND SEATNO <=60) 
      ); 
+0

''% [^ A-J] % ''는 정규식과 비 정규식 구문을 혼합합니다. 따라서 NOT LIKE는 ROWNO의 값과 관계없이 항상 true입니다. – APC

관련 문제