-
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
-
... je nachdem, was Du da castest, kann das schiefgehen, wenn da Murks drinsteht.
D*B
-
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
-
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.
Similar Threads
-
By Robi in forum IBM i Hauptforum
Antworten: 11
Letzter Beitrag: 28-06-12, 12:49
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By linguin in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 06-12-05, 11:29
-
By mwithake in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 05-11-05, 09:15
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks