Вставить данные из переменной BASH в запрос sql - PullRequest
0 голосов
/ 24 февраля 2020

Я пишу скрипт BASH, который запрашивает у пользователя некоторую информацию (дата и время, час). Мне нужно, чтобы эти данные были обработаны и вставлены в запрос SQL. Формат этой информации должен быть ДД / ММ / ГГГГ ЧЧ / ММ

...
echo "Insert day"
read day
echo "Insert month"
read month
echo "Insert year"
read year
echo "Insert hour"
read hour
echo "Insert minute"
read minute

Как только пользователь вставил информацию, я пытаюсь передать информацию в запрос SQL, используя переменные, подобные этой :

consultaSQL="select TO_CHAR(FROM_TZ( CAST( log_time_stamp AS TIMESTAMP ), 'UTC' ) AT TIME ZONE 'EUROPE/LONDON','YYYY/MM/DD HH24:MI:SS ') AS UK_time, msg_id, msg_tp, init_ch_id, status_code, status_reason from FPS_LOG_PAYMENT where LOG_TIME_STAMP >=TO_DATE('**"$day"**/**"$month"**/**"$year"** **"$hour"**:**"$minute"**) and LOG_TIME_STAMP <TO_DATE('**"$day"**,**"$month"**,**"$year"** **"$hour"**,**"$minute"**','DD/MM/YYYY HH24:MI') and status_code='RJCT' order by log_time_stamp;"

Да, будет запрашиваться начальная и конечная информация, это всего лишь пример.

Я не уверен, влияют ли специальные символы из SQL на BASH и значения переменных могут быть вставлены.

Еще один способ, который, как я предполагал, я смогу попробовать, - это отправить все введенные пользователем данные в текстовый файл, обработать их с помощью sed и распечатать в запросе, но я не так хорошо знакомы с использованием sed.

Любые предложения и помощь будут очень признательны.

1 Ответ

0 голосов
/ 24 февраля 2020

Получил ответ! Большое спасибо моему партнеру Гиллему за его помощь:)

Это было легко, как поставить двойной "" в начале и в конце каждого утверждения, и каждая переменная закрывалась между {}

Вот так:

consultaSQL = "выберите TO_CHAR (FROM_TZ (CAST (log_time_stamp AS TIMESTAMP), 'UT C') В ВРЕМЕННОЙ ЗОНЕ" ЕВРОПА / ЛОНДОН "," ГГГГ / ММ / ДД ЧЧ24: MI: SS ") AS UK_time, msg_id, msg_tp, init_ch_id, status_code, status_reason из FPS_LOG_PAYMENT, где LOG_TIME_STAMP> = TO_DATE ( "" $ {день} / $ {mont} / $ {год} $ {час}: $ {минута} "" ) и LOG_TIME_STAMP "" $ {день}, $ {месяц}, $ {год} $ {час}, $ {минута} "", "ДД / ММ / ГГГГ ЧЧ24: МИ") и status_code = 'RJCT 'order by log_time_stamp; "

...