2015-10-17 3 views
1

Я хотел бы знать, как я мог убедиться, что значение SecondInstrument не соответствует значению в PrimInstrument, так как музыкант не может быть хорошим с тем же инструментом дважды. До сих пор, это то, что я пытался до сих пор, и я получил сообщение об ошибке:Ограничение проверки Oracle SQL

02438. 00000 - "Column check constraint cannot reference other columns" 
*Cause: attempted to define a column check constraint that references 
      another column. 
*Action: define it as a table check constraint. 

Может кто-нибудь помочь мне в этом? ;) Заранее спасибо.


Create table SessionMusician (

Musician_ID number constraint pkSessionMus_Mus_ID Primary Key, 

StageName varchar2(30)constraint nnSessionMus_StageName Not NULL, 

RealName varchar2(30)constraint nnSessionMus_RealName Not NULL, 

PrimInstrument varchar2(30) constraint nnSessionMus_PrimInstrumant Not Null, 

SecondInstrument varchar2(30) Default 'N/A' Constraint 
chk_SessionMus_Secinstrument check (SecondInstrument <> PrimInstrument), 

CONSTRAINT SessionMusician_unique UNIQUE (StageName,RealName)); 
+0

Вы помечены неправильно. 'oracle-sqldeveloper' посвящен инструменту, и ваш вопрос не имеет никакого отношения к инструменту. – Andreas

ответ

0

Вы должны сделать это в out-of-line constraint:

CREATE TABLE SessionMusician (
    Musician_ID  NUMBER  CONSTRAINT pkSessionMus_Mus_ID   PRIMARY KEY, 
    StageName   VARCHAR2(30) CONSTRAINT nnSessionMus_StageName  NOT NULL, 
    RealName   VARCHAR2(30) CONSTRAINT nnSessionMus_RealName  NOT NULL, 
    PrimInstrument VARCHAR2(30) CONSTRAINT nnSessionMus_PrimInstrumant NOT NULL, 
    SecondInstrument VARCHAR2(30) DEFAULT 'N/A', 
    CONSTRAINT SessionMusician_unique  UNIQUE (StageName, RealName), 
    CONSTRAINT chk_SessionMus_Secinstrument CHECK (SecondInstrument <> PrimInstrument) 
); 
+0

Благодарим за редактирование сообщения и ответ на него! lol – Laros3

+0

Надеюсь, вы кое-чему научились у обоих. ;-) – Andreas

Смежные вопросы