Dan*_*ney 3 sql oracle ora-01400
我搜索过网络和各种论坛,但我无法弄清楚为什么这不起作用.我的数据库由以下表格组成:
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)
);
Run Code Online (Sandbox Code Playgroud)
我使用insert语句插入以下内容:
INSERT INTO SHOPORDER(ordid, deliveryaddress, spid)
VALUES (41, NULL, 23);
Run Code Online (Sandbox Code Playgroud)
无论我使用''还是NULL,它都会给我错误:
ORA-01400:无法插入NULL("S9710647"."SHOPORDER"."CUSTID");
我的问题是我没有将deliveryaddress设置为主键,也不是外键或包含任何NOT NULL CoNSTRAINTS.
我在这里缺少一个因素吗?大多数论坛都有人遇到与限制有关的问题.我看不出任何冲突的约束.
干杯
你只是插入列ordid
,deliveryaddress
并spid
成为SHOPORDER
这意味着其他人可能会默认NULL
.
但是,您已声明custId
为NOT NULL
不允许这样做.您可以通过查看错误消息实际告诉投诉是什么:
ORA-01400: cannot insert NULL into ("S9710647"."SHOPORDER"."CUSTID");
^^^^^^
Run Code Online (Sandbox Code Playgroud)
它显然在CUSTID
那里遇到了麻烦,你知道你没有明确地设置它,所以它必须是导致你悲伤的默认值.
您可以通过向该列中插入特定值来修复它,或者通过为其提供非NULL默认值来修复它,但是您必须确保CUSTOMER
表中存在默认值,以免orderfk1
外键约束失败.