错误原因:自增字段插入时,不允许指定
自增字段的声明有如下三种方式:
- create table t_test(
- id integer generated ALWAYS as identity,
- transid varchar2(32) not null
- )
这种自增方式,在插入数据时不允许指定id字段的值,id字段只能自动生成。
如果插入指定id字段的数据,例如:
insert into t_test(id,transid) values(1,'20220101');
将报ORA-32795: 无法插入到“始终生成”身份列的错误。
- create table t_test(
- id integer generated BY DEFAULT as identity,
- transid varchar2(32) not null
- )
这种自增方式可以插入指定id的数据,但是id不允许为空。
语句1:成功
insert into t_test(id,transid) values(1,'20220101');
语句2:报错
insert into t_test(id,transid) values(NULL,'20220101');
- create table t_test(
- id integer generated BY DEFAULT on null as identity,
- transid varchar2(32) not null
- )
这种自增方式可以插入指定id的数据,也可以插入id为null的数据。
语句1:成功
insert into t_test(id,transid) values(1,'20220101');
语句2:成功
insert into t_test(id,transid) values(NULL,'20220101');
如果自增字段必须唯一,方式2和方式3容易失败。