Как я могу экспортировать из DB2 с предложением * или WHERE, определяющим строку

Я использую экспорт db2 для сохранения данных в файл CSV.

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

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

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

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

2 - я не могу использовать строку в предложении where:

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 не меняет его.

Любые идеи?

Спасибо,

Алекс


person Alex    schedule 15.05.2012    source источник
comment
Я мог бы использовать прямую команду db2, а не экспорт db2, но это не даст мне csv, мне придется сделать что-то вроде || , || , между каждым полем в выборе, чтобы подделать CSV. Учитывая, что я хотел бы использовать произвольные операторы SQL, я не хочу навязывать эту настройку.   -  person Alex    schedule 15.05.2012


Ответы (2)


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

person Ulrich Dangel    schedule 15.05.2012
comment
Красиво - экспорт db2 в /tmp/text DEL 'select * from SCHEMA.TABLE где COL = '''STRING'''' работает. Ну не то чтобы красиво. Итак, я думаю, мне нужно добавить функцию в свой скрипт, чтобы заменить все экземпляры ' на ''' - person Alex; 15.05.2012
comment
@Alex Как упоминалось в моем последнем предложении или в ответе Фреда, вы просто заменяете одинарные кавычки, окружающие ваше утверждение, на ", например db2 export to /tmp/text of DEL "select * from SCHEMA.TABLE where COL='STRING'" - person Ulrich Dangel; 15.05.2012
comment
Это работает, но у меня проблемы с поиском этого в переменной для передачи в скрипт. Итак, если я запускаю db2 из командной строки, все в порядке. Однако, пытаясь сделать что-то вроде экспорта db2 в /tmp/text из DEL $SQL, где $SQL происходит от SQL=cat query.sql, я обнаружил, что он расширяет файлы *. Если я экранирую * с помощью * в файле, то запрос завершится ошибкой, потому что ему не нравится символ * в файле. - person Alex; 15.05.2012

@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\'
person Fred Sobotka    schedule 15.05.2012
comment
Спасибо, но он пришел первым. - person Alex; 15.05.2012