2015-10-17 107 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

感谢您编辑我的文章并回答它!大声笑 – Laros3

+0

希望你从这两方面学到了一些东西。 ;-) – Andreas