2013-05-26 4 views
0

열 값이> 0이면서 null 일 수있는 테이블을 만들고 싶습니다. I는 라인 테이블 열SQL에서 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) 
); 

의 생성에 이렇게하고

"Ship_TONNAGE INTEGER 검사 ((WRECK_TONNAGE> 0) AND WRECK_TONNAGE IS NULL)"난에 널 값을 삽입하고 이 열은 제약 조건을 위반합니다. 조건을 만족하면서 테이블을 만드는 방법은 무엇입니까? 감사합니다

답변

1

를 변경한다 orand에서 점검 제한 조건 :

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

제약 조건이 잘못된 열을 참조하고, 난파선 * 대신 선박의 *. 이 정의 문을보십시오 :

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)에서 저에게 도움이됩니다. –

관련 문제