HY,
我试图在oracle中使用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)有关?
答案 0 :(得分: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)
);
答案 1 :(得分: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)
);