一、创建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('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;00')) 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; /** * 描述 * * @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; } }
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内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!