我在数据库中有以下存储过程
CREATE OR REPLACE PROCEDURE my_proc (
my_array IN my_array_type,
my_var IN OUT VARCHAR2)
....
....
在Java中,我有以下代码片段来调用上述存储过程
public void callProc(String prodCode,
String prodName,
String prodDesc,
) {
callableStatement =
this.getOADBTransaction().getJdbcConnection().prepareCall("{call my_proc (?,?)}");
Object[] object =
new Object[] { prodCode, prodName, prodDesc};
StructDescriptor structDescriptor =
StructDescriptor.createDescriptor("my_array_type",this.getOADBTransaction().getJdbcConnection());
STRUCT struct =
new STRUCT(structDescriptor, this.getOADBTransaction().getJdbcConnection(),
object);
STRUCT[] structArray = { struct };
ArrayDescriptor arrayDescriptor =
ArrayDescriptor.createDescriptor("my_array",this.getOADBTransaction().getJdbcConnection());
ARRAY array =
new ARRAY(arrayDescriptor, this.getOADBTransaction().getJdbcConnection(),
structArray);
callableStatement.setArray(1, array);
callableStatement.registerOutParameter(2, Types.VARCHAR);
callableStatement.execute();
....
上面的方法是从for循环中的另一个类调用的
for(....){
Serializable[] param =
{ prodCode, prodName, prodDesc};
db.callProc(param )
}
我想实现的是,而不是在for循环中调用db.callProc,我想使用ListArray或其他集合对象,并将值传递给db.callProc方法,在db.callProc方法中,我想将其作为数组传递给数据库过程,以便我的存储过程可以处理数组并进行处理。
3条答案
按热度按时间y3bcpkx11#
首先,我们将创建一个Pojo
在数据库端创建一个相同类型的Object
创建对象后,可以创建这些对象的表
并且我们的过程可以采用输入parajm,
例如,假设我们的proc看起来像这样,现在我们需要做的是从我们的java代码中调用这个proc,并传入一个ParamHolder数组。
++美国东部标准时间下午5点 *
你可以这样创建一个方法
它将接受一个ParamHolder类的数组,该数组将直接传递给你的db proc,你将得到相应的结果。因为当前的proc定义没有指定任何out参数,但是你可以定义并注册of来捕获它。
假设你有一段调用它的代码
希望有帮助。:)
谢谢
niwlg2el2#
这可能有助于:
webghufk3#
打开OracleConnection,然后执行
createOracleArray
。如果您在Oracle中定义了自定义Array类型,例如以下:
然后,在Java的
StoredProcedure
实现中,您可以执行以下操作:(1)打开OracleConnection,然后(2)执行createOracleArray
。public class MyStoredProcedure {
}