Come schema di base puoi eseguire SQL*Plus con un heredoc per eseguire la query e assegnare l'output a una variabile:
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`
Racchiudendo in backtick si assegna il risultato alla variabile. $P_NUMBER conterrà quindi qualsiasi valore ottenuto dalla tua query (o un messaggio di errore se le credenziali erano sbagliate, per esempio). Aiuta se sei sicuro che la query restituirà esattamente un risultato. Puoi anche testare il codice di ritorno con $?
per cercare errori, prima di provare a utilizzare la tua variabile.
Compresi i -s
flag, disattivando il feedback e impostando la dimensione della pagina su zero sopprimono collettivamente tutto il rumore in modo da ottenere solo il risultato e non è necessario rimuovere banner, intestazioni ecc.
E infine ho usato /nolog
e inserisci connect
dichiarazione all'interno dell'heredoc in modo che le credenziali non appaiano nell'elenco dei processi, che è un problema di sicurezza spesso trascurato. Se non vuoi farlo e metti le credenziali come sqlplus username/passwd
, puoi aggiungere il -l
flag in modo che tenti di accedere solo una volta; altrimenti, se l'accesso non riesce per qualche motivo, proverà a utilizzare il resto dell'heredoc come ulteriori credenziali e potrebbe sembrare bloccato con brevi script.