【问题标题】:How can I write a stored procedure which accepts a variable number of bind parameters如何编写一个接受可变数量绑定参数的存储过程
【发布时间】:2020-09-21 15:55:31
【问题描述】:

我想修改我的SELECT语句如下

SELECT blob_data from table where id = ?

到

SELECT blob_data from table where id IN (?, ?, ?, ?, ?)
TABLE
ID            NOT NULL VARCHAR2(255)
BLOB_DATA     BLOB

这种方法的问题是,在 Java 中执行循环时,我的 ID 可能少于 5 个。我想编写一个存储过程+CallableStatement 而不是 PreparedStatement 来触发 second 查询。 [我想写 5 个不同的存储过程来接受 1 到 5 个参数,但我认为应该有更好的方法!]

如何编写一个接受可变数量绑定参数的存储过程?另外,Java 和相应的 Oracle 代码看起来如何?

我将非常感谢有关此代码的帮助

【问题讨论】:

  • 只是一个愚蠢的想法。如果调用者为缺少的 ID 指定 NULL,它应该可以工作。

标签: oracle stored-procedures plsql


【解决方案1】:

改用集合,例如:

SELECT blob_data from table where id IN (select * from table(?))

所以你只需要绑定集合。 创建您自己的集合类型并在查询中使用它,例如:

create type number_table as table of number;

仅出于测试目的(非生产),您可以使用内部 sys.ku$_objnumset(数字表)或 sys.odcinumberlist(数字数组)

【讨论】:

  • 我不知道收藏。有没有源代码你可以指点我或者更好,你能在这里添加源代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
相关资源
最近更新 更多