oracle 用一条SQL语句(非存储过程)向表中插入多个指定的values值

--以下sql 在oracle 中都不支持,执行直接报错

insert into uniq_test_01 values(1,'a');insert into uniq_test_01 values(2,'b');insert into uniq_test_01 values(3,'c'); 
insert into uniq_test_01 values(1,'a'), values(2,'b'), values(3,'c'); ---->> mysql 中执行,但在oracle 不执行

Oracle如果想一条SQL语句向表中插入多个值的话,如果如下语句:

INSERT INTO 某表 VALUES(各个值),VALUES(各个值),.....;

oracsql语句创建数据库le中会报错的,因为oracle是不支持这种写法的,如果多个INSERT INTO VAsql语句大全LUEES(各个值);这样以";"隔开一同执行也是不行的,ooracle安装步骤详细racle也是不支持的。

在oracle数据库在从oracle9i版本以后,可以使用如下的种方法实现:

"INSERT ALL  
INTO a表 VALUES(各个值)
INTO a表 VALUES(其它值)
INTO a表 VALUES(其它值) ....再跟一个SELECT 语句"

后边跟的SELECT 语句我们可以从虚拟表里查如 SELECT 1 FROM DUAL。

注意后边跟的SELECT语句可以随意,不过不是把它Ssql语句中常用的数据控制语句包括ELECT出来的内容插入前边的表里,宋庆玲而是起到前边的多数据库系统工程师个数据每次插入多少行的作用,这个多少行是和后边跟的SELECT语句查出来几sql语句条而定的, 如后边的跟的SELECT 语句查出了15条记录,那么前边的"INSERT ALL INTO a表孙侨潞 VALUES(各个值1) INTO a表 VALUES(其它值2) INTO a表 VALUES(其它值3)"就会先插入值1对应的各个字段插入15sql语句条记录, 然后插入值2各个对应的字段15条记录,然后插入值3对应的各个字段15条记录,也就是说有点按列插入的意思。oracle和mysql区别

我们要的是批量插入多个VALUES这样的数据库查询语句一条记录,所以后边的SELECT 语句只要能查出一条记录就行,建议数据库是什么家后边用SELECT 1 FROM DUoracle存储过程AL。

最终实现了不用存储过程用一条SQL语句完成了向ora数据库查询语句cle的表中插入多个指定的值。

测试用表:test_01

drop table test_01 purge ;  
create table test_01(id number ,name varchar2(20));
insert into test_01 values(1,'a');
insert into test_01 values(2,'b');
insert into test_01 values(3,'c');
insert into test_01 values(4,'d');
commit;

--检查数据
SQL> select * from test_01 ;

ID NAME
---------- ------------------------------------------------------------
1 a
2 b
3 c
4 d

使用一条sql语句插入多条记录

insert all 
into test_01 values(1,'a')
into test_01 values(2,'b')
into test_01 values(3,'c')
into test_01 values(4,'d')
select 1 from dual;
commit ;

--检查数据
SQL> select * from test_01 ;


ID NAME
---------- ------------------------------------------------------------
1 a
2 b
3 c
4 d
1 a
2 b
3 c
4 d


8 rows selected.

SQL> select count(*) from test_01 where id=1 ;


COUNT(*)
----------
2

一次多插入几条数据(insert all 里的每个into 都会被重复执行多次 )

insert all 
into test_01 values(1,'a')
into test_01 values(2,'b')
into test_01 values(3,'c')
into test_01 values(4,'d')
select 1 from dba_objects where rownum<=8;
commit ;

--检查数据
SQL> select * from test_01 ;

ID NAME
---------- ------------------------------------------------------------
1 a
2 b
3 c
4 d
1 a
2 b
3 c
4 d
1 a
1 a
1 a
1 a
1 a
1 a
1 a
1 a
2 b
2 b
2 b
2 b
2 b
2 b
2 b
2 b
3 c
3 c
3 c
3 c
3 c
3 c
3 c
3 c
4 d
4 d
4 d
4 d
4 d
4 d
4 d
4 d


40 rows selected.

SQL> select count(*) from test_01 where id=1 ;

COUNT(*)
----------
10

如果使用存储过程

begin
into test_01 values(1,'a') ;
into test_01 values(2,'b') ;
into test_01 values(3,'c') ;
into test_01 values(4,'d') ;
end ;
/