Car*_*ron 0 sql oracle jdbc oracle10g
我们在SAP Netweaver中部署了一个Java Web应用程序,它通过普通JDBC访问Oracle 10g数据库.几天前,当一个查询导致以下错误时,该应用程序运行正常:
ORA-01843: not a valid month
Run Code Online (Sandbox Code Playgroud)
给我们带来麻烦的查询是这样的:
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
Run Code Online (Sandbox Code Playgroud)
我们怀疑这个To_date('01/11/2010', 'dd/mm/yyyy')
陈述,但是当我们通过DBVisualizer运行查询时,我们完全没有问题.
我有点迷失在这里.也许有一个数据库设置正在搞乱查询或某些SAP Netweaver配置?或者也许是一些Oracle Driver问题?
在t_inspeccion
您拥有的嵌套选择中:
To_char(fecha_inspeccion, 'DD/MM/YYYY') fecha_inspeccion,
Run Code Online (Sandbox Code Playgroud)
...然后在外部where
条款中你有:
AND t_inspeccion.fecha_inspeccion >= To_date('01/11/2010', 'dd/mm/yyyy')
Run Code Online (Sandbox Code Playgroud)
假设原始inspection.fecha_inspeccion
是a date
,您似乎转换为字符串,然后执行隐式转换回日期以将其与固定值进行比较.我怀疑隐含的转换t_inspeccion.fecha_inspeccion
是抛出错误,可能来自意外的NLS_DATE_FORMAT
设置; 在Java中通常从您的语言环境中获取.从错误中我猜它是隐含地使用MM/DD/YYYY,但很容易就是其他东西.
我不明白为什么你有这个to_char()
,除非你特别想要结果中的文字格式; 在这种情况下,您需要在where
子句中显式转换日期:
AND To_date(t_inspeccion.fecha_inspeccion, 'dd/mm/yyyy')
>= To_date('01/11/2010', 'dd/mm/yyyy')
Run Code Online (Sandbox Code Playgroud)
...或者拉出原始日期列并使用它进行比较; 虽然这可能需要您列出最外层的所有其他列select
.如果您正在或期望使用索引,fecha_inspeccion
那么您可能还会通过将其视为字符串来降低性能.
归档时间: |
|
查看次数: |
9975 次 |
最近记录: |