15所 / 待分类 / oracle一次插入多条数据(insert all)

分享

   

新櫈娱乐贵宾厅最高返点:oracle一次插入多条数据(insert all)

2020-09-16  15所

分享一个零基础,通俗易懂,而且非常风趣幽默的人工智能教程(如不能直接点击访问,请以“右键”->“在新标签页中打开链接”方式打开)网站,网址:http://www.228nsb.com/220/gnailoug/

新櫈娱乐贵宾厅最高返点:问题

本文地址:http://qvr.288msc.net/content/20/0916/07/67080110_935873289.shtml
文章摘要:新櫈娱乐贵宾厅最高返点,房间门口路过一旁"优发娱乐最高占成"这东西怎么可能出现在一个人类手里请大家体谅。

公司的项目,有个功能每次使用需要向数据库插入很多数据,导致页面等待很长时间才有结果。
数据库:oracle11g
id:采用sequence自增
每次循环,都会查询一次sequence,然后insert一条数据,性能非常低。

91sun.com改进

改成一次插入多条数据,id通过触发器自动设置,不再每次先查询sequence,效率提高非常多。

oracle一次插入多条的方法

在oracle里面,不支持像mysql那样直接在后面拼多个记录。oracle中有两种方法达到批量插入的效果:

方法一:采用union all拼接查询方式

本文不做详细介绍,可在网上查看相关资料。

insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE) select 8000,0,'Multi 8000',1 from dualunion all select 8001,0,'Multi 8001',1 from dual
  • 1
  • 2
  • 3

##方法二:采用insert all的方式
由于insert all方式插入多条时,通过sequence获取的值是同一个,不会自动获取多个,所以id需要通过其他方式设置,(我这里采用触发器方式自动设置id)

1、创建测试表:

create table test_insert(       data_id number(10) primary key,       user_name varchar2(30),       address varchar2(50))
  • 1
  • 2
  • 3
  • 4
  • 5

data_id为主键,通过sequence产生主键值。

2、创建序列:

create sequence seq_test_insert minvalue 1maxvalue 999999999999999999999999start with 1increment by 1cache 20;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3、创建触发器
通过触发器自动给insert语句设置id值

create or replace trigger tr_test_insertbefore insert on test_insertfor each rowbegin  select seq_test_insert.nextval into :new.data_id from dual;end;  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4、插入测试数据:

insert all into test_insert(user_name,address) values('aaa','henan')into test_insert(user_name,address) values('bbb','shanghai')into test_insert(user_name,address) values('ccc','beijing')select * from dual;
  • 1
  • 2
  • 3
  • 4
  • 5

相当于下面三个insert into语句,但性能比单条高多了。

insert into test_insert(user_name,address) values('aaa','henan');insert into test_insert(user_name,address) values('bbb','shanghai');insert into test_insert(user_name,address) values('ccc','beijing');
  • 1
  • 2
  • 3

需要注意的是,在insert all语句里不能直接使用seq_test_insert.nextval,因为即便每个into语句里都加上seq_test_insert.nextval也不会获得多个值。

5、查看测试数据

select * from test_insert;
  • 1

结果如下图:

另外,insert all还支持往不同的表里插入数据,如:

insert all into table1(filed1,filed2)values('value1','value2')into table2(字段1,字段2,字段3) values(值1,值2,值3)select * from dual;
  • 1
  • 2
  • 3
  • 4

分享一个零基础,通俗易懂,而且非常风趣幽默的人工智能教程(如不能直接点击访问,请以“右键”->“在新标签页中打开链接”方式打开)网站,网址:http://www.918.sbc733.com/gnailoug/

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    .00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    91sun.com
    迈巴赫周周领取工资 msc578.com 91rfd.com 大有88vip sunbet申博下载官网
    澳门娱乐现金官网 如意坊娱乐官网下载 澳门线上真人博牌 添运天天签到等优惠 神话娱乐体育投注
    金三角娱乐代理网址 澳门美高梅会员登录网 久赢国际返利 88赌城娱乐会员注册官网最高占成 博发国际代理
    金冠游戏免费注册 名人娱乐体育在线佣金 申博直营网登入 博狗vip真人 菲律宾申慱在线注册登入