Сохранение результатов oracle-запроса в переменную bash - PullRequest
1 голос
/ 08 марта 2019
declare -a result=`$ORACLE_HOME/bin/sqlplus -silent  $DBUSER/$DBPASSWORD@$DB << EOF $SQLPLUSOPTIONS $roam_query exit; EOF`

Я пытаюсь получить данные из базы данных оракула и заполнить переменную bash. Запрос на выбор работает, однако он возвращает несколько строк, и эти строки возвращаются в виде длинной непрерывной строки. Я хочу захватить каждую строку из базы данных в индексе массива, например:

index[0] = row 1 information
index[1] = row 2 information

Пожалуйста, помогите. Все предложения приветствуются. Я проверил всю документацию без везения. Спасибо. Я использую Solaris Unix

1 Ответ

0 голосов
/ 08 марта 2019

Если у вас bash версии 4, вы можете использовать команду readarray -t для этого. Любой смутно недавний linux должен иметь bash v4, но я не знаю о Solaris.

Кстати, я бы также рекомендовал помещать двойные кавычки вокруг ссылок на переменные (например, "$DBUSER/$DBPASSWORD@$DB" вместо просто $DBUSER/$DBPASSWORD@$DB) (кроме документов здесь), используя $( ) вместо обратных кавычек и используя нижние или Имена переменных в смешанном регистре (есть куча имен всех заглавных букв со специальным значением, и если вы используете одно из них случайно, могут произойти странные вещи).

Я не уверен, что у меня есть правильный документ (команды SQL), но вот как я это сделаю:

readarray -t result < <("$oracle_home/bin/sqlplus" -silent  "$dbuser/$dbpassword@$db" << EOF
$sqlplusoptions $roam_query
exit;
EOF
)
...