Выполнить SQL из файла в Bash - PullRequest
2 голосов
/ 26 апреля 2011

Я пытаюсь загрузить sql из файла в bash и выполнить загруженный sql.Файл sql должен быть универсальным, то есть его нельзя изменить, чтобы упростить работу во время работы в bash (без специальных символов, таких как *). Поэтому я столкнулся с некоторыми проблемами:

Если я прочитал свой пример.sql

SELECT * FROM SAMPLETABLE

в переменную с

ab=`cat sample.sql`

и выполнить ее

db2 `echo $ab`

Я получаю сообщение об ошибке sql, потому что, выполнив команду cat, * былзаменяется всеми файлами в каталоге sample.sql.

Простым решением было бы заменить "" на "\ ".Но я не могу этого сделать, потому что файл должен оставаться исполняемым в таких программах, как DB Visualizer и т. Д.

Может ли кто-нибудь дать мне подсказку в правильном направлении?

Ответы [ 3 ]

3 голосов
/ 26 апреля 2011

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

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

db2 -f sample.sql

Эта команда выполнит все операторы SQL в файле, точка с запятой рассматривается как терминатор оператора:

db2 -t -f sample.sql

Другие полезные флаги CLP:

  • -x: Подавить заголовки столбцов
  • -v: вывод текста оператора непосредственно перед выполнением
  • -z: передать копию всех выходных данных CLP имени файла, следующего сразу за этим флагом
2 голосов
/ 26 октября 2011

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

Содержимое File.sql:

cat <<xEOF
insert values(1,2) into ${MY_SCHEMA}.${MY_TABLE};
select * from ${MY_SCHEMA}.${MY_TABLE};
xEOF

В командной строке выполните:

export MY_SCHEMA='STAR'
export MY_TAVLE='DIMENSION'

Тогда все в порядке, чтобы запустить его в DB2:

eval File.sq |db2 +p -t

Оболочка заменит глобальные переменные, а затем DB2 выполнитЭто.Надеюсь, это поможет.

2 голосов
/ 26 апреля 2011

Перенаправить стандартный ввод из файла.

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