2013-05-26 76 views
0

我想创建一个表值,该值大于0且可以为null。在SQL中创建一个具有空约束的表,但有约束

当我在该行中创建表列

CREATE TABLE Ship 
    (
    SITE_ID   INTEGER NOT NULL, 
    Ship_CATEGORY VARCHAR2(50) CHECK (WRECK_CATEGORY IN ('Military','Government','Passenger', 'Unknown', 'Commercial')), 
    Ship_TYPE  VARCHAR2(100) , 
    Ship_TONNAGE INTEGER CHECK ((WRECK_TONNAGE>0) AND WRECK_TONNAGE IS NULL) , 
    Ship_CAUSE  VARCHAR2(100) NULL CHECK (WRECK_CAUSE IN ('Fire', 'Collision','Unknown',' Deliberate', 'Explosion',' Attack', 'Other')), 
    Ship_DATESUNK DATE NULL, 
    Ship_CONDITION VARCHAR2(50) NULL CHECK (WRECK_CONDITION IN ('Excellent', 'Moderate','Poor', 'Very Poor')), 
    CONSTRAINT SHIPWRECK_PK PRIMARY KEY (SITE_ID) 
); 

的这样做 “Ship_TONNAGE INTEGER CHECK((WRECK_TONNAGE> 0)和WRECK_TONNAGE IS NULL)”, 当我插入空值以这一栏,它违反了约束。我如何创建我的表,因为它满足条件?而不是SHIP

CHECK ((WRECK_TONNAGE>0) or WRECK_TONNAGE IS NULL) 

你的约束引用错列,沉船*:谢谢

回答

1

变化从and检查约束到or。试试这个定义语句:

CREATE TABLE Ship 
    (
    SITE_ID   INTEGER NOT NULL, 
    Ship_CATEGORY VARCHAR2(50) CHECK (SHIP_CATEGORY IN ('Military','Government','Passenger', 'Unknown', 'Commercial')), 
    Ship_TYPE  VARCHAR2(100) , 
    Ship_TONNAGE INTEGER CHECK ((SHIP_TONNAGE>0) or SHIP_TONNAGE IS NULL) , 
    Ship_CAUSE  VARCHAR2(100) NULL CHECK (SHIP_CAUSE IN ('Fire', 'Collision','Unknown',' Deliberate', 'Explosion',' Attack', 'Other')), 
    Ship_DATESUNK DATE NULL, 
    Ship_CONDITION VARCHAR2(50) NULL CHECK (SHIP_CONDITION IN ('Excellent', 'Moderate','Poor', 'Very Poor')), 
    CONSTRAINT SHIPWRECK_PK PRIMARY KEY (SITE_ID) 
); 
+0

错误报告: SQL错误:ORA-02290:检查约束(SYS_C00421597)违反 02290. 00000 - “检查约束违反(%s%S)。” *原因:插入的值不符合指定的检查 *操作:请勿插入违反约束的值。 –

+0

是的,我编辑,但我仍然有错误,如上述的违反约束。 –

+0

@BolorCh。 。 。它适用于SQL Fiddle(http://www.sqlfiddle.com/#!4/351d2/13)。 –