0

我想通过单个参数传递多个值。


select 
id,
item_number 
from AGILE.item_p2p3_query where subclass='2477110' and date32 is not null 
and item_number in : p **// passing one parameter would work. But when I pass two parameters like EN 60439-1:1999,EN 60439-3:1991 doesn't seem to work**
--in ('EN 60439-3:1991','EN 60439-1:1999') // this will work

请仅建议 SQL 建议而不是 PL/SQL,因为我将在报告中使用它。

4

2 回答 2

2

我假设您将值绑定到查询,因为它在有一个值时工作,但在有两个值时失败。这是我如何绑定列表中的变量的问题。有一些解决方案,但我喜欢的不涉及 PLSQL 的解决方案是:

with id_generator
    as
    (
      SELECT regexp_substr(:txt, '[^,]+', 1, LEVEL) token
      FROM dual
      CONNECT BY LEVEL <= length(:txt) - length(REPLACE(:txt, ',', '')) + 1
    )
    select u.id, u.username
    from users u, id_generator g
    where u.id = g.token;

将逗号分隔的字符串绑定为 :txt 的值,然后将查询构造为连接。

完整解释 - http://betteratoracle.com/posts/20-how-do-i-bind-a-variable-in-list

于 2012-12-20T11:18:42.053 回答
0

这可能会有所帮助 - 通过任何有效的 deptnos lk 10,20 列表...:

Select * From scott.emp 
 Where deptno IN (&deptno)
/

如果传递一个字符串,则使用引号 ...IN ('&ename') 谢谢。

于 2012-12-20T14:24:40.843 回答