[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2008
    Beiträge
    56

    Question SQL mit Cast in Where-Bedigung

    Hallo Welt

    Dieses SQL-Statement funktioniert wie erwartet:
    SELECT CAST(KWDVAL AS DECIMAL(18, 5)) FROM RTKWD

    Dieses SQL-Statement funktioniert aber nicht:
    SELECT KWDVAL FROM RTKWD WHERE CAST(KWDVAL AS DECIMAL(18, 5)) < 0
    In diesem Fall erscheint die Fehlermeldung "Auswahlfehler für Feld *N." (QRY2283)

    Kann es sein, dass ein Cast in der Where-Bedingung nicht möglich ist? Gibt es vielleicht dafür einen anderen Trick?

    Schöne Grüsse aus der Schweiz

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... je nachdem, was Du da castest, kann das schiefgehen, wenn da Murks drinsteht.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Bei
    Code:
    SELECT CAST(KWDVAL AS DECIMAL(18, 5)) FROM RTKWD
    werden nur die Werte jener Spalte gecastet die auch ausgewählt bzw. angezeigt werden.
    Im STRSQL bekommst du bei einer größeren Tabelle eben immer nur einen Block angezeigt.

    Bei
    Code:
    SELECT KWDVAL FROM RTKWD WHERE CAST(KWDVAL AS DECIMAL(18, 5)) < 0
    Müssen alle Sätze wegen des CAST in der WHERE Bedingung gelesen werden um die Auswahl filtern zu können.

    Wenn jetzt irgendwo Mist drinnen steht, bekommst du einen Fehler. Diesen Fehler bekommst du beim ersten Select auch, wenn du dir ALLE Sätze anzeigen lässt.
    Im Joblog sollten jedoch mehr Informationen vorhanden sein um den entsprechenden zu finden wo das Problem auftritt.
    Eventuell hast du das Problem bei mehreren Sätzen und müsstest dies in der WHERE Bedingung berücksichtigen.

    lg Andreas

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Beim STRSQL werden dir die Daten sogar alle angezeigt, falsche Werte führen nicht zum Abbruch.
    In embedded SQL kann man dann leider nicht weiterlesen auch wenn man einen NULL-Anzeiger verwendet (was macht also STRSQL da anders?).

    In der Where-Klausel wird ein Tabelscan durchgeführt.
    Bis V5R4 konnte man mit einem Case-Ausdruck die fehlerhaften Sätze ausschließen.
    Seit V6R1 klappt das nicht immer, da die SQE die Ausdrücke (ins besonders AND-Beziehungen) ggf. in einer anderen Reihenfolge auswertet, also erst den cast und dann den Ausschluss.
    Dieses Problem hatte ich leider nach der Umstellung von V5R4 auf V6R1.
    Auch eine View (CTE, derived Table) hilft da nicht, da die CQE hier alles optimiert.

    Da es in SQL leider keine Fehlerbehandlung gibt, musst du für solche Dinge eine UDF schreiben, die dir die Fehler dann auch abfängt.
    Zeitkritischer ist das auch nicht, da du sowieso nicht über einen Index für diesen Ausdruck gehen kannst.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. SQL ... where feld in(:invar)
    By Robi in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-12, 12:49
  2. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  3. SQL Where und Substring
    By linguin in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 06-12-05, 11:29
  4. SQL EXISTS Abfrage ausserhalb WHERE
    By mwithake in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 05-11-05, 09:15
  5. CAST von Numeric nach Date via SQL
    By KB in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 15-05-01, 10:43

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •