#bash #db2
#bash #db2
Вопрос:
Я должен преобразовать сценарий оболочки из 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 sysdate). Мой сценарий 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??
Ответ №1:
Крис, ваши переменные среды и путь к команде DB2 должны быть заданы с помощью источника db2profile. Команда quit не требуется при вызове команды db2 либо с файлом SQL, либо с одним оператором, указанным как часть командной строки.
#!/bin/bash
. ~db2inst1/sqllib/db2profile
OUT=`db2 connect to myschema >/dev/null 2>amp;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:
Я не очень хорошо знаком с db2, но, похоже, вам нужно перенаправить вывод из инструкции SELECT .
например, db2 SELECT CURRENT_DATE FROM SYSIBM.SYSDUMMY1 WITH UR > /tmp/output
Дополнительная информация здесь: http://www.ibm.com/developerworks/data/library/techarticle/dm-0503melnyk /
Редактировать: кроме того, выбирает ли db2 вывод строки в стандартный вывод? У меня нет копии, доступной для тестирования :/
Комментарии:
1. Он выбирает вывод строки в стандартный вывод, но приносит много мусора, например, баннер версии. Однако Oracle можно запустить в автоматическом режиме и сделать так, чтобы выводить только результат вашего запроса. Спасибо за вашу помощь. Мне нужно еще немного изучить это. Проголосовал за.
2. Параметр -x подавляет текст баннера / заголовка из результирующего набора.
Ответ №3:
Я понял это: хитрость заключается в использовании /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
Надеюсь, это поможет.