在SQL中创建具有空约束但具有空约束的表

在SQL中创建具有空约束但具有空约束的表,sql,constraints,create-table,Sql,Constraints,Create Table,我想创建一个列值大于0且可以为null的表 当我在创建表列时 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) ,

我想创建一个列值大于0且可以为null的表

当我在创建表列时

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)
  );
在“船舶吨位整数检查((沉船吨位>0)和沉船吨位为空”行中
当我向该列插入null值时,它违反了约束。我如何创建满足条件的表?谢谢将检查约束从
更改为

CHECK ((WRECK_TONNAGE>0) or WRECK_TONNAGE IS NULL)
您的约束引用了错误的列,CREAR*而不是SHIP*。请尝试以下定义语句:

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

错误报告:SQL错误:ORA-02290:检查约束(SYS_C00421597)违反了02290。00000-“检查约束(%s.%s)违反”*原因:插入的值不符合命名的检查*操作:不要插入违反约束的值。是的,我编辑了该值,但仍有违反上述约束的错误。@BolorCh。现在我发现了错误,我将约束创建为“故意”(带空格),然后尝试将值插入为“故意”(不带空格),这就是我出错的原因。谢谢各位