ORA-01843: kein Gültiger Monat in der Java-Anwendung
Haben wir eine Java-Webanwendung bereitgestellt werden, die in SAP Netweaver, der greift auf eine Oracle 10g Datenbank über plain JDBC. Die Anwendung war in Ordnung arbeiten, bis vor ein paar Tagen, wenn eine Abfrage war, die den folgenden Fehler:
ORA-01843: not a valid month
Die Abfrage, geben uns Mühe, ist dies:
SELECT *
FROM (SELECT *
FROM (SELECT inspeccion.sociedad_id,
inspeccion_id,
estado_id,
(SELECT des_estado
FROM estado
WHERE estado.estado_id = inspeccion.estado_id)
des_estado,
(SELECT numero_secuencia
FROM estado
WHERE estado.estado_id = inspeccion.estado_id)
numero_secuencia,
planta_id,
(SELECT des_planta
FROM planta
WHERE planta.planta_id = inspeccion.planta_id)
des_planta,
area_id,
(SELECT des_area
FROM area
WHERE area.area_id = inspeccion.area_id) des_area
,
igp_id,
'-'
nom_lider,
nom_inspector,
nom_responsable,
To_char(fecha_inspeccion, 'DD/MM/YYYY')
fecha_inspeccion,
observacion,
recomendacion
FROM inspeccion) inspeccion) t_inspeccion
WHERE estado_id NOT IN ( 10 )
AND t_inspeccion.estado_id IN ( 11, 12 )
AND t_inspeccion.planta_id = 42
AND t_inspeccion.fecha_inspeccion >= To_date('01/11/2010', 'dd/mm/yyyy')
AND t_inspeccion.sociedad_id = '0101'
ORDER BY t_inspeccion.numero_secuencia,
t_inspeccion.fecha_inspeccion
Waren wir zu Ahnen, der To_date('01/11/2010', 'dd/mm/yyyy')
Aussage, aber wenn wir die Abfrage ausführen Trog DBVisualizer haben wir überhaupt keine Probleme.
Bin ich irgendwie hier verloren. Vielleicht gibt es eine DB-Einstellung, dass die Unordnung mit der Abfrage, oder einige SAP-Netweaver-Konfiguration? Oder vielleicht einige Oracle-Treiber Problem?
- Welcher Datentyp ist
fecha_inspeccion
? Istinspeccion
eine Tabelle oder einen view? - Inspeccion ist eine Tabelle, und fecha_inspeccion hat einen DATE-Datentyp.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der geschachtelten select-das wird
t_inspeccion
Sie haben:... und dann in der äußeren
where
Klausel, die Sie haben:Angenommen, die ursprüngliche
inspection.fecha_inspeccion
ist eindate
Sie zu sein scheinen, konvertieren in einen string, dann eine implizite Konvertierung wieder zu einem Zeitpunkt zu vergleichen, der zu Ihrem festen Wert. Ich vermute, dass die implizite Konvertierung vont_inspeccion.fecha_inspeccion
wirft den Fehler, evtl. aus einer unerwartetenNLS_DATE_FORMAT
Einstellung; die in Java normalerweise erhalten Sie von Ihrem Gebietsschema. Aus dem Fehler-ich denke, es ist implizit mit MM/DD/YYYY, aber könnte leicht etwas anderes sein.Ich sehe nicht ein, warum Sie hatte die
to_char()
überhaupt, obwohl, es sei denn, Sie wollen, dass vor allem das text-format in die Ergebnisse; in diesem Fall müssen Sie entweder explizit konvertieren das Datum wieder in diewhere
Klausel:... oder ziehen Sie die ursprüngliche Spalte Datum als auch und vergleichen, mit, dass, obwohl, dass wäre vielleicht brauchen Sie, um eine Liste der anderen Spalten in der äußersten
select
. Wenn Sie sind, oder erwarten sein, über einen index auffecha_inspeccion
dann können Sie auch die Leistung verringert, indem man es als ein string.java
code . Tatsächlich in dieser Funktion gibt essysdate
einfügen einer Tabelle. Fehler gibt, die von dieser Funktion. Obwohl ich den test dieser Funktion mitPL-SQL developer
und es funktioniert perfekt java-Aufruf fehlschlägt. PC regionalen Einstellung ist USA und ich kann es nicht ändern, aus irgendeinem Grund. DB verwendet Türkisch.dd.mm.YYYY
aber UNS nutztmm.dd.YYYY
. Ich kann nicht definieren explizite Maske für einen Aufruf der Funktion.to_date(sysdate)
dies ist eine erstaunlich häufige Fehler). Wenn Sie nicht herausfinden können, wo es schief gehen, dann bitte eine neue Frage stellen, und Ihre Funktion code.Oracle Forms
system. Leider sind die meisten der Dinge, die eingebettet waren inoracle packages
. Ich möchte nicht Dinge, die ungültigen in ein system, die 1000 aktive Nutzer. Aber ich halte Ihre Vorschläge, meine Meinung.