Общая синтаксическая ошибка, возникающая из запроса CONNECT BY в Informix при использовании идентификаторов таблицы в кавычках.

StackOverflow https://stackoverflow.com//questions/25036439

Вопрос

При выполнении следующего запроса к базе данных 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"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top