JAVA客户端传递对象数组到Oracle存储过程做大数据量插入
最近在项目中用到了JAVA客户端传递对象数组到Oracle存储过程做大数据量插入,比如10万级别.
下面做一个插入10万条记录的示例步骤,,为了容易理解,表的结果很简单.
1,假设表结构如下:
CREATE TABLE UKBNOVCTCORDER( LosingLEName varchar2(200), LosingLECode varchar2(200) );
2,在数据库建立一个type,对应JAVA端要传入的对象结构:
CREATE OR REPLACE TYPE BUT_UKBNOV_CTC_ORDER_REC AS OBJECT ( losingLEName VARCHAR2(200), losingLECode VARCHAR2(200) );
3,为了数组传输,建立一个数组类型的type:
CREATE OR REPLACE TYPE BUT_UKBNOV_CTC_ORDER_TAB AS TABLE OF BUT_UKBNOV_CTC_ORDER_REC
4,建立存储过程做插入工作:
CREATE OR REPLACE procedure bulkInsertCTDORDER(i_orders IN BUT_UKBNOV_CTC_ORDER_TAB) as ctcOrder BUT_UKBNOV_CTC_ORDER_REC; begin FOR idx IN i_orders.first()..i_orders.last() LOOP ctcOrder:=i_orders(idx); INSERT INTO UKBNOVCTCORDER (LosingLEName, LosingLECode) VALUES (ctcOrder.losingLEName, ctcOrder.losingLECode); end loop; exception when others then raise; end;
5,建立JAVA端java bean对象,(为节省版面,下面的get set方法省略,)
- 回复pjj1989:将 varchar2 类型改为 nvarchar2
并将nls_charset12.jar 包放入项目Lib包中
我的异常网推荐解决方案:oracle存储过程,http://www.myexception.cn/oracle-develop/177537.html