PDA

View Full Version : SQL0418 Fehler - Parametermarkierung



edig
12-03-09, 08:49
Hallo Forum,

folgendes SQL-Statement funzt auf der AS wunderbar. Es geht um eine Datumsauswahl von 5 Tagen.
Unter Java mit SQLJ erhalte ich bei der
Ausführung folgenden Fehler:
"java.sql.SQLException: [SQL0418] Verwendung von Parametermarkierungen ungültig."
Weiss jemand wo der Fehler liegt? Danke...

SQL-Statement:
#sql rs = { select F1, F2
FROM bibl1.file1
WHERE F1 = '01' and
F2 = '1' and
F3 = 0 and
DATE('2009' concat '-' concat Substr(Digits(DATUM), 3, 2) concat '-' concat Substr(Digits(DATUM), 1, 2))
between CURDATE() and (CURDATE() + 5 DAYS)
ORDER BY Substr(Digits(DATUM), 3, 2),
Substr(Digits(DATUM), 1, 2)
};



Viele Grüße

B.Hauser
12-03-09, 09:01
Hallo;

ich nehme an, dass CURDATE und/oder CURDATE + 5 DAYS den Fehler verursachen.

Versuche folgendes:
1. Verwende anstatt CURDATE Current_Date. (Ich vermute allerdings, das dies auch nicht zum Erfolg führt.)
2. Ermittle das Tagesdatum und das Ende-Datum vorab. Bereite beides als alphnumerischen String auf und binde diese Ergebnisse ein.

Birgitta

Fuerchau
12-03-09, 11:51
Ich hoffe die "{}" gehören NICHT zum SQL-Befehl dazu.
"{}" initiieren eigentlich einen Procedure-Call.

BenderD
12-03-09, 13:00
Hallo,

it depends on release!
Parameter Marker Unterstützung auf der AS/400 ist ein leidiges Thema, die Datenbank kann da einiges nicht, was andere (auch DB2, soviel zu UDB, was ja auch wieder out ist) können, bereits der CONCAT ist problematisch. Manchmal hilft ein (eigentlich unsinniger) Cast. Zur weiteren Analyse würde ich nacheinander die Bedingungen und den order by reduzieren, um die Bruchstelle zu finden. Es kann aber durchaus sein, dass dieses Statement mit SQLJ nicht gegen die Datenbank zu kriegen ist.

Dieter Bender



Hallo Forum,

folgendes SQL-Statement funzt auf der AS wunderbar. Es geht um eine Datumsauswahl von 5 Tagen.
Unter Java mit SQLJ erhalte ich bei der
Ausführung folgenden Fehler:
"java.sql.SQLException: [SQL0418] Verwendung von Parametermarkierungen ungültig."
Weiss jemand wo der Fehler liegt? Danke...

SQL-Statement:
#sql rs = { select F1, F2
FROM bibl1.file1
WHERE F1 = '01' and
F2 = '1' and
F3 = 0 and
DATE('2009' concat '-' concat Substr(Digits(DATUM), 3, 2) concat '-' concat Substr(Digits(DATUM), 1, 2))
between CURDATE() and (CURDATE() + 5 DAYS)
ORDER BY Substr(Digits(DATUM), 3, 2),
Substr(Digits(DATUM), 1, 2)
};



Viele Grüße

edig
12-03-09, 13:56
Danke für die Eure Hilfe!
Habe die Lösung:

#sql rs = { select F1, F2
FROM bibl1.file1l
WHERE F1 = '01' and
F2 = '1' and
F3 = 0 and
Date(YEAR(CURRENT DATE) concat '-' concat Substr(Digits(DATUM), 3, 2) concat '-' concat Substr(Digits(DATUM), 1, 2))
between CURRENT DATE and (CURRENT DATE + 5 DAYS)
ORDER BY Substr(Digits(DATUM), 3, 2),
Substr(Digits(DATUM), 1, 2)
};


Schöne Grüße