为何Oracle代码无法批量插入多条数据?错误排查
问题分析与修正
你的批量插入代码存在语法格式错误,Oracle不支持这种在单个INSERT后直接用括号拼接多组值的写法。
错误点说明
你在第一组VALUES后添加了分号,后续直接用括号包裹值组,这不符合Oracle的SQL语法规范,数据库无法识别这种格式的插入语句。
正确的批量插入写法
针对Oracle数据库,有两种常用的批量插入方式:
方式1:使用多个独立INSERT语句(兼容所有Oracle版本)
每个值组对应一条完整的INSERT语句:
INSERT INTO sales VALUES ('A', '01-JAN-2021', '2'); INSERT INTO sales VALUES ('A', '07-JAN-2021', '2'); INSERT INTO sales VALUES ('A', '10-JAN-2021', '3'); INSERT INTO sales VALUES ('A', '11-JAN-2021', '3'); INSERT INTO sales VALUES ('A', '11-JAN-2021', '3'); INSERT INTO sales VALUES ('B', '01-JAN-2021', '2'); INSERT INTO sales VALUES ('B', '02-JAN-2021', '2'); INSERT INTO sales VALUES ('B', '04-JAN-2021', '1'); INSERT INTO sales VALUES ('B', '11-JAN-2021', '1'); INSERT INTO sales VALUES ('B', '16-JAN-2021', '3'); INSERT INTO sales VALUES ('B', '01-FEB-2021', '3'); INSERT INTO sales VALUES ('C', '01-JAN-2021', '3'); INSERT INTO sales VALUES ('C', '01-JAN-2021', '3'); INSERT INTO sales VALUES ('C', '07-JAN-2021', '3');
方式2:使用单INSERT多VALUES子句(Oracle 12c及以上版本支持)
用逗号分隔多组值,仅需写一次INSERT INTO:
INSERT INTO sales VALUES ('A', '01-JAN-2021', '2'), ('A', '07-JAN-2021', '2'), ('A', '10-JAN-2021', '3'), ('A', '11-JAN-2021', '3'), ('A', '11-JAN-2021', '3'), ('B', '01-JAN-2021', '2'), ('B', '02-JAN-2021', '2'), ('B', '04-JAN-2021', '1'), ('B', '11-JAN-2021', '1'), ('B', '16-JAN-2021', '3'), ('B', '01-FEB-2021', '3'), ('C', '01-JAN-2021', '3'), ('C', '01-JAN-2021', '3'), ('C', '07-JAN-2021', '3');
额外建议:插入DATE类型时,推荐用TO_DATE函数显式转换格式,避免因会话日期格式差异导致的错误,例如TO_DATE('01-JAN-2021', 'DD-MON-YYYY')。
内容的提问来源于stack exchange,提问作者Gs Prep
相关产品推荐
相关产品推荐

