我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

这篇文章将为大家详细讲解有关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

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

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

下载Word文档

猜你喜欢

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

这篇文章将为大家详细讲解有关oracle如何通过存储过程上传list保存功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、创建oracle 需要保存的数据类型type和存储过程producecreat
2023-06-15

oracle如何调用存储过程

要调用Oracle存储过程,可以按照以下步骤进行操作:1. 使用Oracle SQL Developer或其他数据库客户端连接到Oracle数据库。2. 创建存储过程。可以使用如下语法创建存储过程:```CREATE OR REPLACE
2023-08-22

oracle如何导入存储过程

要导入存储过程到Oracle数据库中,可以使用以下方法:1. 使用SQL Developer工具导入存储过程:- 打开SQL Developer工具,连接到目标数据库。- 在左侧的"连接"窗格中,展开数据库连接,并展开"存储过程"节点。-
2023-08-23

oracle如何使用存储过程

存储过程是一组可存储在数据库中的 sql 语句,可作为独立单元重复调用。它们可以接受参数(in、out、inout),并提供代码重用、安全性、性能和模块化的优势。示例:创建存储过程 calculate_sum 来计算两个数字的总和并将其存储
oracle如何使用存储过程
2024-06-13

如何查看oracle存储过程

在 oracle 中,可以通过以下方法查看存储过程:数据字典视图:使用 user_procedures 等视图查询存储过程信息。pl/sql developer:在“存储过程”文件夹中展开所需存储过程。sql*plus:使用 desc 命令
如何查看oracle存储过程
2024-04-19

oracle如何查询存储过程

有三种方法可以查询 oracle 存储过程:(1) 使用 select 查询 all_procedures 表;(2) 使用 dbms_metadata 包的 get_procedures 函数;(3) 使用 all_dependencie
oracle如何查询存储过程
2024-04-19

oracle如何创建存储过程

在 oracle 数据库中创建存储过程需要五个步骤:登录数据库。使用 create procedure 语法创建存储过程。定义输入、输出或输入输出参数。编写包含 pl/sql 语句的存储过程主体。完成并编译存储过程。如何在 Oracle 中
oracle如何创建存储过程
2024-06-12

Oracle中如何编写存储过程

在Oracle中编写存储过程可以使用PL/SQL语言。以下是一个在Oracle中编写存储过程的示例:```sqlCREATE OR REPLACE PROCEDURE get_employee_details (employee_id IN
2023-08-22

Oracle中如何调试存储过程

要调试Oracle中的存储过程,可以使用以下方法:1. 使用DBMS_OUTPUT包:通过在存储过程中使用DBMS_OUTPUT包中的PUT_LINE过程,在存储过程中打印出中间结果和调试信息。然后,在客户端工具中启用DBMS_OUTPUT
2023-08-25

我们如何通过MySQL存储过程访问表?

我们可以从 MySQL 存储过程访问一个或所有表。以下是一个示例,其中我们创建了一个存储过程,它将接受表的名称作为参数,并在调用它后,将生成包含表中所有详细信息的结果集。示例mysql> Delimiter //mysql> Create
2023-10-22

plsql中如何调用oracle存储过程

在PL/SQL中调用Oracle存储过程可以通过以下步骤实现:使用EXECUTE或CALL语句来调用存储过程。通过DBMS_OUTPUT.PUT_LINE来输出存储过程中的输出参数或返回值。下面是一个简单的示例:-- 创建一个存储过程
plsql中如何调用oracle存储过程
2024-04-09

oracle如何查看存储过程内容

要查看存储过程的内容,可以使用以下步骤:首先登录到Oracle数据库中,可以使用SQL*Plus或SQL Developer等工具。使用以下SQL语句查看所有存储过程的名称:SELECT object_nameFROM user_obje
oracle如何查看存储过程内容
2024-04-09

oracle存储过程异常如何捕捉

在Oracle中,可以使用异常处理来捕获存储过程中的异常。在存储过程中,可以使用以下语句来捕获异常并进行处理:sqlDECLARE -- 声明异常变量 exception_variable EXCEPTION; PRAGMA EXCE
2023-10-25

oracle如何查询存储过程内容

通过执行 dbms_metadata.get_ddlf 函数,可以查询 oracle 存储过程的内容,该函数返回存储过程的 ddl 脚本。步骤:连接到数据库。执行查询:select dbms_metadata.get_ddlf('proce
oracle如何查询存储过程内容
2024-04-19

java中如何调用ORACLE存储过程

小编给大家分享一下java中如何调用ORACLE存储过程,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:无返回值的存储过程存储过程为:CREATE OR REP
2023-06-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录