You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 12c插入NULL主键行报错及自增ID配置咨询

问题解答

1. 现有建表定义是否符合规范

不符合。你当前的主键列定义为GENERATED BY DEFAULT AS IDENTITY,和推荐的GENERATED BY DEFAULT ON NULL AS IDENTITY的核心差异如下:

  • GENERATED BY DEFAULT AS IDENTITY:仅当插入语句未显式指定该列的值时,数据库才会自动生成ID;如果显式传入NULL,数据库会尝试直接写入NULL,由于你的列附加了NOT NULL约束,就会触发ORA-01400报错。
  • GENERATED BY DEFAULT ON NULL AS IDENTITY:无论插入时未指定该列,还是显式传入NULL,数据库都会自动生成序列值填充主键,完全符合你的需求。

2. Oracle 12c 最简解决方案

无需创建触发器,直接修改现有表的标识列属性即可,执行以下DDL:

ALTER TABLE "WS_ADDRESS" MODIFY "WS_ADDRESS_ID" GENERATED BY DEFAULT ON NULL AS IDENTITY;

修改完成后,你原来的插入语句就可以正常执行:

insert into ws_address (ws_address_id, address_type, name) values (NULL, 'FOO', 'BAR');

可选兼容方案(无需修改表结构)

如果你暂时不想调整表定义,也可以通过调整插入语句规避报错:

  • 插入时不指定WS_ADDRESS_ID列,数据库会自动生成ID:
    insert into ws_address (address_type, name) values ('FOO', 'BAR');
    
  • 显式指定该列值为DEFAULT:
    insert into ws_address (ws_address_id, address_type, name) values (DEFAULT, 'FOO', 'BAR');
    

内容的提问来源于stack exchange,提问作者M.E.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 11:57:03