`
q272156430
  • 浏览: 275847 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Oracle 存储过程传入二维数组

阅读更多

Oracle  存储过程传入二维数组

   

使用Oracle数组,打算传入一个二维数组到数据库中,然后利用存储过程将数据写入到数据
 
1、创建一个和目标表结构完全一样的TYPE,类型为object
CREATE OR REPLACE TYPE ID2 AS OBJECT(
ID NUMBER(10),
NUM NUMBER(10)
)
 
2、创建一个table类型的type
CREATE OR REPLACE TYPE id3 AS table OF id2
 
3、在存储过程中插入数据
create or replace procedure p_batch_insert3(ids in id3) is                                                        
begin
--对数组进行类型转变然后将数据插入到目标表中。
insert into a
(id, num)
select * from the (select cast(ids as id3) from dual);
end p_batch_insert3;

 
4、测试存储过程
CREATE OR REPLACE PROCEDURE sample is

ids id3 := new id3();
BEGIN
FOR i IN 1 .. 10 LOOP

ids.Extend();
ids(i) := id2(i,i);
dbms_output.put_line(''id--->'' || ids(i).id);
dbms_output.put_line(''num--->'' || ids(i).num);
END LOOP;
p_batch_insert3(ids);
END;
 
5、java程序如下:令我不解的是传入一维数组,能够将数据写入到数据库中,
在使用二维数组时,出现如下错误
java.sql.SQLException: 无法转换为内部表示: [I@9ed927
package com;
import java.sql.Connection;
import java.sql.PreparedStatement ;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.sql.rowset.*;
import oracle.sql.*;
import com.sun.rowset.CachedRowSetImpl;

public class Test2 {
public static void main(String arg[]) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@192.168.6.185:1521:billing";
Connection con = DriverManager.getConnection(url, "flux",
"1231flux");
//con.setAutoCommit(false);
PreparedStatement pstmt = null;
String sql = "{call p_batch_insert3(?)}";
//String sql = "{call p_batch_insert2(?)}";

pstmt = con.prepareCall(sql);
//int[] x = new int[34465]; 
//int x[][] = new int[10][]; 
int x[][] = {{1,2},{4,5}};

/*for (int i = 0; i <= 34464; i++) {

x[i]=i; 
}
*/


for(int i = 0; i < x.length; i++)
{
for(int j = 0; j < x[i].length; j++) 
System.out.println("a1[" + i + "][" + j +"] = " + x[i][j]); 
} 

System.out.println("start-->" + System.currentTimeMillis());
oracle.sql.ArrayDescriptor desc = oracle.sql.ArrayDescriptor.createDescriptor("ID3",con);
oracle.sql.ARRAY array = new oracle.sql.ARRAY(desc,con,x);
// ArrayDescriptor descriptor =ArrayDescriptor.createDescriptor( "NUM_ARRAY", conn );
pstmt.setArray(1, array);
pstmt.executeUpdate();
//pstmt.executeBatch();
//con.commit();
//con.setAutoCommit(true);
System.out.println("end-->" + System.currentTimeMillis());
} catch (Exception e) {
e.printStackTrace();
//System.out.println(e.toString());
}
}
}
 
分享到:
评论

相关推荐

    ORACLE存储过程中定义数组并且判断某值是否在数组中.txt

    ORACLE存储过程中定义数组并且判断某值是否在数组中。有例子可執行、 、有例子可執行、

    Spring访问传入数组参数的Oracle存储过程

    当我们谈论`Spring`访问传入数组参数的`Oracle`存储过程时,我们实际上是在探讨如何利用Java的Spring框架与Oracle数据库进行高级交互。Spring是一个广泛使用的开源框架,它简化了企业级Java应用的开发,而Oracle...

    ORACLE数组使用方法

    Oracle 数组是一种复杂的数据类型,可以存储多个元素,数组可以分为固定数组和可变数组两种类型。在 Oracle 中,数组可以用来存储大量的数据,并且可以通过索引来访问数组中的元素。 固定数组是一种具有固定长度的...

    oracle存储过程返回多行多列的结构化数组,java调用并解析

    总结来说,本示例展示了如何在Oracle存储过程中定义和使用结构化数组,以及如何在Java中调用这些存储过程并解析返回的多行多列数据。通过这种方式,你可以高效地处理复杂的数据结构,同时利用Java的灵活性来处理这些...

    oracle数组存储过程批量插入

    总结起来,Oracle的数组存储过程提供了批量处理数据的强大工具,可以用于插入、更新和删除等操作。通过定义PL/SQL类型和使用保存点,我们可以更好地管理事务和异常,同时在客户端正确设置参数类型以确保调用成功。在...

    C# 传入自定义列表List 到Oracle存储过程

    在将C#的List传递给Oracle存储过程时,我们需要创建一个PL/SQL类型的数组,以便存储过程能够理解和处理C#列表中的元素。 1. **创建Oracle存储过程**: 在Oracle数据库中,创建一个接受数组作为参数的存储过程。...

    oracle存储过程学习经典入门

    本文将从 Oracle 存储过程的基础知识开始,逐步深入到 Oracle 存储过程的高级应用,包括 Hibernate 调用 Oracle 存储过程和 Java 调用 Oracle 存储过程的方法。 Oracle 存储过程基础知识 Oracle 存储过程是 Oracle...

    Java调用oracle存储过程输出自定义对象或二维表

    本文将深入探讨如何在Java中调用Oracle存储过程,并输出自定义对象或二维表,以此提升数据处理效率。 首先,我们需要理解Java与Oracle数据库的连接方式。Java通过JDBC(Java Database Connectivity)API来实现对...

    Transact-SQL和PL_SQL中二维数组的模拟.pdf

    对于数组与存储结构的关系,由于计算机存储空间是一维的,二维数组需要通过某种映射方法来表示其二维数据结构。在本研究中,使用了一维存储空间来模拟二维数组,并给出了行优先存储时的具体映射公式。这种方法将二维...

    C#中调用oracle存储过程返回数据集

    在C#中调用Oracle存储过程来返回数据集是一个常见的任务,这涉及到ADO.NET库的使用,特别是OracleClient组件。Oracle存储过程是数据库中的预编译SQL代码块,可以接收输入参数,执行复杂的业务逻辑,并返回结果。在C#...

    oracle_split_函数_返回数组

    在Oracle数据库中,由于内置函数不直接支持像Java中的`split`那样拆分字符串并返回数组,因此开发者需要自定义函数来实现这一功能。这里提到的两种方法都是为了解决这个问题,即根据指定的分隔符将字符串拆分为一个...

    oracle class12.jar nls_charset12.jar存储过程接收数组空值

    在Oracle数据库环境中,有时我们需要通过存储过程传递数组参数来处理批量数据。然而,在实际操作中,我们可能会遇到一个问题,那就是如何正确地处理数组中的空值(NULL)或空元素。"oracle class12.jar nls_charset...

    oracle存储过程unwrap解密工具.zip

    Oracle存储过程unwrap解密工具主要用于处理Oracle数据库中的加密存储过程。在Oracle数据库系统中,为了保护敏感代码或数据,开发人员有时会选择对存储过程进行加密。然而,当需要查看、调试或恢复这些加密的存储过程...

    oracle 存储过程导出excel

    oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel

    oracle存储过程解锁

    以下是对“oracle存储过程解锁”这一主题的深入解析。 ### 标题:“oracle存储过程解锁” #### 解析: 在Oracle数据库中,存储过程是一种预先编译并存储在数据库中的SQL代码块,用于执行复杂的业务逻辑或数据处理...

    java调用oracle存储过程返回结果集,Record,cursor参照.pdf

    Java调用Oracle存储过程返回结果集Record、Cursor参照 Java调用Oracle存储过程返回结果集(Record)是指在Java程序中通过调用Oracle存储过程来获取记录集的结果。下面将详细介绍相关知识点。 创建Type 在Oracle中...

    帆软报表Oracle存储过程解决storeParameter1参数试用插件

    总结起来,"帆软报表Oracle存储过程解决storeParameter1参数试用插件"主要是针对在调用无参数Oracle存储过程时出现的异常问题提供的一种解决方案。通过安装并配置这个插件,用户可以顺利地在帆软报表中调用不包含...

    oracle存储过程-帮助文档

    Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写一系列SQL语句和PL/SQL块,形成可重复使用的代码单元。这篇博客“oracle存储过程-帮助文档”可能提供了关于如何创建、调用和管理Oracle存储过程...

    Mybatis传list参数调用oracle存储过程的解决方法

    "Mybatis调用Oracle存储过程传List参数解决方法" Mybatis是当前最流行的持久层框架之一,它提供了强大的数据访问和操作功能。但是,如何将List类型参数传递给Oracle存储过程,实现批量插入数据却是一个棘手的问题,...

    Python使用cx_Oracle调用Oracle存储过程的方法示例

    本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...

Global site tag (gtag.js) - Google Analytics