Jako podstawowy zarys możesz uruchomić SQL*Plus z dokumentem heredoc, aby wykonać zapytanie i przypisać wynik do zmiennej:
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`
Zamknięcie w backticks przypisuje wynik do zmiennej. $P_NUMBER będzie wtedy przechowywać dowolną wartość, jaką uzyskało Twoje zapytanie (lub komunikat o błędzie, jeśli dane uwierzytelniające były nieprawidłowe, powiedzmy). Pomaga, jeśli masz pewność, że zapytanie zwróci dokładnie jeden wynik. Możesz również przetestować kod powrotu za pomocą $?
aby szukać błędów, zanim spróbujesz użyć swojej zmiennej.
W tym -s
flaga, wyłączenie sprzężenia zwrotnego i ustawienie rozmiaru strony na zero wspólnie tłumią cały szum, dzięki czemu otrzymujesz tylko wynik i nie musisz usuwać banerów, nagłówków itp.
I wreszcie użyłem /nolog
i umieść connect
oświadczenie wewnątrz dokumentu heredoc, aby poświadczenia nie pojawiały się na liście procesów, co jest często pomijanym problemem bezpieczeństwa. Jeśli nie chcesz tego robić i wpisz poświadczenia jako sqlplus username/passwd
, możesz dodać -l
flaga, aby logować się tylko raz; w przeciwnym razie, jeśli z jakiegoś powodu logowanie się nie powiedzie, spróbuje użyć reszty dokumentu heredoc jako dalszych danych uwierzytelniających i może wydawać się, że zawiesza się za pomocą krótkich skryptów.