我要从带有JDBC Oracle驱动程序的Java应用程序调用Oracle数据库中的存储过程,其中一些参数是简单类型(VARCHAR2,NUMBER,...),其他参数是对象的对象或事件表。 / p>
create or replace
type t_TYPE as object (In_PARAM VARCHAR2(255) );
create or replace
type t_TYPE_array is table of t_TYPE ;
PROCEDURE SOME_PROC (in_myParam IN t_TYPE_array, out_retVal OUT NUMBER) AS ...
我使用的是Java 1.6和ojdbc6,我的方法是java.sql.CallableStatement,但我对其他解决方案(在JDBC驱动程序之上)开放。
P.S。它是在Jboss 5中运行的企业应用程序(来自数据源的连接)。
由于
答案 0 :(得分:2)
找到我自己:
StructDescriptor structDesc = StructDescriptor.createDescriptor(TYPE_STRUCT, dbConnection);
ArrayDescriptor arrayDesc = ArrayDescriptor.createDescriptor(TYPE_ARRAY, dbConnection);
Object[] objType = new Object[1];
objType[0] = new String("param data");
oracle.sql.STRUCT struct = new oracle.sql.STRUCT(structDesc, dbConnection, objType);
Object[] arrayObj = new Object[size];
arrayObj[0] = struct;
arrayObj[1] = struct1;
[...]
oracle.sql.ARRAY array = new oracle.sql.ARRAY(arrayDesc, dbConnection, arrayObj);
callableStatement = dbConnection.prepareCall(MY_CALL);
[...]
callableStatement.setArray(4, array);
答案 1 :(得分:0)
对于某些存储过程接受VARCHAR和数字作为带数字输出的输入,我会这样做。
Connection conn = null;
CallableStatement cs = null;
try {
conn = dataSource.getConnection();
cs = conn.prepareCall("{ CALL pkg.someproc(?,?,?) }");
//populate stored proc parameters
cs.setString(1, param1);
cs.setInt(2, param2);
cs.registerOutParameter(3, Types.NUMERIC);
//execute stored procedure
cs.execute();
}