Oracle
 sql >> Base de données >  >> RDS >> Oracle

Mettre le résultat de sélection dans une variable ksh

En règle générale, vous pouvez exécuter SQL*Plus avec un heredoc pour effectuer la requête et affecter la sortie à une variable :

P_NUMBER=`sqlplus -s /nolog <<!EOF
connect username/password
whenever sqlerror exit failure
set pagesize 0
set feedback off
select your_value from your_table where your_key = 'something'; 
exit 0
!EOF`

Entourer de backticks affecte le résultat à la variable. $P_NUMBER contiendra alors la valeur que votre requête a obtenue (ou un message d'erreur si les informations d'identification étaient erronées, par exemple). Cela aide si vous êtes sûr que la requête renverra exactement un résultat. Vous pouvez également tester le code de retour avec $? pour rechercher les erreurs, avant d'essayer d'utiliser votre variable.

Y compris le -s flag, en désactivant les commentaires et en définissant la taille de la page sur zéro, supprimez collectivement tout le bruit afin que vous n'obteniez que le résultat et que vous n'ayez pas à supprimer les bannières, les en-têtes, etc.

Et enfin j'ai utilisé /nolog et mettre le connect déclaration à l'intérieur de l'heredoc afin que les informations d'identification n'apparaissent pas dans la liste des processus, ce qui est un problème de sécurité souvent négligé. Si vous ne voulez pas faire cela et mettez les informations d'identification sous la forme sqlplus username/passwd , vous pouvez ajouter le -l flag pour qu'il n'essaie de se connecter qu'une seule fois ; sinon, si la connexion échoue pour une raison quelconque, il essaiera d'utiliser le reste de l'heredoc comme informations d'identification supplémentaires, et peut sembler se bloquer avec de courts scripts.