Allgemeiner Syntaxfehler, der von der CONNECT BY-Abfrage in Informix ausgelöst wird, wenn Tabellenbezeichner in Anführungszeichen verwendet werden

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

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
War es hilfreich?

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"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top