Errore di sintassi generale sollevato da Connect by Query in Informix quando si utilizzano i identificatori della tabella cita

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

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
.

È stato utile?

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"
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top