-
Heavy standing on the wire. Teil xx
Hallo *all,
irgendwie stehe ich auf der Leitung.
Habe folgende Funktion erstellt
Code:
CREATE FUNCTION abneh2( PARARTNR dec(3) ) RETURNS
CHAR(10) LANGUAGE SQL READS SQL DATA BEGIN
DECLARE RETURNVAL CHAR ( 10 ) NOT NULL DEFAULT ' ' ;
DECLARE work CHAR ( 100 ) NOT NULL DEFAULT ' ' ;
FOR CSRC1 AS C1 CURSOR
FOR SELECT
case when substr(sdtxt1, 1, 5) = 'Marka' then
substr(sdtxt1, 10, 10) when substr(sdtxt1, 1, 4) = 'Saga' then
substr(sdtxt1, 11, 10) when substr(sdtxt1, 1, 4) = 'EGES' then
substr(sdtxt1, 07, 10) else sdtxt1 end as markt
FROM key01pf
WHERE sdschl = 130 and sdfa = 1
and int(substr(sdind, 12, 3))
= int('002')
Bei dem int(substr( habe ich schon tausend Variationen ausprobiert, bekomme aber immer die Meldung
SELECT/OMIT-Fehler in Feld Cast(Translate(Substr(KEY01PF_1.SDIND,12,3)
*UNNAMED Table) AS Integer), Teildatei KEY01PF.
SELECT-/OMIT-Fehler in Teildatei KEY01PF.
SELECT-/OMIT-Fehler in Teildatei KEY01PF.
Fehler bei Datenumsetzung oder beim Zuordnen von Daten.
Fehler bei benutzerdefinierter Funktion in Teildatei ADR01PF.
Abbruchantwort für Nachricht empfangen.
Kann mir jemand sagen wo der Wald aufhört damit ich den Baum wieder sehe.....
GG
-
Steht im Joblog nicht auch nocht die genaue SatzNr. wo der Fehler auftritt?
Hatte auch schon ähnliche Fehler und da lag es daran, dass es einen oder mehrere Sätze gab die einen anderen Inhalt hatten als ich erwartet hätte und da kommt es dann so so einen Fehler.
-
Ich habe mal ein select * darauf gemacht, um dann zu sehen das dort auch Müll drinsteht sprich keine Zahl.
select sdind, int(substr(sdind, 12, 3)) from key01pf
where sdschl = 130
and sdfa = 1
and
int(substr(sdind, 12, 3)) > 0
bricht mir dann auch ab.
Wie kann ich am besten prüfen ob der Inhalt zur Konvertierung Kompatibel ist?
GG
-
Das Problem bei solchen Konstrukten ist hier der Optimizer.
Durch die Whereklausel nimmt man an, dass diese in genau der vorgegebenen Reihenfolge abgefragt wird so dass der Datenfehler eigentlich nicht auftreten dürfte.
Der Optimizer dreht aber intern die Abfrage häufig um, so dass es zu unerwarteten Datenfehlern kommt.
Leider gibt es hierzu nur 2 Lösungen:
a) dafür sorgen, dass Datenfehler tatsächlich nicht vorkommen
b) die Abfrage auf Zeichen umstellen
and int(substr(sdind, 12, 3)) = int('002')
wird zu
and substr(sdind, 12, 3) = '002'
das ist auf jeden Fall sicherer.
Ist die Herkunft eines Vergleiches ggf. wiederum eine Variable, so musst du diese dann ich Char casten und ggf. formatieren:
- char(myNumVar)
- Digits(myNumVar)
- substr(Digits/char....)
-
Tja,
wenn man denn endlich das Problem verstanden hat, ist der Weg zur Lösung natürlich einfach.
Jetzt ist mein Waldspaziergang beendet.
Danke für die Hinweise.
GG
-
Wenn du wissen willst, welche Daten fehlerhaft sind gibt's folgende Variante:
where
trim(translate(substr(....), '', '0123456789')) <> ''
-
Nach der Umstellung von V5R4 auf V6R1 bin ich mit einigen SQL's genau auf dieses Problem gestoßen.
Mit V6R1 wurde der SQL vom Optimizer intern umgestellt, so dass der Datenausschluss der fehlerhaften Sätze nicht mehr funktionierte.
So starben halt einige Programme den Runtime-Tod (machten halt nicht das verlangte) da in den diversen Memoranden für die Umstellung diesbezüglich keine Hinweise gab.
Dies erforderte neben dem Ändern der SQL's ebenso auch eine andere Index-Strategie.
Wenn man solche Konvertierungen im Where anwendet führt das häufiger zum Tablescan als man glaubt.
Similar Threads
-
By NEWSolutions Redaktion in forum NEWSolutions artikel
Antworten: 0
Letzter Beitrag: 22-06-14, 08:00
-
By KingofKning in forum IBM i Hauptforum
Antworten: 21
Letzter Beitrag: 26-05-14, 15:31
-
By NEWSolutions Redaktion in forum NEWSolutions artikel
Antworten: 0
Letzter Beitrag: 02-11-13, 10:53
-
By logo_2 in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 28-04-03, 12:51
-
By alex in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 19-04-02, 08:05
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