Comment entrer lie pour un multi-paramètre à valeur dans SQL Developer
J'ai beaucoup de SQL avec des paramètres nommés que j'ai besoin d'être en mesure d'exécuter dans SQL Developer. Pour SQL où les paramètres sont des valeurs scalaires, il est facile de coller le code SQL dans une feuille de calcul et SQL Developer invite moi (dans une boîte de dialogue avec le titre "Entrez Lie") pour entrer les valeurs de paramètre. Mais pour les cas où le paramètre doit contenir plusieurs valeurs, comme ceci:
select count(*) from foo
where foo.id in (:ids)
où, disons, :ids
doit être remplacé par 1,2,3
de sorte que la requête exécutée est
select count(*) from foo
where foo.id in (1,2,3)
J'ai essayer de saisir les valeurs dans la boîte de dialogue (et j'ai essayé de délimiter avec des virgules, ou juste des espaces, ou en l'enveloppant tout en parens), et peu importe ce que j'essaie, je reçois le message d'erreur:
ORA-01722: invalid number
01722. 00000 - "invalid number"
*Cause:
*Action:
Est-il une syntaxe pour saisir plusieurs valeurs dans la "Entrez Lie boîte de dialogue" afin de SQL Développeur sera en mesure d'effectuer la substitution correctement? Ou sont les liaisons strictement limitée à des valeurs scalaires?
Je suis en utilisant Oracle SQL Developer 3.2.20.09.
OriginalL'auteur Nathan Hughes | 2014-02-27
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas un SQL Developer restriction, c'est juste comment lier les variables de travail. Vous êtes effectivement en train de faire:
... qui est vraiment
in (to_number('1,2,3'))
, d'où l'erreur. Il va travailler pour une seule valeur, donner des résultats bizarres pour deux valeurs si votre séparateur décimal est une virgule, et ne parviennent pas pour rien de plus.Vous ne pouvez pas saisir plusieurs valeurs à lier l'invite, ou de fournir plusieurs valeurs à une
in()
avec une seule liaison. Vous pouvezcheatêtre un peu plus créatif. Lexmltable
fonction vous permet de convertir la chaîne séparée par des virgules dans les lignes, avec une valeur par:Vous pouvez ensuite l'utiliser comme une table:
OriginalL'auteur Alex Poole