Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Setzen Sie das ausgewählte Ergebnis in eine ksh-Variable

Grundsätzlich können Sie SQL*Plus mit einem Heredoc ausführen, um die Abfrage auszuführen, und die Ausgabe einer Variablen zuweisen:

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`

Das Einschließen in Backticks weist das Ergebnis der Variablen zu. $P_NUMBER enthält dann den Wert, den Ihre Abfrage erhalten hat (oder eine Fehlermeldung, wenn die Anmeldeinformationen beispielsweise falsch waren). Es hilft, wenn Sie sicher sind, dass die Abfrage genau ein Ergebnis zurückgibt. Sie können den Rückgabecode auch mit $? testen um nach Fehlern zu suchen, bevor Sie versuchen, Ihre Variable zu verwenden.

Einschließlich des -s markieren, Feedback deaktivieren und die Seitengröße auf null setzen, unterdrücken gemeinsam das gesamte Rauschen, sodass Sie nur das Ergebnis erhalten und keine Banner, Überschriften usw. entfernen müssen.

Und schließlich habe ich /nolog verwendet und setzen Sie den connect -Anweisung im Heredoc, damit die Anmeldeinformationen nicht in der Prozessliste erscheinen, was ein oft übersehenes Sicherheitsproblem ist. Wenn Sie das nicht möchten, geben Sie die Anmeldeinformationen als sqlplus username/passwd ein , können Sie das -l hinzufügen Flag, damit es nur einmal versucht, sich anzumelden; Andernfalls, wenn die Anmeldung aus irgendeinem Grund fehlschlägt, wird versucht, den Rest des Heredocs als weitere Anmeldeinformationen zu verwenden, und es kann so aussehen, als würde es bei kurzen Skripten hängen bleiben.