захватить вывод db2 в сценарии оболочки - PullRequest
1 голос
/ 04 октября 2011

Мне нужно конвертировать скрипт оболочки из Oracle в db2. Я нашел на этом форуме образец сценария Oracle, который я использовал; это выглядит так

#!/bin/bash
OUT=`$ORACLE_HOME/bin/sqlplus -s user/pass@instance   << EOF
select sysdate from dual;
exit success
EOF`
echo $OUT

Будет выведено «03-OCT-11» (системная дата Oracle). Мой скрипт db2 выглядит так

#!/bin/bash
db2bin="/users/db2inst1/sqllib/bin"
#connect
$db2bin/db2 connect to myschema;
#query
$db2bin/db2 "SELECT CURRENT_DATE FROM SYSIBM.SYSDUMMY1 WITH UR";
#debug
echo $?
#check
if [ $? = "0" ] then         echo "found-do something"
else        echo "not found-good bye"
fi
#terminate
$db2bin/db2 quit;

Работает, но не извлекает дату; только «0» или «1» (true / false). Как я могу получить дату из моего результата запроса Db2 ??

Ответы [ 3 ]

2 голосов
/ 04 октября 2011

Я понял это: хитрость в том, чтобы использовать /dev/null.

#!/bin/bash
DB2INSTANCE=db2inst1
BIN="/users/db2inst1/sqllib/bin"
OUT=`${BIN}/db2 connect to myschema > /dev/null 
${BIN}/db2 -x "SELECT CURRENT_DATE FROM SYSIBM.SYSDUMMY1 WITH UR"
${BIN}/db2 quit > /dev/null
`
echo $OUT

Надеюсь, это поможет.

2 голосов
/ 06 октября 2011

Крис, переменные среды и путь к команде DB2 должны быть установлены с помощью источника db2profile.Команда quit не требуется при вызове команды db2 с файлом SQL или одним оператором, указанным в командной строке.

#!/bin/bash
. ~db2inst1/sqllib/db2profile
OUT=`db2 connect to myschema >/dev/null 2>&1; db2 -x values current date`

Ваше соединение с базой данных будет оставаться доступным до завершения сценария, поэтому вы можете выполнять последовательные операторы без повторного подключения.

#!/bin/bash
. ~db2inst1/sqllib/db2profile
db2 connect to myschema >/dev/null 
OUT=`db2 -x values current date`
AAA=`db2 -x " select a from sometable where b = 'c' " `
2 голосов
/ 04 октября 2011

Я не очень знаком с db2, но, похоже, вам нужно перенаправить вывод из оператора SELECT.

например, db2 SELECT CURRENT_DATE FROM SYSIBM.SYSDUMMY1 WITH UR > /tmp/output

Более подробная информация здесь: http://www.ibm.com/developerworks/data/library/techarticle/dm-0503melnyk/

Редактировать: также, db2 выбирает вывод строки в стандартный вывод?У меня нет готовой копии для тестирования: /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...