sql >> Base de Datos >  >> RDS >> Oracle

Apache Dbutils cambia el nombre de la columna en la actualización Sql

Tuve un problema similar. Creo que es un error en el controlador Oracle JDBC 7 (ojdbc7.jar). El error podría estar en el método PreparedStatement.getParameterMetaData.

Apache DBUtils utiliza este método internamente. Por lo tanto, no sería un error de DBUtils, sino un error del controlador Oracle JDBC distribuido con Oracle 12c.

La misma consulta probablemente funcionará bien si usa el controlador Oracle 11g ojdbc6.jar. Al menos funcionó para mí.

Si desea ver cómo el controlador Oracle ojdbc7.jar procesa incorrectamente internamente la consulta, puede usar el método principal incluido en la clase oracle.jdbc.driver.OracleParameterMetaDataParser. Prueba esto:

por ejemplo

El resultado es su sentencia SQL analizada y convertida en una consulta SQL que el controlador utiliza internamente para identificar los tipos de datos de los parámetros:

Pero como puede ver en la muestra, FIRSTNAME se analiza incorrectamente como "F".

Usando una de las Consultas que puso en su pregunta, el resultado es que uno de los parámetros simplemente desaparece ... entonces el analizador dice "5" parámetros pero la Consulta interna utilizada para obtener los tipos de datos tiene solo "4" (HUMIDITY tiene desaparecido del SELECCIONAR).

salida:

¿Como arreglarlo? Ni idea, pero como dije anteriormente, usando el controlador Oracle 11g ojdbc6.jar, la misma consulta funciona (incluso conectándose con una base de datos Oracle 12c...).

El comportamiento es bastante aleatorio. Parece que depende de la primera letra de la columna utilizada en la ACTUALIZACIÓN. Si empieza por F y H siempre falla, pero no sé si hay alguna otra condición.