2011-01-07 5 views
1

생수,오라클 체크 REGEXP_LIKE

내가 오라클에 REGEXP_LIKE에 제약을 넣어 노력하고 있어요,하지만 난이 ORA-00920을에 geting 계속 : 유효하지 않은 관계 연산자를

오류가 여기 내 코드 (오류입니다 ck_files_name 제약

CREATE TABLE files(
    idFile INT PRIMARY KEY, 
    idParent INT REFERENCES files, 
    name VARCHAR2(256), 
    type CHAR(1), 

    CONSTRAINT ck_files_name CHECK REGEXP_LIKE(name, '[^\.]'), -- error ORA-00920: invalid relational operator 
    CONSTRAINT ck_files_type CHECK type IN ('d', 'f'), 
    CONSTRAINT ck_files_idFile_idParent CHECK (idFile <> idParent), 
    CONSTRAINT uq_files_idFile_name UNIQUE (idParent, name) 
); 

오전 내가 뭔가 잘못하고, 또는 내 오라클 버전 (오라클 10g XE를) 함께 할 수 있는가의 끝?

답변

6

check 키워드 뒤에 parantheses를 써야합니다.

다음은 적어도 Oracle 11, R2에서 작동합니다.

CREATE TABLE files(
    idFile INT PRIMARY KEY, 
    idParent INT REFERENCES files, 
    name VARCHAR2(256), 
    type CHAR(1), 
    CONSTRAINT ck_files_name CHECK (REGEXP_LIKE(name, '[^\.]')), 
    CONSTRAINT ck_files_type CHECK (type IN ('d', 'f')), 
    CONSTRAINT ck_files_idFile_idParent CHECK (idFile <> idParent), 
    CONSTRAINT uq_files_idFile_name UNIQUE (idParent, name) 
); 
+0

당신이 나를이 그것에 +1 – diagonalbatman

+0

@andy를 이길 : 난 여전히 당신의 코멘트를 읽어 첫째 : 예,이 문제가 – Ha11owed

1

paranthesis가 누락되었습니다. 이 시도 :

CREATE TABLE files(
    idFile INT PRIMARY KEY, 
    idParent INT REFERENCES files, 
    name VARCHAR2(256), 
    type CHAR(1), 

    CONSTRAINT ck_files_name (CHECK REGEXP_LIKE(name, '[^\.]')),  
    CONSTRAINT ck_files_type (CHECK type IN ('d', 'f')), 
    CONSTRAINT ck_files_idFile_idParent (CHECK (idFile <> idParent)), 
    CONSTRAINT uq_files_idFile_name UNIQUE (idParent, name) 
); 
+0

이었고, 덕분에 많이! – Ha11owed