Sybase 和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