1. 苏葳的备忘录首页
  2. 数据库

Oracle中的Java函数传递数组参数

oracle pl/sql javaSybase 和Oracle均可定义java函数,但在java虚拟机和数据库之间信息的传递似乎并没有快捷的内部渠道,即涉及到数据库内的一些操作,还需用odbc或jdbc之类来完成,所以实用价值不大。正如某书所言,只有确实无法用plsql完成的工作,才考虑用java过程,只有性能要求非常高的工作,才会考虑数据库的C过程。

在oracle中传递标量问题不大,那么如何传递数组呢?

CREATE OR REPLACE TYPE "JSPLIT_STR"     IS TABLE OF VARCHAR2 (255)
/--首先定义plsql的数组类型,
CREATE OR REPLACE FUNCTION jsplit(str IN VARCHAR2, deli IN VARCHAR2)
  RETURN jsplit_str AS
  LANGUAGE JAVA NAME 'jutil.jsplit(java.lang.String,java.lang.String) return oracle.sql.ARRAY';
/
--这是一个java函数声明的plsql包装,sybase同样需要这样一个包装,尽管语法有所不同。
create or replace and compile java source named jutil as
import java.io.*;
import oracle.sql.*;
import java.sql.*;
import oracle.jdbc.driver.*;
public class jutil
{
  public static oracle.sql.ARRAY  jsplit(String str,String deli)
  throws java.sql.SQLException,IOException
  {
      String []val={"11111","222222222","333333333333"};
      //oracle.sql.ARRAY pp;
      Connection conn=new OracleDriver().defaultConnection();
      ArrayDescriptor descriptor=ArrayDescriptor.createDescriptor("JSPLIT_STR",conn);
      return new oracle.sql.ARRAY(descriptor,conn,val);
//      return str.split(deli);
  }
  }
/--上面是一个非党简单的以数组为返回参数的java函数例子,可见用java来返回数组类型是比较麻烦的。

 

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/342.html

发表评论

邮箱地址不会被公开。 必填项已用*标注