![]() |
Datenbank: Firebird embedded (Win32) • Version: 2.5.2 • Zugriff über: IBX / IBExpert
Firebird embedded - Fehler bei coalesce
Hallo,
Ich habe folgende SQL:
SQL-Code:
Wenn ich diese SQL in Delphi in eine IBQuery stecke und die Query öffne erhalte ich:
SELECT
keyword_entry.entry_type, text_lng.string as titel, keyword_entry.entry_value FROM keyword JOIN keyword_entry on (keyword_entry.keyword_id = keyword.id) LEFT JOIN keyword_synonym on (keyword_synonym.keyword_id = keyword.id) LEFT JOIN text on (text.id = keyword_entry.titel_text_id) LEFT JOIN text_lng on (text_lng.text_id = text.id) and (text_lng.lng_id = :lng_id ) WHERE (coalesce(keyword_synonym.name, keyword.name, "") = lower(:keyword)) Zitat:
Zitat:
Woran liegt das? |
AW: Firebird embedded - Fehler bei coalesce
Also erst mal als Hinweis: es ist immer schlecht, eine Spalte "Name" zu nennen...
Doch das ist wohl nicht dein Fehler... Ich denke der Fehler liegt einfach an den Anführungszeichen. Probiere mal einfache Anführungszeichen:
Code:
SELECT
keyword_entry.entry_type, text_lng.string as titel, keyword_entry.entry_value FROM keyword JOIN keyword_entry on (keyword_entry.keyword_id = keyword.id) LEFT JOIN keyword_synonym on (keyword_synonym.keyword_id = keyword.id) LEFT JOIN text on (text.id = keyword_entry.titel_text_id) LEFT JOIN text_lng on (text_lng.text_id = text.id) and (text_lng.lng_id = :lng_id ) WHERE (coalesce(keyword_synonym.name, keyword.name, '') = lower(:keyword)) |
AW: Firebird embedded - Fehler bei coalesce
Hallo,
Warum ist es schlecht ein Feld "Name" zu nennen? (In Delphi kann ichs noch eher verstehen) Ich hätte es niemals geglaubt aber mit den anderen Anführungszeichen geht es tatsächlich... Das ist sehr seltsam weil ich auf der Arbeit auch Firebird benutze und es dort noch NIE einen Unterschied gemacht hat ob man '' oder "" benutzt hat :gruebel: Der einzige Unterschied ist dass wir dort eine Dialect 1 Datenbank haben und ich privat Dialect 3 benutze. Kann es das sein? Danke auf jeden Fall :) |
AW: Firebird embedded - Fehler bei coalesce
Naja, es gibt reservierte Wörter, die man möglichst nicht als Spaltennamen verwenden sollte...
"Name" gehört zwar (noch) nicht dazu, aber bei anderen Datenbanksystemen ist "Name" mittlerweile schon reserviert (z.B. Oracle) Wenn du also mal irgendwann die Datenbank wechseln möchtest, hast du hier ein Problem. Man kann allerdings auch reservierte Wörter verwenden, dann muss man diese in Anführungszeichen setzen. Ist eine Spalte also in Anführungszeichen gesetzt, wird der Spaltenname einfach so übernommen, auch wenn sich dahinter "normalerweise" z.B. eine Procedure oder ein reservierter Name verbirgt. Und genau das hat bei dir jetzt diesen Fehler verursacht. Im Prinzip gab es die Spalte "" nicht. Ob das bei Dialect 1 anders ist, kann ich dir nicht sagen, ich verwende nur Dialect 3. |
AW: Firebird embedded - Fehler bei coalesce
Okay, die Begründung mit den Anführungszeichen ist nachvollziehbar.
Es scheint als wäre Dialect 3 generell etwas strenger. In Dialect 1 geht z.B. folgendes ohne Probleme:
SQL-Code:
SELECT
lkz.lkz FROM lkz |
AW: Firebird embedded - Fehler bei coalesce
nimm einfache Anfürungszeichen für Stringkonstanten und DIalekt 3, Dialekt 1 ist evtl demnächst nicht mehr verfügbar
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz