У меня проблема с написанием сценария bash.Получить выход из запроса sqlplus в сценарии bash
Я пытаюсь получить вывод из запроса sqlplus переменной bash. Я пробовал много способов, как это было предложено на многих форумах.
t=$(./bin/sqlplus 'oracleuser/[email protected](DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=192.168.1.2)(Port=1521))(CONNECT_DATA=(SID=connectstring)))' << END
SELECT (1 - (Sum(getmisses)/(Sum(gets) + Sum(getmisses)))) * 100 FROM V\$rowcache;
exit;
END
)
echo $t
Это то, что я пытаюсь сделать точно. В приведенном выше примере я создаю строку
'oracleuser/[email protected](DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=192.168.1.2)(Port=1521))(CONNECT_DATA=(SID=connectstring)))'
динамически. Эта часть работает хорошо, Проблема возникает, когда я передаю команду
SELECT (1 - (Sum(getmisses)/(Sum(gets) + Sum(getmisses)))) * 100 FROM V\$rowcache;
в запросе sqlplus. Здесь происходит то, что происходит: символ $ получает escape-код, но символ * вызывает проблемы (например, в sqlprompt перечисляет все файлы в каталоге, из которого он выполняется!) При выполнении команды в целом.
Я закодирован как это: -
connect="'oracleuser/[email protected](DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=192.168.1.2)(Port=1521))(CONNECT_DATA=(SID=connectstring)))'"
arr[1]="SELECT (1 - (Sum(getmisses)/(Sum(gets) + Sum(getmisses)))) * 100 FROM V\$rowcache;"
exp=$(./bin/sqlplus $mconnect << END
printf "${arr[1]}";
exit;
END
)
echo $exp
при запуске скрипта, он успешно входит в Sqlplus, но при выполнении команды SELECT, * вызывает проблемы, но если я вхожу команды вручную он работает.
Существует ли лучший способ? Я не Баш выродок :(.
мне нужна реальная помощь!
Спасибо, что нашли время, чтобы посмотреть на мой вопрос.
С наилучшими пожеланиями, Bhuvanesh
Привет, спасибо за ответ. Этот подход будет работать, но я пытался реализовать один файл сценария, в котором параметры были изменены, и запросы передаются на сеанс sql. Поэтому для запросов я добавлю его как элементы массива или значения в переменные, чтобы его можно было вызвать, когда я запускаю сеанс sqlplus из того же сценария. –