Allgemeiner Syntaxfehler, der von der CONNECT BY-Abfrage in Informix ausgelöst wird, wenn Tabellenbezeichner in Anführungszeichen verwendet werden
-
21-12-2019 - |
Frage
Beim Ausführen der folgenden Abfrage in einer Informix-Datenbank meldet die Datenbank einen allgemeinen Syntaxfehler (ohne Angabe der Ursache des Problems).Dieselbe Abfrage läuft perfekt auf CUBRID- oder Oracle-Datenbanken, die beide auch das unterstützen CONNECT BY
Syntax:
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
Die von mir verwendete Datenbank ist eine Developer Edition von Informix 12.10 unter Windows.Ich führe die Abfrage von einem JDBC-Treiber mit der folgenden Verbindungs-URL aus (um Tabellenbezeichner in Anführungszeichen zu ermöglichen):
jdbc:informix-sqli://localhost:9092/test:INFORMIXSERVER=ol_informix;DELIMIDENT=y
Lösung
Das genaue Problem hier ist die Tatsache, dass prior
akzeptiert keine Tabellenbezeichner in Anführungszeichen, Spaltenbezeichner in Anführungszeichen scheinen jedoch in Ordnung zu sein.Diese Abfrage läuft einwandfrei:
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
...mit dem Unterschied:
-- Bad:
connect by nocycle prior "t_directory"."id" = "t_directory"."parent_id"
-- Good:
connect by nocycle prior t_directory."id" = "t_directory"."parent_id"