• Oracle 批量插入记录


    这里使用了PL/SQL的联合数组.

    我要将一组用'_'分隔的记录插入数据库,当然,这样做只是为了方便从java调用存储过程进行批量插入.

    先定义数组类型和一个工具函数(用来分解字符串):

     1 CREATE OR REPLACE PACKAGE qtone IS
     2     TYPE SUBSTR_ARRAY IS TABLE OF VARCHAR2(100 CHARINDEX BY BINARY_INTEGER;
     3 END;
     4 
     5 create or replace FUNCTION split_str(str in varchar2, delimiter in varchar2RETURN qtone.SUBSTR_ARRAY is
     6         src_str varchar2(300 char) := '';
     7         prev_index integer := 1;
     8         next_index integer := 1;
     9         
    10         retval qtone.substr_array ;
    11         cnt INTEGER := 1;
    12     BEGIN
    13         --去掉开头和结束的分隔符
    14         src_str := trim(both delimiter from str); 
    15         while next_index != 0 loop
    16             next_index := instr(src_str,delimiter,prev_index,1);
    17             
    18             if(next_index = 0then
    19                 retval(cnt) := substr(src_str,prev_index);
    20                 cnt := cnt + 1;
    21             else
    22                 retval(cnt) := substr(src_str,prev_index,next_index - prev_index);
    23                 cnt := cnt + 1;
    24             end if;
    25             
    26             prev_index := next_index + 1;  
    27         end loop;
    28 
    29         RETURN retval;       
    30     end;

    然后,做个简单测试:

     1 CREATE TABLE test(
     2     name VARCHAR2(20 char),
     3     address VARCHAR2(50 char)
     4 );
     5 
     6 DECLARE
     7     names VARCHAR2(100 char) := 'ungshow_sweet_ting';
     8     addrs VARCHAR2(100 char) := 'GuangDong_ZheJiang_HuBei';
     9 
    10     addr_array qtone.SUBSTR_ARRAY;
    11     name_array qtone.SUBSTR_ARRAY;
    12 
    13     stmt VARCHAR2(100 char) := '';
    14 BEGIN
    15     name_array := split_str(names,'_');
    16     addr_array := split_str(addrs,'_');
    17 
    18     stmt := 'insert into test(name,address) values(:name,:addr)';
    19     IF(name_array.COUNT <> 0 AND name_array.COUNT = addr_array.COUNT ) THEN 
    20         FOR i IN name_array.first..name_array.last LOOP
    21             EXECUTE IMMEDIATE stmt USING name_array(i),addr_array(i);
    22         END LOOP ;
    23 
    24         commit;
    25     END IF ;
    26 END ;
  • 相关阅读:
    获取农历日期
    图片上传代码(C#)
    ASP.net使用技术总结(1)GridView控件的单击处理
    JavaScript使用小技巧:IE8的关闭处理
    FrameSet左右收缩编码
    哈哈,开心!今天注册开通了 弟弟Kernel 的网志
    设计模式简介
    Delphi字符串、PChar与字符数组之间的转换
    C++中数组参数详解
    1、简单工厂模式
  • 原文地址:https://www.cnblogs.com/ungshow/p/1270002.html
Copyright © 2020-2023  润新知