Lorsque j'utilise sans opérateur, comme en dessous de son fonctionnement mais lorsque j'utilise dans l'opérateur comme étant ci-dessous GET ORA-00920: Erreur de l'opérateur relationnel non valide P> SELECT * FROM range_name_t where ( cty_code_iso, lang_code_iso ) IN ( 'CN','zh' );
ORA-00920: invalid relational operator
00920. 00000 - "invalid relational operator"
3 Réponses :
Je n'ai pas vos tables, mais j'ai l'EMP de Scott pour le démontrer:
Selon le Documentation Oracle du Code> Condition
:
in_conditions :: = strong> p>
expression_list :: = strong> p>
Si vous utilisez la forme supérieure de la condition code> in_condition code> (avec une seule expression à gauche de l'opérateur), vous devez utiliser la forme supérieure de
expression_list code>. Si vous utilisez la forme inférieure de cette condition (avec plusieurs expressions à gauche de l'opérateur), vous devez utiliser la forme inférieure de
expression_list code>, et les expressions de chaque expression_list doivent correspondre au nombre et au type de données. les expressions à gauche de l'opérateur. P> blockQuote>
Vous utilisez la version "inférieure" de la syntaxe et correspondant à une tuple de valeurs sur le côté gauche du
dans code> condition; Donc, le côté droit doit être une liste de tuples et vous devez utiliser un second ensemble de supports (les crochets extérieurs de la liste et les supports internes autour de chaque tuple dans la liste): P>
CTY_CODE_ISO | LANG_CODE_ISO :----------- | :------------ CN | zh
SELECT * FROM range_name_t WHERE cty_code_iso IN ('CN') AND lang_code_iso IN ('zh'); I see nothing wrong with your leading example query. Is there a reason you have to use "IN"? All of the answers so far (including this one) walk a fine line between clever uses of "IN" and abusing "IN".
Vérifiez avec expliquer le plan avec et sans dans l'opérateur, vous pouvez voir différents plans d'exécution