2013-04-26 3 views
2

웹 및 다양한 포럼을 검색했지만이 방법이 작동하지 않는 이유를 알 수 없습니다.ORACLE - 비 기본 키에 NULL 값을 삽입 할 수 없습니다.

CREATE TABLE CUSTOMER(
custid Number(4), 
cfirstname varchar2(30), 
csurname varchar2(20) NOT NULL, 
billingaddr varchar2(30), 
cgender varchar2(1), 
CONSTRAINT custpk PRIMARY KEY (custid), 
CONSTRAINT genderconst CHECK(cgender in ('M','F','m','f')) 
); 

CREATE TABLE PRODUCT(
prodid Number(4), 
prodname varchar2(30), 
currentprice Number(6,2), 
CONSTRAINT cprice_chk CHECK(currentprice >= 0 AND currentprice <=5000), 
CONSTRAINT prodpk PRIMARY KEY (prodid), 
CONSTRAINT pricepos CHECK((currentprice >= 0)) 
); 

CREATE TABLE SALESPERSON(
spid Number(4), 
spfirstname varchar2(30), 
spsurname varchar2(30), 
spgender varchar2(1), 
CONSTRAINT salespk PRIMARY KEY (spid) 
); 

CREATE TABLE SHOPORDER(
ordid Number(4), 
deliveryaddress varchar2(30), 
custid Number(4) NOT NULL, 
spid Number(4) NOT NULL, 
CONSTRAINT orderpk PRIMARY KEY (ordid), 
CONSTRAINT orderfk1 FOREIGN KEY (custid) REFERENCES CUSTOMER(custid), 
CONSTRAINT orderfk2 FOREIGN KEY (spid) REFERENCES SALESPERSON(spid) 
); 

CREATE TABLE ORDERLINE(
qtysold Number(4), 
qtydelivered Number(4), 
saleprice Number (6,2), 
ordid Number(4) NOT NULL, 
prodid Number(4) NOT NULL, 
CONSTRAINT qty_chk CHECK (qtydelivered >= 0 AND qtydelivered <=99), 
CONSTRAINT price_chk CHECK(saleprice >= 0 AND saleprice <=5000), 
CONSTRAINT linefk1 FOREIGN KEY (ordid) REFERENCES SHOPORDER(ordid), 
CONSTRAINT linefk2 FOREIGN KEY (prodid) REFERENCES PRODUCT(prodid) 
); 

그리고 난 다음 삽입 할 삽입 문을 사용하고 있습니다 : 내 데이터베이스는 다음 표에서 구성되어

INSERT INTO SHOPORDER(ordid, deliveryaddress, spid) 
VALUES (41, NULL, 23); 

내가 '사용'또는 NULL이 나에게 오류를 제공 여부 :

ORA-01400 : ("S9710647". "SHOPORDER". "CUSTID")에 NULL을 삽입 할 수 없습니다.

deliveryaddress를 기본 키로 설정하지 않았거나 외부 키가 아니거나 NOT NULL CoNSTRAINTS를 포함하고 있다는 내 문제.

여기에 누락 된 요소가 있습니까? 대다수의 포럼에는 제약과 관련된 문제가있는 사람들이있었습니다. 상충되는 제약 조건을 볼 수 없습니다.

건배

답변

5

을 당신은 열 아마 NULL을 기본값으로 다른 사람을 의미 SHOPORDERordid, deliveryaddressspid를 삽입하고 있습니다.

그러나 custIdNOT NULL으로 지정 했으므로 허용되지 않습니다. 당신은 실제로 불만이 오류 메시지를보고 무엇인지 알 수 있습니다 : 그것은 분명 거기 CUSTID 열이 문제를 보내고하고 기본이어야합니다, 그래서 당신은 당신이 명시 적으로 설정하지 않은을 알고

ORA-01400: cannot insert NULL into ("S9710647"."SHOPORDER"."CUSTID"); 
                  ^^^^^^ 

너에게 슬픔을 유발하는 가치.

테이블에 기본값 인 CUSTOMER이 있는지 확인해야하지만 해당 열에 특정 값을 삽입하거나 NULL이 아닌 기본값을 지정하여 수정할 수 있습니다. 외래 키 제약 조건은 실패합니다.

INSERT INTO SHOPORDER(ordid, deliveryaddress, spid) 
VALUES (41, NULL, 23); 

당신이 명시 적 값을 지정하지 않은 모든 열에 대해 기본값을 사용하므로이 동등의 :

+0

위대한 답변! 이 점을 이해해 주셔서 감사합니다. –

1

문제는이 때문이다

INSERT INTO SHOPORDER(ordid, deliveryaddress, custid, spid) 
VALUES (41, NULL, NULL, 23); 

을 위반하는 제약 조건은 custid입니다.

1
CREATE TABLE SHOPORDER(
ordid Number(4), 
deliveryaddress varchar2(30), 
custid Number(4) NOT NULL, 
spid Number(4) NOT NULL, 
CONSTRAINT orderpk PRIMARY KEY (ordid), 
CONSTRAINT orderfk1 FOREIGN KEY (custid) REFERENCES CUSTOMER(custid), 
CONSTRAINT orderfk2 FOREIGN KEY (spid) REFERENCES SALESPERSON(spid) 
); 

INSERT INTO SHOPORDER(ordid, deliveryaddress, spid) 
VALUES (41, NULL, 23); 

귀하의 문제는 NOT NULL로 정의하고있다 custid 함께. 값을으로 지정하지 않으므로 NULL으로 설정하십시오.