![]() |
Datenbank: ADS • Version: 9.10 • Zugriff über: Advantage Komponenten
SQL-CASE wird immer für alle Ausdrücke geprüft?
Hallo allerseits,
ich habe eine Frage, die sich nicht auf Delphi, sondern auf SQL des ADS Advantage Datenbase Server bezieht. Ich habe ein SQL-Statement der folgenden Form:
SQL-Code:
Es gilt, wenn feld_A = 2 dann feld_C = 0. feld_D ist immer > 0.
SELECT
CASE feld_A WHEN 1 THEN feld_B / feld_C WHEN 2 THEN feld_B / feld_D END FROM tabelle Wenn ich diese Abfrage am Datenbankserver ausführe, wird immer eine Fehlermeldung 'Division by zero' angezeigt. Es scheint, dass der ADS-SQL-Server die Berechnung immer und für jeden Fall/Ausdruck durchführt, egal ob die Bedingung zutrifft oder auch nicht. Kann mir das jemand bestätigen oder habe ich am ADS irgendwas falsch eingestellt? Kann ich das Problem nur umgehen, indem ich das folgende, recht umständliche mache:
SQL-Code:
...WHEN 1 THEN (CASE feld_C WHEN 0 THEN 0 ELSE feld_B / feld_C END) END...
Gruß, Peter |
Re: SQL-CASE wird immer für alle Ausdrücke geprüft?
IIRC ist das so, wie Du beschreibst. Konfigurieren kann man das nicht.
Aber Du könntest es in eine UDF verpacken und damit elegant umgehen (ungetestet!):
SQL-Code:
create function div_null(div1 integer, div2 integer)
returns integer begin if div2=0 then return NULL; else return div1/div2; endif; end; |
Re: SQL-CASE wird immer für alle Ausdrücke geprüft?
Ist das denn ein Phänomen, welches nur beim ADS auftritt oder betrifft es auch andere SQL-Server?
Deine Lösung mit einer UDF ist natürlich ein elegantes Umschiffen des Problems. |
Re: SQL-CASE wird immer für alle Ausdrücke geprüft?
Zitat:
Wenn wirklich ja, dann vielleicht so...
SQL-Code:
SELECT feld_B / CASE WHEN feld_C = 0 THEN feld_D ELSE feld_C END
FROM tabelle |
Re: SQL-CASE wird immer für alle Ausdrücke geprüft?
Das sollte so immer gelten und somit wäre der Umbau des SQL-Strings korrekt.
Aber ich denke, dass der Vorschlag eine UDF einzusetzen, sinnvoller ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 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