服务器之家

服务器之家 > 正文

oracle通过存储过程上传list保存功能

时间:2021-06-21 17:53     来源/作者:丁三寿

一、创建oracle 需要保存的数据类型type和存储过程produce

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
create TYPE "AL01TYPE"                                                                                                                                                                                                                                  as object
(
-- 描述 : 档案批量转出
-- 作者  : dt
-- 时间 : 2021-05-10
-- 版本 :dev-1.0.1
 
  aac003       NVARCHAR2(100),
  aac002       NVARCHAR2(50),
  aat001       NVARCHAR2(50),
  aat002       NVARCHAR2(50),
  aat013       NVARCHAR2(20),
  aae011       NVARCHAR2(20),
  aae036       NVARCHAR2(20),
  aah002       NVARCHAR2(100)
);
 
create type AL01TYPELIST as table of AL01TYPE;
 
-- auto-generated definition
create PROCEDURE SP_HFSZHDA_DOUPLOADAL01(LIST   IN   AL01TYPELIST,
                                       po_message OUT VARCHAR) IS
                                       --描述:档案转出excel上传
                                       --作者:dt
                                       --时间:2021-05-10
                                       --版本:dev-1.0.1
  v_object    AL01TYPE;
  le_error EXCEPTION;
  P_renum number(20);
 
  v_aah002  VARCHAR(100);
  ls_count number;
  ls_aaf025 VARCHAR(50);
 
BEGIN
  P_renum  := 0; --初始化
 
  FOR I IN 1 ..  LIST.count LOOP
    P_renum := 1 + P_renum;
 
      v_object := LIST(I);
 
 
       select   replace(utl_raw.cast_to_varchar2(utl_raw.cast_to_raw(v_object.aah002)),unistr('\0000'))  into  v_aah002 from   dual;
 
      begin
        Select count(0) into ls_count from az03 where aat001 = v_object.aat001 AND aat012 = '1';
        if ls_count=0 then
           po_message := '号:'||v_object.aat001||' 状态异常请核对后再上传!';
           RAISE le_error;
           end if;
 
         Select count(0) into ls_count From AL01 where aaj022='1' and aat001=v_object.aat001 and aah002=v_aah002;
         if ls_count =0 then
        -- 开始插入信息
      select  SQ_AAF025.nextval into ls_aaf025 from dual;
 
      insert into AL01(
      aaf025,
      aat012,
      aat001,
      aac003,
      aac002,
      aat002,
      aat013,
      aaj022,
      aaj026,
      aae011,
      aae036,
      aah002)values(
                 ls_aaf025,
                 '1',
                 v_object.aat001,
                 v_object.aac003 ,
                 v_object.aac002 ,
                 v_object.aat002 ,
                 v_object.aat013,
                 '1',
                 'excel上传数据',
                 v_object.aae011,
                 v_object.aae036,
                 v_aah002
            );
            
            end if;
 
    IF P_renum >1000 THEN
            commit;
            P_renum:=0;
        END IF;
      po_message :='ok';
EXCEPTION
                   WHEN le_error THEN
                   NULL;
                   WHEN OTHERS THEN
                   ROLLBACK;
                   po_message := '上传失败' || SQLCODE || SQLERRM;
        end;
 
 
  END LOOP;
  COMMIT;
 
END SP_HFSZHDA_DOUPLOADAL01;

二、通过过程上传list

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.cominfo.elecfile.utils;
 
import oracle.jdbc.OracleConnection;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
import org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor;
 
import java.sql.Connection;
import java.util.List;
 
/**
 * 描述
 *
 * @Auther: dt
 * @Date: 2021/5/10 0027 09:00
 */
public class OracleUtil {
    /**
     * 根据数据库中你的type将List组装成Array
     * @param con
     * @param OracleObj
     * @param Oraclelist
     * @param objlist
     * @return
     * @throws Exception
     */
    public static ARRAY getArray(Connection con, String OracleObj, String Oraclelist, List<Object[]> objlist) throws Exception {
        ARRAY array=null;
        C3P0NativeJdbcExtractor cp30NativeJdbcExtractor = new C3P0NativeJdbcExtractor();
        OracleConnection connection = (OracleConnection) cp30NativeJdbcExtractor.getNativeConnection(con);
 
 
        if (objlist != null && objlist.size() > 0) {
            StructDescriptor structdesc = new StructDescriptor(OracleObj, connection);
            STRUCT[] structs = new STRUCT[objlist.size()];
            for (int i = 0; i < objlist.size(); i++) {
                Object[] result= (Object[]) objlist.get(i);
                structs[i] = new STRUCT(structdesc, connection, result);
            }
            ArrayDescriptor desc = ArrayDescriptor.createDescriptor(Oraclelist,connection);
            array = new ARRAY(desc, connection, structs);
        }
 
        return array;
    }
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
List<Object[]> arrList = new ArrayList<>();
        //解析数据datamap
        for (Map<String, String> dataMap : dataMaps) {
            //创建保存对象
            Object[] objects =new Object[]{
 
                    dataMap.get("aac003"),
                    dataMap.get("aac002"),
                    dataMap.get("aat001").trim(),
                    dataMap.get("aat002"),
                    dataMap.get("aat013"),
                    'admin',
                    DateUtil.getCurrentTimeStr(),
                    'ec-20210510-wcdedgk2091',
 
            };
            arrList.add(objects);
 
        }
 
 
 
//开始调用过程
        long startTime=System.currentTimeMillis();
        Connection connection = null;
        CallableStatement sqlres = null;
        String sql = "call SP_HFSZHDA_DOUPLOADAL01(?,?)";
        String msg = "";
        try {
            connection = dataSource.getConnection();
            ARRAY paramArr = OracleUtil.getArray(connection,"AL01TYPE","AL01TYPELIST",arrList);
 
            sqlres = connection.prepareCall(sql);
            sqlres.setArray(1, paramArr);
            sqlres.registerOutParameter(2, Types.VARCHAR);
            sqlres.execute();
            msg = sqlres.getString(2);
 
            long endTime=System.currentTimeMillis()-startTime;
            System.out.println("上传后获取的返回参数为:"+msg+"||耗时:"+endTime/1000+"秒");
 
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if (sqlres != null) {
                    sqlres.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            if (!"ok".equals(msg)){
                throw new BusinessException("上传失败!"+msg);
            }
        }

到此这篇关于oracle通过存储过程上传list保存功能的文章就介绍到这了,更多相关oracle保存list内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_42240545/article/details/116588573

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部