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

执行INSERT语句遇ORA-01400错误:无法向ISSUE_ID插入NULL

问题分析与解决方案

错误原因

你用INSERT语句的思路完全错误:INSERT是新增表行,但你已经在ISSUENCE表中录入了ISSUE_ID、EPLOYEES_EMP_ID、SKLAD_ITEM_ID这些字段值,你的实际需求应该是更新已有行的ISSUE_ITEM_NAME字段,而非插入新行。

原语句报错ORA-01400的直接原因:ISSUE_ID是ISSUENCE表的主键(带非空约束),你执行INSERT时仅指定了issue_item_name,未提供ISSUE_ID的值,违反了非空约束。另外原语句同时关联sklad和issuence表,会产生笛卡尔积,即便不报错也会插入大量无效重复行。

表结构说明

ISSUENCE表

  • ISSUE_ID:主键(非空)
  • EPLOYEES_EMP_ID:非空
  • SKLAD_ITEM_ID:非空
  • ISSUE_ITEM_NAME:可空字段(需更新)
  • ISSUE_DATE:非空

SKLAD表

  • ITEM_ID:主键(非空)
  • ITEM_NAME:非空(商品名称)
  • ITEM_PRICE:非空
  • ITEM_COUNT:非空

正确的更新语句

使用UPDATE语句关联两张表,根据SKLAD_ITEM_ID匹配SKLAD表的ITEM_ID,更新对应商品名称:

UPDATE issuence i
SET i.issue_item_name = (
    SELECT s.item_name
    FROM sklad s
    WHERE s.item_id = i.sklad_item_id
)
WHERE EXISTS (
    SELECT 1
    FROM sklad s
    WHERE s.item_id = i.sklad_item_id
);

也可以用Oracle支持的MERGE语句(更适合批量更新场景):

MERGE INTO issuence i
USING sklad s
ON (i.sklad_item_id = s.item_id)
WHEN MATCHED THEN
    UPDATE SET i.issue_item_name = s.item_name;

补充验证建议

执行更新前,可先通过SELECT验证关联结果,确保匹配逻辑正确:

SELECT i.issue_id, s.item_name
FROM issuence i
JOIN sklad s ON i.sklad_item_id = s.item_id;

内容的提问来源于stack exchange,提问作者user20743167

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:45:00