Oracle复合类型参数的存储过程以及JDBC调用

本文详细介绍了如何在JDBC中调用Oracle的PL/SQL存储过程,涉及了nest表、varray数组、Object类型、table类型、Index table以及包含Person Object的nestTable作为参数的情况,提供了具体的创建类型、过程示例及对应的Java调用代码。
摘要由CSDN通过智能技术生成

          Oracle中PL/SQL的功能非常强大,可以实现很多功能,所以会将很多业务逻辑通过存储过程实现,
但是,存储过程的参数在JDBC调用时需要进行类型之间的对应,对于简单类型,就比较简单,本文主要是
阐述PL/SQL的复合类型参数在JDBC中如何调用的.

 

1、nest表组合成结果集,然后以游标变量的形式返回

--创建类型

create or replace package mytest is

  -- Author  : ADMINISTRATOR
  -- Created : 2008-5-13 11:19:28
  -- Purpose : test
 
TYPE record_type IS RECORD(
      code   VARCHAR2(18),
      p_name VARCHAR2(16)); 

TYPE ref_cur_type IS REF CURSOR;
end mytest;

CREATE OR REPLACE TYPE table_type IS TABLE OF record_type;

--创建过程

CREATE OR REPLACE PROCEDURE testproc( v_ref_cur out mytest.ref_cur_type) IS

   v_record record_type;

   v_table table_type := table_type();

BEGIN
   FOR i IN 1 .. 9 LOOP
      v_record := NEW record_type('45212319830810435' || i, '侯廷文' || i);
      v_table.EXTEND;
      v_table(i) := v_record;
   END LOOP;

   OPEN v_ref_cur FOR
      SELECT * FROM TABLE(CAST(v_table AS table_type));

END testproc;

--java代码:

 

OracleCallableStatement cstmt  =  (OracleCallableStatement) con
                .prepareCall(
" {call testproc(?)} " );
        cstmt.registerOutParameter(
1 , OracleTypes.CURSOR);
        cstmt.execute();
        ResultSet rs 
=  (ResultSet) cstmt.getObject( 1 );
        
while  (rs.next())  {
            System.out.print(rs.getString(
1+ " ");
            System.out.print(rs.getString(
2+ " ");
            System.out.println();
        }

 

2、PL/SQL varray数组类型的形式返回结果

--创建类型

CREATE OR REPLACE TYPE myarr IS VARRAY(200) OF VARCHAR2(256);

--创建过程

CREATE OR REPLACE PROCEDURE testvarray(thearr OUT myarr) IS

BEGIN
   thearr := myarr();
   FOR i IN 1 .. 100 LOOP
      thearr.EXTEND;
      thearr(i) := '我是侯廷文'||i;
   END LOOP;
END testvarray;

--java代码:

OracleCallableStatement cstmt  =  (OracleCallableStatement) con
                .prepareCall(
" {call testvarray(?)} " );
        cstmt.registerOutParameter(
1 , OracleTypes.ARRAY,  " MYARR " );

        cstmt.execute();
        ARRAY array 
=  cstmt.getARRAY( 1 );
        Datum[] datas 
=  array.getOracleArray();

        
for  ( int  i  =  
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值