我是Oracle新手,希望获得以下帮助:
我创建了一个名为Vehicle的表,该表由2个表中的数据填充:Rentals(主表)和Configuration
当我尝试通过从表格中选择数据来为config_id插入值时发现错误
错误说不能接受Vehicle_Id中的空值(没有任何空值)
*注意:Rentals表中的Vehicle_Id由序列
生成create table configuration
(config_id int not null,
SEAT NUMBER(2),
2 3 4 DOORS NUMBER(2),
5 LARGE_BAGS NUMBER(2),
SMALL_BAGS NUMBER(2),
Vehicle_Type Varchar2(25),
primary key(config_id));
6 7 8
Table created.
SQL> SQL>
create sequence config_seq start with 1 increment by 1 nocache;
SQL>
Sequence created.
SQL> SQL>
SQL> insert into configuration (seat,doors,large_bags,small_bags,vehicle_type,config_id)
select x.seat,x.doors,x.large_bags,x.small_bags,x.vehicle_type,config_seq.nextval from (select distinct seat,doors,large_bags,small_bags,vehicle_type from rentals) x;
2 3
12 rows created.
SQL> SQL> SQL> create table Vehicle
(VEHICLE_ID int,
VEHICLE VARCHAR2(25) NOT NULL,
2 3 4 RENTAL_COMMENT CHAR(20),
5 COMPANY_ID int,
config_id int,
Primary key(VEHICLE_ID),
6 7 8 foreign key(company_id) references company(company_id),
9 foreign key(config_id) references configuration(config_id) on delete cascade);
Table created.
SQL>
SQL> insert into Vehicle (vehicle_id,vehicle,rental_comment,company_id)
select vehicle_id,vehicle,rental_comment,company_id from rentals; 2
20 rows created.
SQL> insert into vehicle(config_id) select config_id from configuration;
*
ERROR at line 1:
ORA-01400: cannot insert NULL into ("RGAKHAR"."VEHICLE"."VEHICLE_ID")
答案 0 :(得分:2)
你对这个错误有什么看法?您已将vehicle.vehicle
定义为NOT NULL
。您的insert
看起来像是:
insert into vehicle(config_id)
select config_id from configuration;
列的默认值为NULL
,不允许这样做。你有三个选择:
insert
。NULL
值。default
值。您可能希望更新现有行。如果是这样,您应该只是正确插入数据。以下是你想要的可能性:
insert into Vehicle (vehicle_id, vehicle, rental_comment, company_id, config_id)
select r.vehicle_id, r.vehicle, r.rental_comment, r.company_id,
c.config_id
from rentals r join
configuration c
on r.vehicle_type = c.vehicle_type; -- just a guess
答案 1 :(得分:0)
未从配置中获取config_id
请确认,并且NOT NULL
表中的vehicle
列也是如此:
因此,您可以使config_id
可以为空,或者在插入以下语句时提供任何默认值:
insert into vehicle(config_id) select config_id from configuration;
答案 2 :(得分:0)
您的工作表车辆没有空列VEHICLE。使用
插入数据时SQL>插入车辆(config_id)从配置中选择config_id;
您没有提供非空的所有字段。
您需要在第一次输入时插入config_id,或使用UPDATE查询来填充config_id
答案 3 :(得分:0)
在底部的说明中,您说:
租赁表中的Vehicle_Id由序列
生成
我认为这是问题所在。您认为vehicle_id
应该自动填充,为什么Oracle会为此列抱怨null
?
您使用的词语表明您不太了解它是如何烹饪的。序列不会为您的列生成值,它只会生成一个数字。它不知道它的用途。如果在表中插入新行时需要使用这样的数字,则必须仍然明确说明。
insert into vehicle ( vehicle_id, config_id ) select seq_name.nextval, config_id
from configuration
然而:您仍然会遇到问题,因为列vehicle
也被声明为NOT NULL
。您也必须为此提供值,否则您将获得有关其他列的相同错误。如何解决这个问题取决于您的业务需求。 (也许该列首先不需要为非空。)