PDA

View Full Version : Fehlermeldung SQL0420 bei Abfrage an AS400



padawan
18-05-10, 08:20
Hallo,
V5R3, ASP.NET, WinXP

beim Absetzen einer Abfrage an die AS400 erhalte ich folgende Fehlermeldung:
SQL0420 - Zeichen in CAST-Argument ungültig.

Aufbau:
Spalte SPSCHL alphanumerisch Länge 10

BeispielTab:

SPSCHL
E000
E001
E400
E401
E800
...
E999

Abfrage:
SELECT MIN(RIGHT(SPSCHL, 9) + 1) AS NEW_SPSCHL
FROM SERVER.SWTEST.BSSP00
WHERE (SPFNAM = '$FAXEKV') AND ((RIGHT(SPSCHL, 9) + 1) NOT IN
(SELECT RIGHT(SPSCHL, 9) AS Expr1
FROM SERVER.SWTEST.BSSP00 BSSP00_1))

Hintergrund ist es die Lücken aufzufüllen. Die Spalte SPSCHL ist kein Primary Key. Ich extrahiere für die Spalte SPSCHL nur die Nummern - das erste Zeichen in dieser Spalte ist ein Buchstabe, der in dieser Abfrage erst einmal unrelevant ist.
Wie formuliere ich die Abfrage richtig, damit der ODBC-Treiber die Abfrage übersetzen kann?

Danke und Gruss
Tobias

Fuerchau
18-05-10, 08:35
Mit Zeichen läßt sich schlecht rechnen:

RIGHT(SPSCHL, 9) + 1

Hier musst du den Wert noch in eine Zahl umwandeln:

dec(RIGHT(SPSCHL, 9), 9, 0) + 1

padawan
18-05-10, 09:29
Hier musst du den Wert noch in eine Zahl umwandeln:

dec(RIGHT(SPSCHL, 9), 9, 0) + 1

Der ODBC-Treiber erkennt "dec" nicht und meckert mit Fehlermeldung:
SQL0204:
ERROR 42502 IBM iSeries Access ODBC-Treiber DB2 UDB SQL0204 - dec der Art *N in *LIBL nicht gefunden. An welcher Stelle muß ich die Konvertierung in Decimal einfügen?

Danke.
Gruss
Tobias

Fuerchau
18-05-10, 11:06
Das hat den ODBC-Treiber auch nicht zu interessieren. DEC(xxx, n, p) ist die Kurzform von cast(xxx as decimal(n, p)) und wird direkt von der AS/400 ausgeführt.
Ich weiß nicht, was du da ggf. noch falsch machst. Wichtig sind ggf. Leerzeichen vor und nach den Konstanten, da sonst ggf. die Parameter nicht stimmen:

dec(xxx,_9,_0)