首页 > 数据库 >java往oracle存储过程中传递数组方法小结

java往oracle存储过程中传递数组方法小结

时间:2022-12-02 10:31:08浏览次数:50  
标签:java int oracle import array 小结 ARRAY


java往oracle存储过程中传递数组方法小结,下面是一个例子,比如存储过程中要
接受一个数组,并且输出一个数组,则先注意数组在oracle中的定义方法如下:

CREATE TYPE array_table AS TABLE OF VARCHAR2 (50); -- Array of String

CREATE TYPE array_int AS TABLE OF NUMBER;          -- Array of integers

接下来,一个存储过程,接受一个数组的输入,一个数组的输出,如下:

CREATE OR REPLACE PROCEDURE SchemaName.proc1 (p_array     IN     array_table,                                              len            OUT NUMBER,                                              p_arr_int      OUT array_int)AS   v_count 

NUMBER;BEGIN p_arr_int := NEW array_int ();
p_arr_int.EXTEND (10);
len := p_array.COUNT;
v_count := 0;
FOR i IN 1 .. p_array.COUNT LOOP
DBMS_OUTPUT.put_line (p_array (i));
p_arr_int (i) := v_count;
v_count := v_count + 1;
END LOOP;END;/




  然后是JAVA代码,传入一个数组,返回一个数组的输出


import java.math.BigDecimal;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.internal.OracleTypes;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
public class TestDatabase {
public static void passArray()
{
try{
Class.forName("oracle.jdbc.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:url ","UserName","Password");; String array[] = {"one", "two", "three","four"};

ArrayDescriptor des = ArrayDescriptor.createDescriptor("SchemaName.ARRAY_TABLE",
con);
ARRAY array_to_pass = new ARRAY(des,con,array);

CallableStatement st = con.prepareCall("call SchemaName.proc1(?,?,?)");
st.setArray(1, array_to_pass); st.registerOutParameter(2, Types.INTEGER); st.registerOutParameter(3,OracleTypes.ARRAY,"SchemaName.ARRAY_INT");


st.execute();
System.out.println("size : "+st.getInt(2));
// Retrieving array from the resultset of the procedure after execution -

ARRAY arr = ((OracleCallableStatement)st).getARRAY(3);
BigDecimal[] recievedArray = (BigDecimal[])(arr.getArray());
for(int i=0;i<recievedArray.length;i++) System.out.println("element" + i + ":" + recievedArray[i] + "\n");
} catch(Exception e) {
System.out.println(e);
}
}
public static void main(String args[])
{
passArray();
}

}

标签:java,int,oracle,import,array,小结,ARRAY
From: https://blog.51cto.com/u_14230175/5905588

相关文章

  • EBS: Oracle XML Publisher 表清单
    --OracleXMLPublisher表清单SELECT*FROMXDO.XDO_CONCURRENT_REQUESTS_GTSELECT*FROMXDO.XDO_CONFIG_KEYS--KEY:PROPERTY_CODE--配置属性SELECT*FR......
  • JAVA字符串处理工具类集合
    //Java拼接字符串时,去掉最后一个多余的逗号Stringstr[]={"hello","beijing","world","shenzhen"};StringBufferbuf=newStringBuffer();for(inti=0;i......
  • JavaScript入门③-函数(2)原理{深入}执行上下文
    00、头痛的JS闭包、词法作用域?被JavaScript的闭包、上下文、嵌套函数、this搞得很头痛,这语言设计的,感觉比较混乱,先勉强理解总结一下......
  • Oracle 查询用户下表名,表列数,表行数,表大小的SQL
    最近想分析下数据库的信息,然后写了这个SQL.比较lowB一些. 因为Oracle的deferred_segment_creation参数的影响.很多表如果是0行,那么是不会创建extents存储信息.......
  • Javascript 浏览器本地导出文件
    浏览器本地导出文件/***导出文件*@paramdata数据*@paramname文件名*/exportRaw:function(data,name){varurlObject=window.URL||window.web......
  • Oracle常用脚本
    经常忘记一些oracle语法,在此做一下记录吧,每逢遇到新的脚本,就记录在此。1.通过存储过程的方式,将图片插入blob字段,创建目录并授权createdirectory  D_FILEas'/home/......
  • java中的Exception的编译异常(受检)和运行异常(非受检)的理解
    受检:在编写代码的过程中,IDE集成开发环境没有给出错误提示(一般是有红色波浪线),在Console(控制台)可以显示,但会有明显的错误提示,称之为受检       非......
  • Java 集合框架5:Map
    目录Map1.概述2.SortedMap3.实现HashMap实现原理HashtableConcurrentHashMapMap1.概述Map是一个将key映射到value的对象,key不能相同,而且最多映射一个value。Map......
  • Java实现在线SQL编程【完整版】
    前言:由于前段时间,项目组长分配的任务是要完成一个在线编写​​​SQL​​​并要实现查询功能的需求,最终需要将查询到的数据以​​JSON​​​格式显示到响应数据的区域,以供操......
  • JavaWeb项目练习(学生选课管理系统)二【新建数据库】
    思路1、页面美化css这部分,挖个坑,我打算做好一点所以先空着。×2、需要做四个数据表(学生、教师、管理员、课程)关联:学生有个人课表教师有教授课程和个人课表管理员有全......