-
OLDKDN ist in diesem Fall Numerisch.
ich habe mir eine Datei erstellt, wo in den Sourcen die Kundennummer vorkommt.
Manchmal kommt Sie Numerisch, manchmal auch Alpha.
Die Längen variieren auch zwischen 5, 0 bis 13, 0 und das selbe im Alpha-bereich.
Datei:
Code:
Feld Datei Art Länge
"SOURCE" KNDRSLT CHARACTER 20
TEILDATEI KNDRSLT CHARACTER 10
TEXT KNDRSLT CHARACTER 50
FELDNAME KNDRSLT CHARACTER 10
FELDLAENGE KNDRSLT CHARACTER 10
INFOTEXT KNDRSLT CHARACTER 30
TSTMP KNDRSLT TIMESTAMP
Im Programm stopple ich folgendes Sqlstatement zusammen:
Code:
TEXT = %trim(%XLATE(HK:HK1:TEXT));
SqlQry = 'INSERT INTO STATISTIK +
SELECT char(' + %TRIM(FELDNAME) + '), +
min(' + HK + %TRIM(SOURCE) + HK + '), +
min(' + HK + %TRIM(TEILDATEI) + HK + '), +
min(' + HK + %TRIM(TEXT) + HK + '), +
min(' + HK + %TRIM(FELDNAME) + HK + '), +
min(' + HK + %TRIM(FELDLAENGE) + HK + '), +
COUNT(*), +
min(' + HK + %TRIM(INFOTEXT) + HK + '), ' +
%CHAR(SQLCOD) +
' from ' + %TRIM(TEILDATEI) + ' A ';
IF %SCAN('A':FELDLAENGE) = *ZEROS;
// Feld Numerisch
SqlQry = %TRIMR(SqlQry) +
' WHERE exists +
(select * from KUNDENP P +
where dec(A.' + FELDNAME + ', 13, 0) = P.KDNNR)';
ELSE;
// Feld Alpha
SqlQry = %TRIMR(SqlQry) +
' WHERE exists +
(select * from KUNDENP P +
where A.' + FELDNAME + ' = CHAR(P.KDNNR))';
ENDIF;
SqlQry = %TRIMR(SqlQry) +
' group by char(' + %TRIM(FELDNAME) + ')';
Exec SQL
execute immediate :SqlQry;
INSERT INTO STATISTIK
SELECT char(OLDKDN), ...
FROM MYFILE A
WHERE exists (select * from KUNDENP P
where dec(A.OLDKDN , 13, 0) = P.KDNNR )
GROUP BY char(OLDKDN)
Hoffe es erklärt zu haben.
-
Ist denn die Spalte OLDKDN auch tatsächlich NULL-fähig?
Ich vermute eher, dass in dem Feld kein NULL-Wert, sondern ungültige numerische Werte (z.B. Blanks) stehen. Schau Dir mal die Hex-Werte an.
In diesem Fall müssten zunächst die ungültigen numerischen Werte korrigiert werden, bevor Dein SQL richtig funktionieren kann.
Vielleicht noch 2 Anmerkungen:
1. Man sollte niemals eine Variable in einem embedded SQL mit SQL anfangen lassen. Diese Variablen hat IBM sich für den PreCompiler (SQLCA und SQLDA und sonst. Variablen) reserviert. Selbst wenn Du heute noch keine Probleme hast könnte IBM mit dem nächsten Release eine Variable SQLQRY in die Communications oder Descriptlor-Area einfügen, und dann ?
2. Für den Vergleich ist es besser die numerischen Felder in alphanumerische zu konvertieren am besten mit VARCHAR anstatt CHAR. Bei CHAR wird mit Blanks auf die volle Länge aufgefüllt. Bei VarChar wird nur die Zahl linksbündig ausgerichtet ohne folgende Blanks ausgegeben.
Sollte es sich tatsächlich um einen NULL-Wert handeln, kannst Du diesen auch mit Hilfe der Funktion COALESCE in einen Default-Wert z.B. 0 konvertieren.
Birgitta
-
Liebe Birgitta,
danke für die Anmerkungen, war mir leider nicht so bewusst.
Bisher habe ich null-Werte in der Datenbank mit upddta manipuliert.
Ginge das auch mit Sql damit ich die Werte mit einem Update auf 0 setzten kann?
-
Sofern es sich um echte NULL-Werte handelt, ... ja
Etwa so:
Code:
Update YourFile
set YourField = 0
Where YourField is NULL;
Birgitta
-
Hallo,
das Feld ist nachträglich hinzugefügt worden.
Aber sicher ein schreibendes Programm nicht kompeliert worden.
Was ist eigentlich ein echter Null-Wert?
Der oben beschriebene Fall?
Wie schaut ihr die Hex-Werte an? Mit DSPPFM?
lg
-
select hex(feld1), hex(feld2) from ...
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Danke an alle,
ich habe es nun so upgedatet:
update myfile
set oldKDN = 0
where hex(oldKDN) = '404040'
lg
-
Warum soll ein Vergleich mit VARCHAR(NumWert) besser sein?
Damit verhindert man jedweden Indexzugriff, es sei denn man benutzt ebenso einen kalkulierten Index.
Similar Threads
-
By cicero22 in forum IBM i Hauptforum
Antworten: 12
Letzter Beitrag: 03-09-14, 18:45
-
By alexk2013 in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 14-05-14, 12:33
-
By hs in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 31-01-14, 11:49
-
By Sigma in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 23-04-03, 13:48
-
By KB in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 18-05-01, 15:04
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