在Oracle中把Array类型作为参数传入存储过程
2010-03-02 16:46
别人提到的问题,试验了一下, 是没问题的,过程如下。 使用Oracle Database 11g Enterprise Edition Release 11.2.0.1.0.
步骤: 1. 创建自定义的类型。由于Oracle没有提供现成的array类型,这里用table类型来模拟。
CREATE OR REPLACE TYPE varchar_array is Table OF varchar2(128)
创建后,varchar_array是一个table,里面元素的类型为varchar2(128).
2. 创建一个存储过程test1. 这个过程接受一个上面创建的varchar_array类型作为输入参数. 在过程体中,通过一个循环遍历传入的array中的每一个元素, 插入到一个表tb中:
create or replace procedure test1(arr in varchar_array) is begin FOR i IN arr.first .. arr.last LOOP insert into tb values(arr(i)); END LOOP; end test1;
3. 数据库这边的基本上完事了。 Java程序如下, 基本上和普通程序差不多:
String driver = "oracle.jdbc.driver.OracleDriver"; String strUrl = "jdbc:oracle:thin:@192.168.1.199:1521:orcl"; Statement stmt = null; ResultSet rs = null; Connection conn = null;
try { Class.forName(driver); conn = DriverManager.getConnection(strUrl, "user", "pass"); CallableStatement proc = null; proc = conn.prepareCall("{ call test1(?) }"); //调用存储过程test1 //不一样的地方,获得上面创建的自定义的类型,注意大小写 ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("VARCHAR_ARRAY", conn); List list = new ArrayList(); list.add("a"); list.add("b"); //把list中的元素转换成自定义的类型 ARRAY array = new ARRAY(descriptor, conn, list.toArray()); //设置参数, 和普通的一样 proc.setArray(1, array); //执行 proc.execute(); } catch (Exception ex) { ex.printStackTrace(); } finally { ..... 各种 close ...... }
执行该Java程序,查询表tb, 程序中的元素正常插入: SQL> select * from tb;
A -------------------------------------------------------------------------------- a b
SQL>
|
分享到:
相关推荐
oracle存储过程中入参是逗号分隔,并且参数要使用在in过滤语句中查询数据。处理的方法与实现
帆软报表调用Oracle存储过程如果存储过程定义中没有参数,但是设计器中缺弹出一个storeParameter1参数的解决插件
C# 传入自定义列表List 到Oracle存储过程 亲测有效,执行速度极快
C#调用Oracle自定义类型存储过程,Oracle存储入参为type类型,对于不熟悉Oracle朋友,可以参考来调用。实现思路和正常调MSSQL一样,先建立连接,再定义一个IOracleCustomType的类,然后Oracle.DataAccess.dll的...
oracle 存储过程实例 oracle存储过程实例
Oracle中把ArrayOracle中把
Oracle集合类型输出参数的PLSQL存储过程及其Java调用.docxOracle集合类型输出参数的PLSQL存储过程及其Java调用.docx
本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...
NULL 博文链接:https://xiaogui9317170.iteye.com/blog/286401
帮助解决Oracle中存储过程自动备份得脚本及添加任务计划过程得详细解说 帮助解决Oracle中存储过程自动备份得脚本及添加任务计划过程得详细解说
因为.net中的除string类的数据类型外,其它类型要求手动修改UDT自动生成的类文件,本人测试了2天后,才明白要修改UDT自动生成的类文件,此功能特好用,尤其是象财务凭证中子栏的一次更新,要求一次将整张凭证更新到ORACLE,...
能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来,这个就通用了。只写一个通用方法,就可以调用所有的存储过程。只根据输入不同的存储过程名称、参数内容,自动调用...
oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel
oracle 事务 回滚 存储过程 自用
详细的记录了C#如何调用oracle以及带有存储过程输出变量的方法,适合初学者。
C#中调用Oracle存储过程
怎么利用MyBatis传List类型参数到数据库存储过程中实现批量插入数据?接下来通过本文给大家介绍Mybatis传list参数调用oracle存储过程,需要的朋友可以参考下
oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记
Oracle存储过程中使用临时表 会话级临时表 事务级临时表
Oracle定时执行存储过程 Oracle定时执行存储过程