Как использовать DELIMIDENT с драйвером ODBC IBM Informix в Windows

Вот запрос, который мы пытаемся выполнить внутри SQLRunner через драйвер IBM Informix ODBC в системе Windows. Сама БД размещена в другом месте.

SELECT keycolumnA AS 'Entity', datacol1, datacol2 WHERE keycolumnA IN ('ABC', 'DE f')

Запрос не выполняется из-за «Ошибка ODBC»

Однако, если мы удалим кавычки из Entity, запрос будет работать, но имя столбца будет возвращено в нижнем регистре. Важно, чтобы первый столбец возвращался как Entity с заглавной буквой E.

Мы попытались установить строку подключения как «DSN = myDSN; DELIMIDENT = y;» безуспешно.

Установка: Версия драйвера IBM Informix: 3.7 в Windows 2003.


person Ram Iyer    schedule 12.10.2012    source источник


Ответы (1)


Чтобы быть идентификатором с разделителями, имя должно быть заключено в двойные кавычки, а не в одинарные. Итак, с показанной строкой подключения написание запроса, как показано ниже, должно работать (известные последние слова):

SELECT keycolumnA AS "Entity", datacol1, datacol2
  FROM RandomlyNamedTable   -- NB: Not present in original query!
 WHERE keycolumnA IN ('ABC', 'DE f');

Протестировано в базе данных, содержащей таблицу под названием Elements (хранящую данные о таблице элементов):

 SELECT Atomic_Number AS "Entity", Name AS Name, Symbol AS "Symbol"
  FROM Elements   -- NB: Not present in original query!
 WHERE Symbol IN ('Fe', 'He');

Entity  | name      | Symbol
INTEGER | CHAR(20)  | CHAR(3)
26      | Iron      | Fe
2       | Helium    | He

Обратите внимание, что имена «Сущность» и «Символ» пишутся с заглавной буквы, как вам нужно. Когда двойные кавычки были заменены одинарными, запрос не удался.

SELECT Atomic_Number AS 'Entity', Name AS Name, Symbol AS 'Symbol'
  FROM Elements   -- NB: Not present in original query!
 WHERE Symbol IN ('Fe', 'He');
SQL -201: A syntax error has occurred.

Это было с установленным DELIMIDENT ... без установки DELIMIDENT, как одинарные, так и двойные кавычки вокруг «отображаемых меток» завершились ошибкой с синтаксической ошибкой.

Тестирование против IBM Informix Dynamic Server 11.70.FC2 в Mac OS X 10.7.5. (Программа была написана с использованием ESQL / C, но это не должно иметь значения.)

person Jonathan Leffler    schedule 12.10.2012