文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-15 01:24

关注

这篇文章将为大家详细讲解有关oracle如何通过存储过程上传list保存功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

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

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 definitioncreate 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

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; public class OracleUtil {        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;    } }
 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保存功能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯