• 售前

  • 售后

热门帖子
入门百科

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

[复制链接]
xinting_6ym 显示全部楼层 发表于 2021-8-14 14:54:11 |阅读模式 打印 上一主题 下一主题
一、创建oracle 必要保存的数据类型type和存储过程produce
  1. create TYPE "AL01TYPE"                                                                                                                                                                                                                                  as object
  2. (
  3. -- 描述 : 档案批量转出
  4. -- 作者  : dt
  5. -- 时间 : 2021-05-10
  6. -- 版本 :dev-1.0.1
  7.   aac003       NVARCHAR2(100),
  8.   aac002       NVARCHAR2(50),
  9.   aat001       NVARCHAR2(50),
  10.   aat002       NVARCHAR2(50),
  11.   aat013       NVARCHAR2(20),
  12.   aae011       NVARCHAR2(20),
  13.   aae036       NVARCHAR2(20),
  14.   aah002       NVARCHAR2(100)
  15. );
  16. create type AL01TYPELIST as table of AL01TYPE;
  17. -- auto-generated definition
  18. create PROCEDURE SP_HFSZHDA_DOUPLOADAL01(LIST   IN   AL01TYPELIST,
  19.                                        po_message OUT VARCHAR) IS
  20.                                        --描述:档案转出excel上传
  21.                                        --作者:dt
  22.                                        --时间:2021-05-10
  23.                                        --版本:dev-1.0.1
  24.   v_object    AL01TYPE;
  25.   le_error EXCEPTION;
  26.   P_renum number(20);
  27.   v_aah002  VARCHAR(100);
  28.   ls_count number;
  29.   ls_aaf025 VARCHAR(50);
  30. BEGIN
  31.   P_renum  := 0; --初始化
  32.   FOR I IN 1 ..  LIST.count LOOP
  33.     P_renum := 1 + P_renum;
  34.       v_object := LIST(I);
  35.        select   replace(utl_raw.cast_to_varchar2(utl_raw.cast_to_raw(v_object.aah002)),unistr('\0000'))  into  v_aah002 from   dual;
  36.       begin
  37.         Select count(0) into ls_count from az03 where aat001 = v_object.aat001 AND aat012 = '1';
  38.         if ls_count=0 then
  39.            po_message := '号:'||v_object.aat001||' 状态异常请核对后再上传!';
  40.            RAISE le_error;
  41.            end if;
  42.          Select count(0) into ls_count From AL01 where aaj022='1' and aat001=v_object.aat001 and aah002=v_aah002;
  43.          if ls_count =0 then
  44.         -- 开始插入信息
  45.       select  SQ_AAF025.nextval into ls_aaf025 from dual;
  46.       insert into AL01(
  47.       aaf025,
  48.       aat012,
  49.       aat001,
  50.       aac003,
  51.       aac002,
  52.       aat002,
  53.       aat013,
  54.       aaj022,
  55.       aaj026,
  56.       aae011,
  57.       aae036,
  58.       aah002)values(
  59.                  ls_aaf025,
  60.                  '1',
  61.                  v_object.aat001,
  62.                  v_object.aac003 ,
  63.                  v_object.aac002 ,
  64.                  v_object.aat002 ,
  65.                  v_object.aat013,
  66.                  '1',
  67.                  'excel上传数据',
  68.                  v_object.aae011,
  69.                  v_object.aae036,
  70.                  v_aah002
  71.             );
  72.             
  73.             end if;
  74.     IF P_renum >1000 THEN
  75.             commit;
  76.             P_renum:=0;
  77.         END IF;
  78.       po_message :='ok';
  79. EXCEPTION
  80.                    WHEN le_error THEN
  81.                    NULL;
  82.                    WHEN OTHERS THEN
  83.                    ROLLBACK;
  84.                    po_message := '上传失败' || SQLCODE || SQLERRM;
  85.         end;
  86.   END LOOP;
  87.   COMMIT;
  88. END SP_HFSZHDA_DOUPLOADAL01;
复制代码
二、通过过程上传list
  1. package com.cominfo.elecfile.utils;
  2. import oracle.jdbc.OracleConnection;
  3. import oracle.sql.ARRAY;
  4. import oracle.sql.ArrayDescriptor;
  5. import oracle.sql.STRUCT;
  6. import oracle.sql.StructDescriptor;
  7. import org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor;
  8. import java.sql.Connection;
  9. import java.util.List;
  10. /**
  11. * 描述
  12. *
  13. * @Auther: dt
  14. * @Date: 2021/5/10 0027 09:00
  15. */
  16. public class OracleUtil {
  17.     /**
  18.      * 根据数据库中你的type将List组装成Array
  19.      * @param con
  20.      * @param OracleObj
  21.      * @param Oraclelist
  22.      * @param objlist
  23.      * @return
  24.      * @throws Exception
  25.      */
  26.     public static ARRAY getArray(Connection con, String OracleObj, String Oraclelist, List<Object[]> objlist) throws Exception {
  27.         ARRAY array=null;
  28.         C3P0NativeJdbcExtractor cp30NativeJdbcExtractor = new C3P0NativeJdbcExtractor();
  29.         OracleConnection connection = (OracleConnection) cp30NativeJdbcExtractor.getNativeConnection(con);
  30.         if (objlist != null && objlist.size() > 0) {
  31.             StructDescriptor structdesc = new StructDescriptor(OracleObj, connection);
  32.             STRUCT[] structs = new STRUCT[objlist.size()];
  33.             for (int i = 0; i < objlist.size(); i++) {
  34.                 Object[] result= (Object[]) objlist.get(i);
  35.                 structs[i] = new STRUCT(structdesc, connection, result);
  36.             }
  37.             ArrayDescriptor desc = ArrayDescriptor.createDescriptor(Oraclelist,connection);
  38.             array = new ARRAY(desc, connection, structs);
  39.         }
  40.         return array;
  41.     }
  42. }
复制代码
  1. List<Object[]> arrList = new ArrayList<>();
  2.         //解析数据datamap
  3.         for (Map<String, String> dataMap : dataMaps) {
  4.             //创建保存对象
  5.             Object[] objects =new Object[]{
  6.                     dataMap.get("aac003"),
  7.                     dataMap.get("aac002"),
  8.                     dataMap.get("aat001").trim(),
  9.                     dataMap.get("aat002"),
  10.                     dataMap.get("aat013"),
  11.                     'admin',
  12.                     DateUtil.getCurrentTimeStr(),
  13.                     'ec-20210510-wcdedgk2091',
  14.             };
  15.             arrList.add(objects);
  16.         }
  17. //开始调用过程
  18.         long startTime=System.currentTimeMillis();
  19.         Connection connection = null;
  20.         CallableStatement sqlres = null;
  21.         String sql = "call SP_HFSZHDA_DOUPLOADAL01(?,?)";
  22.         String msg = "";
  23.         try {
  24.             connection = dataSource.getConnection();
  25.             ARRAY paramArr = OracleUtil.getArray(connection,"AL01TYPE","AL01TYPELIST",arrList);
  26.             sqlres = connection.prepareCall(sql);
  27.             sqlres.setArray(1, paramArr);
  28.             sqlres.registerOutParameter(2, Types.VARCHAR);
  29.             sqlres.execute();
  30.             msg = sqlres.getString(2);
  31.             long endTime=System.currentTimeMillis()-startTime;
  32.             System.out.println("上传后获取的返回参数为:"+msg+"||耗时:"+endTime/1000+"秒");
  33.         } catch (SQLException e) {
  34.             e.printStackTrace();
  35.         } catch (Exception e) {
  36.             e.printStackTrace();
  37.         }finally {
  38.             try {
  39.                 if (sqlres != null) {
  40.                     sqlres.close();
  41.                 }
  42.                 if (connection != null) {
  43.                     connection.close();
  44.                 }
  45.             } catch (SQLException e) {
  46.                 e.printStackTrace();
  47.             }
  48.             if (!"ok".equals(msg)){
  49.                 throw new BusinessException("上传失败!"+msg);
  50.             }
  51.         }
复制代码
到此这篇关于oracle通过存储过程上传list保存功能的文章就先容到这了,更多相关oracle保存list内容请搜刮脚本之家以前的文章或继续欣赏下面的相关文章盼望各人以后多多支持脚本之家!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作