2012-05-15 4 views
1

Я использую экспорт db2 для сохранения данных в файл CSV.Как я могу экспортировать из DB2 с выражением WHERE, определяющим строку

В конечном счете мне нужен встроенный скрипт, который займет SQL, запустит его и экспортирует. У меня почти все это на месте, но некоторые запросы вызывают ошибки.

Два случая вызывают ошибки в данный момент:

1 - Использование группового символа. Расширение оболочки убивает это.

Закрытие всего SQL в ', кажется, исправить это, но что такое лучшая практика? Кажется, есть некоторые крайние случаи, которые я не исправил.

2 - Я не могу использовать строку в ИНЕКЕ:

bash-3.00$ db2 export to /tmp/text of DEL 'select * from SCHEMA.TABLE where COL='STRING'' 
SQL3022N An SQL error "-206" occurred while processing the SELECT string in 
the Action String parameter. 

SQL0206N "STRING" is not valid in the context where it is used. 

Даже переход к конкретной колонке для выбора и удаления «» из всего SQL не изменяет его.

Любые идеи?

Спасибо,

Alex

+0

я мог бы использовать прямой команду db2, не db2 экспорт, но это не даст мне Csv, Мне нужно что-то сделать, || "," || , между каждым полем в выборе для подделки CSV. Учитывая, что я хотел бы использовать произвольные SQL-инструкции, я не хочу, чтобы это настраивать. – Alex

ответ

0

Вы должны бежать одинарные кавычки в строке запроса, как они закрывают котировку. Посмотрите на How to escape single-quotes within single-quoted strings? решение. Но в вашем случае я думаю, что этого должно быть достаточно, чтобы использовать двойные кавычки вместо одиночных кавычек для вашей цитаты.

+0

Beautiful - db2 export to/tmp/text DEL 'выберите * из SCHEMA.TABLE, где COL =' '' '' STRING '' '' '' работает. Ну, не так красиво. Итак, я думаю, у меня есть функция в моем скрипте, чтобы заменить все экземпляры 'с' '' '' – Alex

+0

@Alex Как упоминалось в моем последнем предложении, или по ответу от Fred вы просто заменяете одиночные кавычки, связанные с вашим заявлением с '' 'like' db2 export to/tmp/text DEL 'выберите * из SCHEMA.TABLE, где COL =' STRING '"' –

+0

Это работает - но у меня возникают проблемы с получением этой переменной, чтобы перейти в сценарий.Таким образом, если я запустил db2 из командной строки, я в порядке. Однако пытаюсь сделать что-то вроде экспорта db2 в/tmp/text из DEL «$ SQL», где $ SQL поступает из SQL = 'cat query. sql' Я нахожу, что он расширяет *. Если я выхожу из * с \ * в файл, тогда запрос терпит неудачу, потому что ему не нравится \ * в пределах " – Alex

3

@mru находится на правильном пути, но я думаю, что рабочий пример будет более полезным:

db2 "export to /tmp/text of DEL select * from SCHEMA.TABLE where COL='STRING' " 

Важным фактором здесь является то, что SQL выбрать не котируется, только содержимое строкового литерала ,

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

db2 export to /tmp/text of DEL select \* from SCHEMA.TABLE where COL=\'STRING\' 
+0

Спасибо, но он попал туда первым. – Alex