这次遇到一个开发需求,提供一个接口,输入参数是数组类型,要通过oracle封装的函数进行调用,返回结果也是一个数组。
记录一下对这种类型的实现方法,备忘。实际名称中用xxx替换了部分值,参考用
oracle端:
FUNCTION xxx_func(i_a_array IN cux_b2b_xxx_type, --数组类型参数
i_b IN VARCHAR2 --其他普通类型参数
) RETURN cux_b2b_xxx_res_type --返回类型
.........
cux_b2b_xxx_type 就是一个数组类型的声明
CREATE OR REPLACE TYPE cux_b2b_xxx_type AS TABLE OF cux_b2b_xxx_rec
cux_b2b_xxx_type 是数组的声明
cux_b2b_xxx_rec是数组具体内容的声明
CREATE OR REPLACE TYPE cux_b2b_xxx_rec AS OBJECT(attribute1 VARCHAR2(240))
as Object 后面就是数组中具体列的说明
cux_b2b_xxx_res_type是返回类型的声明
CREATE OR REPLACE TYPE cux_b2b_xxx_res_type AS TABLE OF cux_b2b_xxx_res_rec
cux_b2b_xxx_res_rec是返回数组中具体列的声明
CREATE OR REPLACE TYPE cux_b2b_xxx_res_rec AS OBJECT
(
xxx1 VARCHAR2(240),
xxx2 VARCHAR2(240),
xxx3 NUMBER,
xxx4 NUMBER,
xxx5 VARCHAR2(4000)
)
java 部分:
首先,对输入数组的具体类型定义一个类
import java.sql.Connection;
import java.sql.SQLException;
import oracle.jdbc.OracleTypes;
import oracle.jpub.runtime.MutableStruct;
import oracle.sql.Datum;
import oracle.sql.ORAData;
import oracle.sql.ORADataFactory;
public class CuxB2bXxxRecBean implements ORAData {
public static final String _ORACLE_TYPE_NAME = "cux_b2b_xxx_rec".toUpperCase(); //一定是大写,这里的类型是数组中具体列对象的类型
protected MutableStruct _struct;
static int[] _sqlType = { OracleTypes.VARCHAR };//对应输入参数中的具体类型,如果有多列,这里就需要相应的参数个数,位置与列声明的一致,类型也有一致