AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL-CASE wird immer für alle Ausdrücke geprüft?
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-CASE wird immer für alle Ausdrücke geprüft?

Offene Frage von "PASST"
Ein Thema von PASST · begonnen am 14. Mai 2009 · letzter Beitrag vom 15. Mai 2009
Antwort Antwort
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#1

SQL-CASE wird immer für alle Ausdrücke geprüft?

  Alt 14. Mai 2009, 10:23
Datenbank: ADS • Version: 9.10 • Zugriff über: Advantage Komponenten
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:
SELECT
 CASE feld_A
  WHEN 1 THEN feld_B / feld_C
  WHEN 2 THEN feld_B / feld_D
 END
FROM tabelle
Es gilt, wenn feld_A = 2 dann feld_C = 0. feld_D ist immer > 0.

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:
...WHEN 1 THEN (CASE feld_C WHEN 0 THEN 0 ELSE feld_B / feld_C END) END...
Gruß,
Peter
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: SQL-CASE wird immer für alle Ausdrücke geprüft?

  Alt 14. Mai 2009, 15:28
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;
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: SQL-CASE wird immer für alle Ausdrücke geprüft?

  Alt 14. Mai 2009, 15:46
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.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: SQL-CASE wird immer für alle Ausdrücke geprüft?

  Alt 14. Mai 2009, 20:50
Zitat von PASST:
Es gilt, wenn feld_A = 2 dann feld_C = 0. feld_D ist immer > 0.
Ist das auch wirklich so?

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
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: SQL-CASE wird immer für alle Ausdrücke geprüft?

  Alt 15. Mai 2009, 06:54
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz