2017-03-03 2 views
0

Ich versuche eine Abfrage ähnlich der folgenden auf Informix, aber ich bekomme jedes Mal einen Syntaxfehler (-201: "Ein Syntaxfehler ist aufgetreten").Warum gibt eine "WITH" -Klausel einen Syntaxfehler bei Informix?

with a_qry (locationnames) as (SELECT * FROM TABLE(LIST{'abc','xyz'})) 
select locationnames from a_qry; 

Kann jemand bitte helfen mit diesem?

+3

Und der Syntaxfehler sagt? – jarlh

+1

Informix unterstützt die 'WITH'-Syntax nicht, die für CTEs verwendet wird. Vielleicht können ähnliche Ergebnisse mit abgeleiteten Tabellen oder mit 'CONNECT BY' erhalten werden? –

+0

@jarlh: Es wird die nicht informative Meldung "-201: Ein Syntaxfehler ist aufgetreten" angezeigt. Das ist Informix 'allgemeine "Ich habe keine Ahnung, was los ist" -Nachricht. –

Antwort

2

Die Dokumentation für die Informix SELECT-Anweisung enthält die WITH-Klausel nicht, da der Server die WITH-Klausel und die allgemeinen Tabellenausdrücke (CTEs) nicht unterstützt - ein schwerwiegendes Versäumnis, aber dennoch eine Tatsache des Lebens.

Für Ihr spezifisches Beispiel könnten Sie verwenden:

SELECT locationnames 
    FROM (SELECT * FROM TABLE(LIST{'abc','xyz'})(locationnames)); 

, die ergeben würden:

abc 
xyz 

wenn die Unterabfrage nicht notwendig ist hier natürlich (Sie einfach SELECT * FROM TABLE(LIST{'abc','xyz'})(locationnames) nutzen könnten um das gleiche Ergebnis zu erhalten). Im Allgemeinen müssen Sie jedoch jede Bezugnahme auf einen CTE vollständig aufschreiben, mit dem Risiko, dass der Optimierer die Gemeinsamkeit nicht erkennt und daher nicht so gut wie möglich optimiert.