sql
  • oracle
  • syntax-error
  • 2015-02-01 3 views 1 likes 
    1

    테이블을 생성하려고하는데 "ORA-00907 : 오른쪽 괄호 누락"오류가 발생합니다.오른쪽 괄호 오류 누락 (ORA-00907 : 오른쪽 괄호 누락)

    CREATE TABLE data_create (
    studentid NUMBER(9) PRIMARY KEY, 
    name  VARCHAR(25) NOT NULL, 
    program CHAR(4) 
    CONSTRAINT check_program 
    CHECK (program = 'CP', 'CPA', 'CSTC', 'CSTY'), 
    dob  DATE, 
    email  VARCHAR(20) 
    CONSTRAINT check_email UNIQUE (email), 
    phone  NUMBER(10), 
    feepaid NUMBER(6) 
    CONSTRAINT check_feepaid 
    CHECK (feepaid BETWEEN 0 and 9999.99) 
    ) 
    

    여러 가지 시도를했지만 오류를 해결할 수 없습니다. 나는 오라클에게 새로운 브랜드이고 구문에 익숙하지 않습니다. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까? 감사합니다.

    +0

    '' '' ' –

    +1

    '(프로그램 = 'CP', 'CPA', 'CSTC', 'CSTY')가 누락되어 'CHECK (프로그램 ='CP '| | 'CPA ||'CSTC '||'CSTY '), - 왜 고든이 제공 한 올바른 구문을 사용하지 않습니까? –

    답변

    2

    이 표현식은 무엇입니까?

    CHECK (program = 'CP' || 'CPA || 'CSTC' || 'CSTY'), 
    

    ||은 문자열 연결입니다. 아마도 다음과 같은 의미 일 수 있습니다.

    CHECK (program IN ('CP', 'CPA', 'CSTC', 'CSTY'), 
    

    다른 오류가있을 수 있지만 이는 두드러 질 수 있습니다.

    편집 :

    다음 작품 SQL Fiddle에 : 오라클이 권장 내가 varchar2()에 문자열을 변경

    CREATE TABLE data_create (
        studentid NUMBER(9) PRIMARY KEY, 
        name  VARCHAR2(25) NOT NULL, 
        program CHAR(4) 
        CONSTRAINT check_program CHECK (program IN ('CP', 'CPA', 'CSTC', 'CSTY')), 
        dob  DATE, 
        email  VARCHAR2(20) UNIQUE, 
        phone  NUMBER(10), 
        feepaid NUMBER(6) 
        CONSTRAINT check_feepaid 
         CHECK (feepaid BETWEEN 0 and 9999.99) 
    ) 
    

    참고. phone을 문자열로 변경하여 맨 앞에 0을 처리 할 수도 있습니다.

    +0

    또한이 솔루션에는'CPA'에 대한 작은 따옴표가 있습니다. –

    +0

    감사합니다. – Andrew

    +0

    변경된 내용과 누락 된 부분을 추가했습니다. 여전히 오류가 발생합니다. – Andrew

    관련 문제