PDA

View Full Version : Ich verstehe es nicht



KingofKning
11-08-20, 08:52
Manchmal glaube ich, ich sollte in Rente gehen.

Habe hier ein SQL-Statement das im Green Screen mit strsql sauber läuft.


insert into dat007 /*11.08.20 09:29*/
(D007PLKZ, D007KZ1, D007ARTNR, D007KZ2, D007FILLE1,
D007KZ3, D007FILLE2, D007KZ4, D007FILLE3, D007KZ5,
D007PREIS1, D007KZ6,
D007PREIS2, D007KZ7,
D007PREIS3, D007KZ8,
D007PREIS4, D007KZ9,
D007PRAB2, D007KZ10,
D007PRAB3, D007KZ11,
D007PRAB4)
select
CAST(case when preisliste = ' ' then ' '
when preisliste = 'EH' then ' '
when preisliste = '201869' then '1000'
when preisliste = '200065' then '1001'
when preisliste = '201903' then '1002'
when preisliste = '201779' then '1003'
when preisliste = '2041689' then '1004'
when preisliste = '2041728' then '1005'
when preisliste = '2041798' then '1006'
else preisliste end
AS CHAR(5) CCSID 273),
';', material, ';', ' ',
';', ' ', ';', ' ', ';',
dec(EK_PR00001, 6 , 2), ';',
dec(EK_PR00002, 6 , 2), ';',
dec(EK_PR00003, 6 , 2), ';',
dec(EK_PR00004, 6 , 2), ';',
dec(replace(STAFF00001,'.',''), 4, 0), ';',
dec(replace(STAFF00002,'.',''), 4, 0), ';',
dec(replace(STAFF00003,'.',''), 4, 0)
from dat012


Wenn ich das selbe unter IBM i Access Client Solutions Version: 1.1.8.2 (sprich Java Version) mache, bekomme ich eine Fehlermeldung mit der ich nichts anfangen kann.



http://newsolutions.de/forum-systemi-as400-i5-iseries/file:/C:/Users/ADMIN-~1/AppData/Local/Temp/acs.jar_cache1165509825119544106.dir/4.dat!/mrm_resources/icons/ping_error.gif SQL-Status: 22018
Anbietercode: -420
Nachricht: [SQL0420] Zeichen in CAST-Argument ungültig. Ursache . . . . : Ein Zeichen im Argument für die Funktion CAST war nicht korrekt. Fehlerbeseitigung: Die Ergebnisdatenart in eine Art ändern, die die Zeichen im CAST-Argument erkennt, oder das Argument so ändern, dass es die gültige Darstellung eines Werts für die Ergebnisdatenart enthält. Die Anforderung wiederholen.
http://newsolutions.de/forum-systemi-as400-i5-iseries/file:/C:/Users/ADMIN-~1/AppData/Local/Temp/acs.jar_cache1165509825119544106.dir/4.dat!/mrm_resources/icons/ping_error.gif Die Verarbeitung wurde beendet, weil die hervorgehobene Anweisung nicht erfolgreich ausgeführt wurde.

Wenn ich aus dem insert ein Select mache läuft der durch.
Ich habe diverse Felder mal entfernt und der Übeltäter scheint das hier zu sein: dec(EK_PR00001, 6 , 2), ';',

Verstehe ich aber nicht, weil die Werte hinterher gut aussehen und wie schon gesagt der GreenScreen nicht mosert.

Was tun außer sich im See zu ertränken?

GG 3945


Wenn ich ein Teilselect im GreenScreen laufen lasse sieht das Ergebnis so aus:

Anfang auf Zeile . . . . . .
....+....1....+....2....+...
"EK-Preis0" Funktion CAST
6,47 6,47
1,19 1,19
1,19 1,19
1,35 1,35
1,19 1,19
1,35 1,35
1,52 1,52
1,19 1,19
1,19 1,19


in Java so:
6,47 -
1,19 -


sprich er zeigt mir da schon keine korrekten Werte an.

Fuerchau
11-08-20, 09:34
Irgendwas vermisse ich da noch.
Wozu sind die ganzen ';'-Spalten gut?

Andererseits habe ich bzgl. des DEC-Casts auch schon Probleme in V7R3 bekommen, wenn Nachkommastellen abgeschnitten werden.
STRSQL setzt da irgendeine Option (habe ich nicht gefunden), die diese Warnungen ignoriert.
Mache ich das dann native im Programm wird eine Diagnosenachricht "Signifikante Stellen abgeschnitten" ausgeworfen und der SQL stirbt. Die Meldung findet man auch nur im Joblog.

Selbst ein "dec(round(feld, 2), 11, 2)" führt zu diesem Fehler.
Erst ein "cast round(feld, 2) as dec(11, 2))" funktionierte, da die Funktion DEC() wohl anders implementiert ist als CAST().
Zu mal früher das Abschneiden von Nachkommastellen nie zu Fehlern geführt hat.

Robi
11-08-20, 09:34
mach mal 6, 2 statt 6 , 2

Fuerchau
11-08-20, 09:37
Die Anzahl Leerzeichen zwischen Parametern ist nicht relevant, es muss nur sichergestellt sein, dass nicht eine Zahl interpretiert wird.
dec(a, 11, 2)
dec(a, 11 , 2 )
dec(a, 11,2) <= Führt bei Decimalcomma (Connection) zu Fehler, bei Decimalpoint funktionierts.

KingofKning
11-08-20, 10:07
Irgendwas vermisse ich da noch.
Wozu sind die ganzen ';'-Spalten gut?

Die Daten werden dann per CPYTOIMPF exportiert

camouflage
11-08-20, 10:47
Mach einen ACS update auf 1.1.8.5!

Fuerchau
11-08-20, 11:08
Für den CPYTOIMPF brauchst du die nicht, da FLDDLM ja als Trennzeichen angegeben wird.
Und der Fehler wird von SQL gemeldet und nicht von ACS abhängig.