欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

oracle通過存儲過程上傳list保存功能

 更新時間:2021年05月12日 09:47:16   作者:丁三壽  
這篇文章主要介紹了oracle通過存儲過程上傳list保存功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、創(chuàng)建oracle 需要保存的數(shù)據(jù)類型type和存儲過程produce

create TYPE "AL01TYPE"                                                                                                                                                                                                                                  as object
(
-- 描述 : 檔案批量轉(zhuǎn)出
-- 作者  : 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
                                       --描述:檔案轉(zhuǎn)出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||' 狀態(tài)異常請核對后再上傳!';
           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上傳數(shù)據(jù)',
                 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 {
    /**
     * 根據(jù)數(shù)據(jù)庫中你的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<>();
        //解析數(shù)據(jù)datamap
        for (Map<String, String> dataMap : dataMaps) {
            //創(chuàng)建保存對象
            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);
 
        }
 
 
 
//開始調(diào)用過程
        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("上傳后獲取的返回參數(shù)為:"+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);
            }
        }

到此這篇關(guān)于oracle通過存儲過程上傳list保存功能的文章就介紹到這了,更多相關(guān)oracle保存list內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Oracle 中 row_number()、rank()、dense_rank() 函數(shù)的用法詳解

    Oracle 中 row_number()、rank()、dense_rank() 函數(shù)的

    rank() 與 row_number() 的區(qū)別在于,rank() 會按照排序值相同的為一個序號(以下稱為:塊),第二個不同排序值將顯示所有行的遞增值,而不是當前序號加1,下面通過示例介紹下Oracle 中 row_number()、rank()、dense_rank() 函數(shù)的用法,一起看看吧
    2024-03-03
  • 使用oracle修改表字段長度的步驟

    使用oracle修改表字段長度的步驟

    這篇文章主要介紹了如何使用oracle修改表字段長度,本文僅僅簡單介紹了如何使用oracle修改表字段長度,而oracle提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法,需要的朋友可以參考下
    2023-07-07
  • 修改計算機名或IP后Oracle10g服務(wù)無法啟動的解決方法

    修改計算機名或IP后Oracle10g服務(wù)無法啟動的解決方法

    修改計算機名或IP后Oracle10g無法啟動服務(wù)即windows服務(wù)中有一項oracle服務(wù)啟動不了,報錯,下面是具體的解決方法
    2014-01-01
  • PL/SQL編程經(jīng)驗小結(jié)開發(fā)者網(wǎng)絡(luò)Oracle

    PL/SQL編程經(jīng)驗小結(jié)開發(fā)者網(wǎng)絡(luò)Oracle

    PL/SQL編程經(jīng)驗小結(jié)開發(fā)者網(wǎng)絡(luò)Oracle...
    2007-03-03
  • Oracle配置dblink訪問PostgreSQL的操作方法

    Oracle配置dblink訪問PostgreSQL的操作方法

    本文給大家介紹下Oracle配置dblink訪問PostgreSQL的操作方法,通過dblink訪問PostgreSQL的詳細過程,對Oracle?dblink訪問PostgreSQL相關(guān)知識感興趣的朋友一起看看吧
    2022-03-03
  • Oracle開發(fā)之分析函數(shù)簡介Over用法

    Oracle開發(fā)之分析函數(shù)簡介Over用法

    本文主要是對Oracle分析函數(shù)概念的簡單介紹,同時講解了Over函數(shù)的用法,希望對大家學(xué)習(xí)分析函數(shù)有所幫助。
    2016-05-05
  • oracle使用order by排序null值如何處理

    oracle使用order by排序null值如何處理

    oracle 對查詢結(jié)果進行排序時,被排序的欄位存在null值,且要指定NULL值排在最前面或者最后面,本文將介紹如何處理oracle 空值排序,需要的朋友可以參考下
    2012-11-11
  • 一些Oracle數(shù)據(jù)庫中的查詢優(yōu)化建議綜合

    一些Oracle數(shù)據(jù)庫中的查詢優(yōu)化建議綜合

    這篇文章主要介紹了一些Oracle數(shù)據(jù)庫中的查詢優(yōu)化建議綜合,包括in和not in的使用等一些細節(jié)上的使用建議,需要的朋友可以參考下
    2016-01-01
  • oracle 12c創(chuàng)建可插拔數(shù)據(jù)庫(PDB)與用戶詳解

    oracle 12c創(chuàng)建可插拔數(shù)據(jù)庫(PDB)與用戶詳解

    Oracle12c 中,增加了可插接數(shù)據(jù)庫的概念,即PDB,允許一個數(shù)據(jù)庫容器(CDB)承載多個可插拔數(shù)據(jù)庫(PDB)。下面這篇文章主要給大家介紹了利用oracle 12c創(chuàng)建可插拔數(shù)據(jù)庫(PDB)與用戶的相關(guān)資料,文中介紹的很詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • 詳解Oracle控制文件及日志文件的管理問題

    詳解Oracle控制文件及日志文件的管理問題

    控制文件是oracle的物理文件之一,每個oracle數(shù)據(jù)庫都必須至少有一個控制文件,它記錄了數(shù)據(jù)庫的名字、數(shù)據(jù)文件的位置等信息,這篇文章主要介紹了Oracle控制文件及日志文件的管理,需要的朋友可以參考下
    2022-07-07

最新評論