0

1 つのパラメーターで複数の値を渡したい。


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

レポートでこれを使用するため、PL/SQLではなく、SQLの提案のみを提案してください。

4

2 に答える 2

2

値が1つの場合は機能しますが、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 に答える