First create types in oracle
DROP TYPE CINBELLINP.D_TABLE;
CREATE OR REPLACE TYPE CINBELLINP.d_table is table of Date;
/
DROP TYPE CINBELLINP.I_TABLE;
CREATE OR REPLACE TYPE CINBELLINP.i_table is table of number(10);
/
DROP TYPE CINBELLINP.V_TABLE;
CREATE OR REPLACE TYPE CINBELLINP.v_table is table of varchar2(10);
/
second, create procedure
CREATE OR REPLACE procedure CINBELLINP.pro_forall_insert(v_1 i_table,v_2 v_table, v_3 d_table)
as
begin
forall i in 1.. v_1.count
insert into a values(v_1(i),v_2(i), v_3(i));
end;
/
in java side call
package com.whatever
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Date;
import oracle.sql.ARRAY;
public class testOracle {
public testOracle() {
Connection oraCon = null;
try {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch (ClassNotFoundException ex)
{}
oraCon = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.1:1521:Test", "test","test");
oraCon.setAutoCommit(false);
} catch (SQLException ex) {
ex.printStackTrace();
}
System.out.println("now");
CallableStatement cstmt = null;
oracle.sql.ArrayDescriptor a = null;
oracle.sql.ArrayDescriptor b = null;
oracle.sql.ArrayDescriptor c = null;
java.util.Date datetime=new java.util.Date();
java.sql.Date mySqlDate = new java.sql.Date(datetime.getTime());
if (true )
{
Object[] s1 = new Object[1000000];
Object[] s2 = new Object[1000000];
Object[] s3 = new Object[1000000];
for (int i = 0; i < 1000000; i++) {
s1[i] = new Integer(1);
s2[i] = new String("aaa").concat(String.valueOf(i));
s3[i] = mySqlDate;
}
try {
a = oracle.sql.ArrayDescriptor.createDescriptor("I_TABLE", oraCon);
b = oracle.sql.ArrayDescriptor.createDescriptor("V_TABLE", oraCon);
c = oracle.sql.ArrayDescriptor.createDescriptor("D_TABLE", oraCon);
ARRAY a_test = new ARRAY(a, oraCon, s1);
ARRAY b_test = new ARRAY(b, oraCon, s2);
ARRAY c_test = new ARRAY(c, oraCon, s3);
cstmt = oraCon.prepareCall("{ call pro_forall_insert(?,?,?) }");
cstmt.setObject(1, a_test);
cstmt.setObject(2, b_test);
cstmt.setObject(3, c_test);
long aaaa = System.currentTimeMillis();
System.out.println(System.currentTimeMillis());
cstmt.execute();
oraCon.commit();
System.out.println("now");
System.out.println(System.currentTimeMillis()-aaaa);
}
catch (Exception e) {
e.printStackTrace();
}
}
try{
PreparedStatement oraPs = null;
String oraInsertSql =
"insert into a values(?,?,?)";
oraPs = oraCon.prepareStatement(oraInsertSql);
long aaaa = System.currentTimeMillis();
System.out.println(System.currentTimeMillis());
datetime=new java.util.Date();
mySqlDate = new java.sql.Date(datetime.getTime());
for (int i = 0; i < 1000000; i++)
{
oraPs.setInt(1,i);
oraPs.setString(2, new String("aaa").concat(String.valueOf(i)));
oraPs.setDate(3, mySqlDate);
oraPs.executeUpdate();
}
oraCon.commit();
System.out.println(System.currentTimeMillis()-aaaa);
}
catch (SQLException ex)
{
System.out.print("dddddd");
System.out.print(ex.getMessage());
}
try {
System.out.println("finished");
jbInit();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String args[]) {
testOracle a = new testOracle();
}
private void jbInit() throws Exception {
}
}
分享到:
相关推荐
kettle快速加载到oracle之oracle批量加载-Oracle Bulk Loader
bulk collect bulk collect bulk collect例子特殊应用
Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据 Oracle 中的游标数据读取是数据库开发中非常常见的操作。通常,我们使用 fetch some_cursor into var1, var2 形式来获取游标数据,当游标中的记录数...
可以将txt中的数据导入oracle中 txt 中的数据要按照一定格式
Oracle Load Balance解@老熊
Oracle Bulk Binds技术分析.pdf
有效解决navcat连接oracle报错:Cannot load OCI DLL 87的问题,带配置说明
采用bulk collect可以将查询结果一次性地加载到collections中。而不是通过cursor一条一条地处理。可以在select into,fetch into,returning into语句使用bulk collect。注意在使用bulk collect时,所有的into变量都...
Oracle64位oci解决Navicat for Oracle cannot load oci 126 193错误
sqlload将文件导入oracle,示例简单易懂
Oracle 将文本文件的内容读到数据库的方法 oracle load命令与ctl写法
详细介绍了使用 BULK COLLECT 进行批量操作 提高sql的执行效率 使用MERGE INTO USING 一条sql搞定 新增和修改 使用connect by 进行递归树查询
Data Load for Oracle EBS
oracle 11g 11.2版本c# oraclebulkcopy需要使用的动态链接库 Oracle.DataAccess.Client.dll.
在oracle使用中为了提高取数据效率,本文将详细介绍Oracle BULK COLLECT批量取数据,需要了解跟多的朋友可以参考下
shell封装oracle sqlload背景功能简介用法案例 背景 从事于数据方面工作的小伙伴们,在工作做经常会入库一些文件,比如excel,CSV,文本文件。很多小伙伴们都是采用plsql或者其他工具软件,通过粘贴复制到表中,或者...
dataload是一个针对oracle开发的数据录入工具(也适用其他程序),其工作原理是模仿键盘的操作,将数据和键盘的按键以表格的形式存储起来。
dump文件load后数据库访问不了解决办法
oracle sqlload详解文档 从源码到案列详细说明,让你一分钟学会sqlload