Oracle中以insert values的形式同时插入多条记录报错:命令为正常结束

本文介绍在Oracle数据库中如何使用insert all语句进行批量数据插入,对比MySQL的多values插入方式,详细解释了insert all语法及注意事项,适用于Oracle9i及以上版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天想在oracle中插入多条数据时想到了mysql中的多values插入

 insert into t1(id,name) values('1','zhangsan'),('2','lisi');

数据库一直报错:ORA-00933:SQL命令为正常结束

一开始以为数据数据出问题,单个都试了一遍都可以执行,说明数据没有问题,从网上查看才知道是oracle数据库不支持这种数据插入方式。

但是如果想使用这种多values的方式插入可以使用另一种:

insert all into t1(id,name) values('1','zhangsan')

into t1(id,name) values('2','lisi')

select 1 from dual;

这里注意点

#1     insert all into不是insert into

#2     每一个数据都要使用into t1 values()

#3     最后是要使用select 1 from dual;(这里的dual只要不是t1都可以,如果想使用一个表名,那么查出来的数据条数要是一条,            不然插入的每一个数据都有两条,比如select  1 from dual 有两条,那么zhangsan和lisi都会插入两条)。

#4     只适合于Oralce 9i以上版本

 

### SQL `INSERT INTO` 多行插入报错解决方案 对于不同数据库管理系统(DBMS),处理多行插入的方式有所不同。以下是针对几种常见 DBMS 的具体方法: #### MySQL MySQL 支持通过单一 `INSERT INTO ... VALUES (...)` 语句插入多个元组,语法如下所示[^2]: ```sql INSERT INTO table_name (column1, column2, ...) VALUES (value1_1, value1_2, ...), (value2_1, value2_2, ...); ``` #### OracleOracle 中尝试一次性插入多条记录时可能会遇到错误提示:“命令正常结束”。这是因为 Oracle 不支持直接在同一 `VALUES` 子句内指定多个值列表。可以采用以下两种方式之一解决问题: - 使用显式的 `INSERT ALL` 结构来定义每一对目标列及其对应的源表达式或子查询; ```sql INSERT ALL INTO table_name(column1,column2) VALUES(val1,val2) INTO table_name(column1,column2) VALUES(val3,val4) SELECT * FROM dual; ``` - 或者利用 `UNION ALL` 将各个独立的选择组合成一个更大的集合再执行批量插入操作。 ```sql INSERT INTO table_name(column1, column2) SELECT val1, val2 FROM DUAL UNION ALL SELECT val3, val4 FROM DUAL ; ``` #### SQL Server 当涉及到带有特殊字符如汉字作为标识符的情况下,在 SQL Server 上进行插入操作前需注意将这些特殊的名称用方括号包围起来以防止解析失败[^3]: ```sql INSERT INTO [表名] ([中文字段]) VALUES ('测试'); ``` 如果仅仅是普通的英文命名,则可以直接按照标准格式书写即可完成多行数据的同时写入: ```sql INSERT INTO table_name (col1, col2...) VALUES ('valA', 'valB'), ('valC', 'valD'); ``` 以上就是关于如何正确地在一个 `INSERT INTO...VALUES()` 声明里加入多行新纪录而不引发异常的方法总结。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值