iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >oracle通过存储过程上传list保存功能
  • 805
分享到

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

2024-04-02 19:04:59 805人浏览 薄情痞子
摘要

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

一、创建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 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


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保存功能的文章就介绍到这了,更多相关oracle保存list内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: oracle通过存储过程上传list保存功能

本文链接: https://www.lsjlt.com/news/125694.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle通过存储过程上传list保存功能
    一、创建oracle 需要保存的数据类型type和存储过程produce create TYPE "AL01TYPE" ...
    99+
    2024-04-02
  • oracle如何通过存储过程上传list保存功能
    这篇文章将为大家详细讲解有关oracle如何通过存储过程上传list保存功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、创建oracle 需要保存的数据类型type和存储过程producecreat...
    99+
    2023-06-15
  • Oracle存储过程新手入门教程(通俗理解存储过程)
    目录一、存储过程通俗理解二、创建存储过程基本语法(汇总)三、执行存储过程的方式(5种)四、网上现有的创建存储过程的两种方式解释(看注释)五、一些存储过程示例(仅供参考)六、其他语法七...
    99+
    2023-03-03
    oracle如何创建存储过程 oracle数据库存储过程调用 oracle的存储过程写法
  • mysql存储过程保存在哪
    mysql 存储过程保存在 mysql.proc 表中,该表存储了存储过程的所有信息,包括名称、定义、创建者和修改时间。 MySQL 存储过程保存在哪里? MySQL 中的存储过程保存...
    99+
    2024-04-22
    mysql
  • SQL Server存储过程功能的优点
    本篇内容主要讲解“SQL Server存储过程功能的优点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL Server存储过程功能的优点”吧!存储过程功能的...
    99+
    2024-04-02
  • Mysql如何通过Adjacency List存储树形结构
    这篇文章主要介绍Mysql如何通过Adjacency List存储树形结构,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如何在数据库中存储树形结构呢?像mysql这样的关系型数据库,...
    99+
    2024-04-02
  • oracle存储过程在哪看
    oracle存储过程可通过以下方法查看:pl/sql developer工具:展开“存储过程”节点。sqlplus命令行工具:运行select from user_proce...
    99+
    2024-04-19
    oracle
  • oracle存储过程怎么看
    有三个方法可以查看 oracle 存储过程:使用 sql*plus 执行 desc stored_procedure_name 命令。在 oracle enterprise manage...
    99+
    2024-04-19
    oracle
  • Oracle存储过程Procedure分析
    本篇内容介绍了“Oracle存储过程Procedure分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我...
    99+
    2024-04-02
  • oracle中存储函数与存储过程的示例
    这篇文章主要介绍了oracle中存储函数与存储过程的示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一:存储过程:简单来说就是有名字的pl...
    99+
    2024-04-02
  • Oracle procedure存储过程是什么
    Oracle存储过程是一种在数据库中存储的可重复使用的程序单元。它可以接受参数并执行一系列的数据库操作,比如查询、插入、更新和删除数...
    99+
    2023-10-23
    Oracle
  • oracle存储过程书写格式
    创建存储过程 CREATE OR REPLACE PROCEDURE 存储过程名字  (参数1(入参) IN  NUMBER, 参数2(出参)  OUT&nbs...
    99+
    2024-04-02
  • oracle如何导入存储过程
    要导入存储过程到Oracle数据库中,可以使用以下方法:1. 使用SQL Developer工具导入存储过程:- 打开SQL Dev...
    99+
    2023-08-23
    oracle
  • Oracle存储过程怎么理解
    今天小编给大家分享一下Oracle存储过程怎么理解的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、存储过程通俗理解简单理解...
    99+
    2023-07-05
  • sql通用存储过程的语法
    本篇内容主要讲解“sql通用存储过程的语法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sql通用存储过程的语法”吧!Transact-SQL中的存储过程,非常...
    99+
    2024-04-02
  • 怎么调用Oracle存储过程
    这篇文章给大家介绍怎么调用Oracle存储过程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Oracle的存储过程语法如下:create procedure 存储过...
    99+
    2024-04-02
  • 如何查看oracle存储过程
    在 oracle 中,可以通过以下方法查看存储过程:数据字典视图:使用 user_procedures 等视图查询存储过程信息。pl/sql developer:在“存储过程”文件夹中展...
    99+
    2024-04-19
    oracle
  • oracle如何查询存储过程
    有三种方法可以查询 oracle 存储过程:(1) 使用 select 查询 all_procedures 表;(2) 使用 dbms_metadata 包的 get_proc...
    99+
    2024-04-19
    oracle
  • Oracle存储过程案例详解
    创建简单存储过程(Hello World) 为了方便读者简单易懂,我将下面使用到的表复制给大家。 具体表中的数据,请大家自己填写 -- Create table create t...
    99+
    2024-04-02
  • oracle如何调用存储过程
    要调用Oracle存储过程,可以按照以下步骤进行操作:1. 使用Oracle SQL Developer或其他数据库客户端连接到Or...
    99+
    2023-08-22
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作