Като основна схема можете да стартирате SQL*Plus с heredoc, за да изпълните заявката и да присвоите изхода на променлива:
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`
Ограждането в обратни точки присвоява резултата на променливата. Тогава $P_NUMBER ще съдържа каквато и да е стойност, получена от вашата заявка (или съобщение за грешка, ако идентификационните данни са грешни, да речем). Помага, ако сте сигурни, че заявката ще върне точно един резултат. Можете също да тествате кода за връщане с $?
за да търсите грешки, преди да опитате да използвате вашата променлива.
Включително -s
флаг, изключване на обратната връзка и задаване на размера на страницата на нула колективно потискат целия шум, така че да получите само резултата и да не се налага да премахвате банери, заглавия и т.н.
И накрая използвах /nolog
и поставете connect
декларация вътре в heredoc, така че идентификационните данни да не се показват в списъка с процеси, което е често пренебрегван проблем със сигурността. Ако не искате да направите това и поставете идентификационните данни като sqlplus username/passwd
, можете да добавите -l
флаг, така че да се опитва да влезе само веднъж; в противен случай, ако влизането е неуспешно по някаква причина, ще се опита да използва останалата част от heredoc като допълнителни идентификационни данни и може да изглежда, че спира с кратки скриптове.