2011-01-07 6 views
1

hy,Orakel Scheck REGEXP_LIKE

Ich versuche, eine Einschränkung mit REGEXP_LIKE im Orakel zu setzen, aber ich halte eine ORA-00920 Geting: ungültiger relationalen Operator

Fehler, hier sind mein Code (der Fehler am Ende des ck_files_name Constraint

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

Bin ich etwas falsch zu machen, oder es mit meinem oracle Version (oracle 10g xe)?

Antwort

6

Yo hat zu tun Sie müssen Klammern nach dem Schlüsselwort check setzen.

Folgendes funktioniert, zumindest mit 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

Sie schlugen mich, um es +1 – diagonalbatman

+0

@andy: Ich lese immer noch Ihr Kommentar zuerst :) – Ha11owed

1

Paranthesis fehlt. Versuchen Sie folgendes:

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

ja das war das Problem, vielen Dank !!! – Ha11owed