zoukankan      html  css  js  c++  java
  • 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 ;
  • 相关阅读:
    stc单品机的命名规则
    代码导入单片机运行
    openlayers tips
    LeetCode 766. Toeplitz Matrix
    【题集】二叉树的遍历各类题型汇总
    LeetCode 821. Shortest Distance to a Character
    关于C++中vector<vector<int> >的使用
    POJ
    LeetCode#155 Min Stack
    LeetCode#160 Intersection of Two Linked Lists
  • 原文地址:https://www.cnblogs.com/ungshow/p/1270002.html
Copyright © 2011-2022 走看看