【问题标题】:How to pass a List<> to an Oracle stored procedure如何将 List<> 传递给 Oracle 存储过程
【发布时间】:2011-10-23 13:35:54
【问题描述】:

我的代码已经使用存储过程将字符串数据存储在 SQL 表中:

// my DAO
public class SomeProcedure extends StoredProcedure {
    public void process (String data) {
        Map<String, Object> map = new HashMap<String, Object>();
        hm.put("customData", data);
        Map<?,?> result = super.execute(hm);
    }
}

// My pks
procedure storeData (
    data_p in someTable.data%type,
    data_o out someTable.data%type,
)
as
begin
    insert into someTable
...
end storeData;

我需要修改它以包含一个对象列表。例如:

// my DAO
public class SomeProcedure extends StoredProcedure {
    public void process (String data, List<someObject> list) {
        Map<String, Object> map = new HashMap<String, Object>();
        hm.put("customData", data);
        hm.put("customList", list);
        Map<?,?> result = super.execute(hm);
    }
}

我不清楚如何在存储过程中支持对象列表。

有没有人有传递和解析对象列表以存储过程的经验?任何人都可以提供一些示例代码吗?

【问题讨论】:

  • 什么是OracleStoredProcedureBase
  • 我了解您是否在使用过程时遇到问题,但是您能否为每个列表项创建和更新查询并在单个事务中执行它们?
  • OracleStoredProcedureBase 是 org.springframework.jdbc.object.StoredProcedure 的自定义包装器。
  • 杰里米:是的,我可以,而且在某些情况下也可以。在这种情况下,我没有。
  • 使用 [CallableStatement][1] 它有一个 setArray 方法,可用于将数组发送到存储过程。您也可以通过这种方式发送其他对象 [1]:download.oracle.com/javase/6/docs/api/java/sql/…

标签: java oracle stored-procedures plsql plsqldeveloper


【解决方案1】:

我在我的应用程序中使用了这样的调用(现在无法访问源),但它看起来像 http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:712625135727

我记得的一个问题是战斗,是运行时的 SQL 异常,通过将 orai18n.jar 添加到 ojdbc14 旁边的类路径来解决(对于 oracle 10g 并传递字符串列表)

【讨论】:

    猜你喜欢
    • 2016-06-09
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 2019-06-03
    • 2016-06-14
    相关资源
    最近更新 更多