Som en grundläggande disposition kan du köra SQL*Plus med en heredoc för att utföra frågan, och tilldela utdata till en variabel:
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`
Omslutning i backticks tilldelar resultatet till variabeln. $P_NUMBER kommer då att innehålla det värde som din fråga fick (eller ett felmeddelande om användaruppgifterna var felaktiga, säg). Det hjälper om du är säker på att frågan kommer att returnera exakt ett resultat. Du kan också testa returkoden med $?
för att leta efter fel innan du försöker använda din variabel.
Inklusive -s
flagga, stänga av feedback och ställa in sidstorleken till noll, undertrycker kollektivt allt brus så att du bara får resultatet och inte behöver ta bort banners, rubriker etc.
Och slutligen har jag använt /nolog
och sätt connect
uttalande i heredoc så att referenserna inte visas i processlistan, vilket är ett säkerhetsproblem som ofta förbises. Om du inte vill göra det och lägg in autentiseringsuppgifterna som sqlplus username/passwd
, kan du lägga till -l
flagga så att den bara försöker logga in en gång; Annars om inloggningen misslyckas av någon anledning kommer den att försöka använda resten av heredoc som ytterligare referenser, och det kan se ut som om det hänger på med korta skript.