2012-05-07 1 views
2

Dans le cas suivant requête SQL Oracle préparé pour un PreparedStatement:Quel est l'équivalent de l'opérateur SQL ANY dans JPQL?

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', 
       ? 
       ) 

Je veux traduire par une requête JPQL. La lecture du document JPQL, substr devient substring et ANY reste tel quel. En JPQL ANY attend une sous-requête.

Comment puis-je modifier la liste dans une sous-requête? ou devrais-je utiliser l'opérateur IN ou devrais-je générer une chaîne JPQL avec un tas de conditions OU dedans?

Oracle 10gR2
Java 5
JPA 2

+1

Utilisez 'in', c'est plus simple. – Ben

Répondre

6

Considérant que = ANY(...) est équivalent à IN (...) dans SQL, vous pouvez utiliser en toute sécurité IN. En fait, le prédicat IN est défini en termes de prédicat ANY. Extrait de la norme SQL 1992:

8,4 < dans prédicats>

[...]

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

[...]

2) Soit RVC être la ligne < constructeur de valeur> et que IPV soit < dans la valeur de prédicat>.

[...]

4) L'expression

RVC IN IPV 

est équivalent à

RVC = ANY IPV 

Là encore, les ANY/SOME<quantified comparison predicate> opérateurs sont définis d'une manière similaire à un groupe de OR prédicats connectés. Par conséquent, la réponse est: Vous pouvez utiliser les prédicats IN ou OR.

Remarque: Bien que cette réponse explique les choses en SQL, je suis sûr que quelque chose de similaire s'applique également à JPQL.

+0

Tks pour vous réponse! J'utiliserai l'opérateur IN – Stephan

Questions connexes