2011-01-07 83 views
1

HY,甲骨文檢查REGEXP_LIKE

我試圖把一個約束與甲骨文REGEXP_LIKE,但我一直歌廳一個ORA-00920:無效的關係運算符

錯誤,這裏是我的代碼(錯誤的是在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) 
); 

上午我做錯了什麼,或者它與我的Oracle版本(Oracle 10g中XE)做結束?

回答

6

呦你必須在check關鍵字之後加上禁忌。

以下工作,至少在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 2011-01-08 00:06:44

+0

@andy:我仍然讀您的評論第一:) – Ha11owed 2011-01-08 00:13:16

1

缺失缺陷。 試試這個:

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) 
);