Erro geral de sintaxe gerado pela consulta CONNECT BY no Informix ao usar identificadores de tabela entre aspas

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

Pergunta

Ao executar a consulta a seguir em um banco de dados Informix, o banco de dados relata um erro geral de sintaxe (sem qualquer indicação sobre a causa do problema).A mesma consulta funciona perfeitamente em bancos de dados CUBRID ou Oracle, ambos também suportam o CONNECT BY sintaxe:

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

O banco de dados que estou usando é uma Developer Edition do Informix 12.10 no Windows.Estou executando a consulta a partir de um driver JDBC com o seguinte URL de conexão (para permitir identificadores de tabela entre aspas):

jdbc:informix-sqli://localhost:9092/test:INFORMIXSERVER=ol_informix;DELIMIDENT=y
Foi útil?

Solução

A questão exata aqui é o fato de que prior não aceita identificadores de tabela entre aspas, embora os identificadores de colunas entre aspas pareçam adequados.Esta consulta funciona perfeitamente bem:

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

...com a diferença sendo:

-- Bad:
connect by nocycle prior "t_directory"."id" = "t_directory"."parent_id"

-- Good:
connect by nocycle prior t_directory."id" = "t_directory"."parent_id"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top