Errore di sintassi generale sollevato da Connect by Query in Informix quando si utilizzano i identificatori della tabella cita
-
21-12-2019 - |
Domanda
Quando si esegue la seguente query su un database Informix, il database riporta un errore di sintassi generale (senza alcuna indicazione rispetto a ciò che causa il problema).La stessa query viene eseguita perfettamente sui database di Cubrid o Oracle, entrambi supportano anche la sintassi 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
.
Il database che sto usando è un'edizione sviluppatore di Informix 12.10 su Windows.Sto eseguendo la query da un driver JDBC con il seguente URL di connessione (per consentire gli identificatori della tabella quotati):
jdbc:informix-sqli://localhost:9092/test:INFORMIXSERVER=ol_informix;DELIMIDENT=y
. Soluzione
Il problema esatto Ecco il fatto che prior
non accetta identificatori di tabelle citati, anche se gli identificatori di colonna citati sembrano bene.Questa query esegue perfettamente bene:
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
.
... con la differenza essere:
-- Bad:
connect by nocycle prior "t_directory"."id" = "t_directory"."parent_id"
-- Good:
connect by nocycle prior t_directory."id" = "t_directory"."parent_id"
.