Общая синтаксическая ошибка, возникающая из запроса CONNECT BY в Informix при использовании идентификаторов таблицы в кавычках.
-
21-12-2019 - |
Вопрос
При выполнении следующего запроса к базе данных Informix база данных сообщает об общей синтаксической ошибке (без каких-либо указаний на причину проблемы).Тот же запрос прекрасно работает в базах данных CUBRID или Oracle, обе из которых также поддерживают CONNECT BY
синтаксис:
select
lower(connect_by_root "t_directory"."name"),
connect_by_isleaf,
connect_by_iscycle,
substr(
sys_connect_by_path(lower("t_directory"."name"), '/'),
2) "dir"
from "t_directory"
start with "t_directory"."parent_id" is null
connect by nocycle prior "t_directory"."id" = "t_directory"."parent_id"
order siblings by lower("t_directory"."name") asc
База данных, которую я использую, — это версия Informix 12.10 для разработчиков для Windows.Я запускаю запрос из драйвера JDBC со следующим URL-адресом подключения (чтобы разрешить использование идентификаторов таблиц в кавычках):
jdbc:informix-sqli://localhost:9092/test:INFORMIXSERVER=ol_informix;DELIMIDENT=y
Решение
Точная проблема здесь заключается в том, что prior
не принимает идентификаторы таблиц в кавычках, хотя идентификаторы столбцов в кавычках, похоже, подходят.Этот запрос выполняется отлично:
select
lower(connect_by_root "t_directory"."name"),
connect_by_isleaf,
connect_by_iscycle,
substr(
sys_connect_by_path(lower("t_directory"."name"), '/'),
2) "dir"
from "t_directory"
start with "t_directory"."parent_id" is null
connect by nocycle prior t_directory."id" = "t_directory"."parent_id"
order siblings by lower("t_directory"."name") asc
...с той разницей, что:
-- Bad:
connect by nocycle prior "t_directory"."id" = "t_directory"."parent_id"
-- Good:
connect by nocycle prior t_directory."id" = "t_directory"."parent_id"
Не связан с StackOverflow