3

に対してクックされた次の Oracle sql クエリがあるとしますPreparedStatement

SELECT *
FROM my_table
WHERE field1 = 'foo'
and field2 =ANY (substr( ? , 1, 2) || '00000000',
                 substr( ? , 1, 4) || '000000',
                 substr( ? , 1, 6) || '0000',
                 substr( ? , 1, 8) || '00',
                 ?
                )

JPQLクエリに翻訳したい。JPQL doc を読むと、そのままにsubstrなりsubstring 、そのANYままになります。JPQL ではANY、サブクエリが必要です。

リストをサブクエリに変更するにはどうすればよいですか? または、演算子を使用する必要がありますINか、またはその中に多数の OR 条件を含む JPQL 文字列を生成する必要がありますか?

オラクル 10gR2
Java 5
JPA 2

4

1 に答える 1

7

= ANY(...)これは in SQLと同等であることを考えるとIN (...)、安全に IN を使用できます。

実際、IN述語は述語によって定義されANYます。SQL 1992標準の抜粋:

8.4 <述語で>

[...]

<in predicate> ::=
    <row value constructor>
      [ NOT ] IN <in predicate value>

[...]

2) RVC を <row value constructor> とし、IPV を <in predicate value> とします。

[...]

4) 式

  RVC IN IPV

と同等です

  RVC = ANY IPV  

ANY/演算子は、接続された述語SOME <quantified comparison predicate>の集まりと同様の方法で定義されます。ORしたがって、答えは次のとおりです。 INor OR-connected 述語の両方を使用できます。

注:この回答では、SQL での処理方法について説明していますが、JPQL にも同様のことが当てはまると確信しています。

于 2012-05-07T11:57:54.460 に答える