zoukankan      html  css  js  c++  java
  • 一条insert语句批量插入多条记录 AND 多条件游标更新 变CASE WHEN更新法提高速度

    一条insert语句批量插入多条记录

    常见的insert语句,向数据库中,一条语句只能插入一条数据:

    insert into persons 

    (id_p, lastname , firstName, city )

    values(204,'haha' , 'deng' , 'shenzhen');

    (如上,仅插入了一条记录)

    怎样一次insert插入多条记录呢?

    使用示例:

    insert into persons 

    (id_p, lastname , firstName, city )

    values

    (200,'haha' , 'deng' , 'shenzhen'),

    (201,'haha2' , 'deng' , 'GD'),

    (202,'haha3' , 'deng' , 'Beijing');

    这样就批量插入数据了, 遵循这样的语法,就可以批量插入数据了。

    执行成功,截图:

    据说,在程序开发中,一次插入多条数据,比逐次一条一条的插入数据,效率高很多

    所以在程序开发的时候,使用此批量插入,也是比较不错的

    此语句在MySQL 5, postgreSQL 9.3执行通过。

    定义个结构体数组

     type ty_parmeter is record
     (
       v_hezuotype number(1),
       v_comefrom  varchar2(50),
       v_regchannel varchar2(50),
       v_newchannel nvarchar2(30)
     ) ;

     type ty_parmeter_table is table of ty_parmeter  index by binary_integer;
     parameter_arry  ty_parmeter_table;

    BEGIN

    parameter_arry(1).F_CHANNEL:=N'财付通';   parameter_arry(1).F_TYPE:=1; parameter_arry(1).F_COME:='cft';     parameter_arry(1).F_REG:='cftwan';
    parameter_arry(2).F_CHANNEL:=N'拍拍';     parameter_arry(2).F_TYPE:=1; parameter_arry(2).F_COME:='paipai';  parameter_arry(2).F_REG:='paipai';
    parameter_arry(7).F_CHANNEL:=N'支付宝';   parameter_arry(7).F_TYPE:=2; parameter_arry(7).F_COME:='zfb';     parameter_arry(7).F_REG:='zfbwan';
    parameter_arry(17).F_CHANNEL:=N'新浪';    parameter_arry(17).F_TYPE:=0; parameter_arry(17).F_COME:='%sina%';parameter_arry(17).F_REG:='NULL';
    parameter_arry(18).F_CHANNEL:=N'搜狐';    parameter_arry(18).F_TYPE:=0; parameter_arry(18).F_COME:='%sohu%';parameter_arry(18).F_REG:='NULL';
    parameter_arry(22).F_CHANNEL:=N'搜索引擎';parameter_arry(22).F_TYPE:=0; parameter_arry(22).F_COME:='SEO%';  parameter_arry(22).F_REG:='NULL';
    parameter_arry(23).F_CHANNEL:=N'主站';    parameter_arry(23).F_TYPE:=0; parameter_arry(23).F_COME:='NULL';  parameter_arry(23).F_REG:='NULL';

       for i in 1..14
        LOOP
          update t_gather_userinfo
           set    F_REG_CHANNEL=parameter_arry(i).f_channel,

                    F_UPDATEDATE=sysdate
           where  F_TYPE = parameter_arry(i).f_type
           AND    F_COME =parameter_arry(i).f_come
           AND    F_REG =parameter_arry(i).f_reg
           and    F_REG_CHANNEL is null;
          v_rownum :=sql%rowcount;
          COMMIT;
        END LOOP;


       for i in 15..22 loop
          update t_gather_userinfo
           set    F_REG_CHANNEL=parameter_arry(i).f_channel,

                    F_UPDATEDATE=sysdate
           where  F_TYPE = parameter_arry(i).f_type
           AND    F_COME like parameter_arry(i).f_come

           AND    F_REG =parameter_arry(i).f_reg
           and    F_REG_CHANNEL is null;
           v_rownum :=sql%rowcount;
          COMMIT;
       end loop;

       update t_gather_userinfo
           set    F_REG_CHANNEL=parameter_arry(23).f_channel,

                    F_UPDATEDATE=sysdate
           where F_REG_CHANNEL is null;
       v_rownum :=sql%rowcount;
       COMMIT;

    这段代码 在8个CPU 32核 30G内存机器上跑 时间 1分钟,16分钟 26,28,30分钟

    要迁到差劲2个CPU  8核的机器上 跑的后果是 分别为 114,116,115,146分钟 update 1万9千条数据

    采用CASE WHEN写法 就全表扫描一次

      UPDATE t_gather_userinfo
          SET f_reg_new_channel =
                 CASE
                    WHEN f_type = 1 AND f_come = 'CFT' AND f_reg = 'cftwan'
                       THEN '财付通'
                    WHEN f_type = 1 AND f_come = 'PAIPAI' AND f_reg = 'paipai'
                       THEN '拍拍频道'
                    WHEN f_type = 2 AND f_come = 'ZFBReg' AND f_reg = 'zfbwan'
                       THEN '支付宝'
                    WHEN f_type = 0 AND f_come LIKE '%sina%'
                       THEN '新浪'
                    WHEN f_type = 0 AND f_come LIKE '%sohu%'
                       THEN '搜狐'
                 ELSE 'MAINWEB'
                 END,
              f_updatedate = SYSDATE
        WHERE f_reg_new_channel IS NULL;    

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 传球游戏
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Java实现 蓝桥杯VIP 算法训练 奇偶判断
    Java实现 蓝桥杯VIP 算法训练 传球游戏
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Qt: 访问容器(三种方法,加上for循环就四种了)good
  • 原文地址:https://www.cnblogs.com/aprils/p/3983375.html
Copyright © 2011-2022 走看看