sql >> Database teknologi >  >> RDS >> Oracle

Apache Dbutils ændrer kolonnenavn i opdatering Sql

Jeg havde et lignende problem. Jeg tror, ​​det er en fejl i Oracle JDBC 7-driveren (ojdbc7.jar). Fejlen kan være i metoden PreparedStatement.getParameterMetaData.

Denne metode bruges internt af Apache DBUtils. Så det ville ikke være en fejl i DBUtils, men en fejl fra Oracle JDBC-driver distribueret med Oracle 12c.

Samme forespørgsel vil sandsynligvis fungere fint, hvis du bruger Oracle 11g ojdbc6.jar-driveren. Det virkede i hvert fald for mig.

Hvis du vil se, hvordan forespørgslen behandles forkert internt af Oracle ojdbc7.jar-driveren, kan du bruge hovedmetoden inkluderet i oracle.jdbc.driver.OracleParameterMetaDataParser-klassen. Prøv dette:

f.eks.

Outputtet er din SQL-sætning parset og konverteret til en SQL-forespørgsel, der bruges internt af driveren til at identificere parameterdatatyperne:

Men som du kan se i eksemplet, er FIRSTNAME fejlagtigt parset som "F".

Ved at bruge en af ​​de forespørgsler, du sætter i dit spørgsmål, er resultatet, at en af ​​parametrene bare forsvinder... så parseren siger "5" parametre, men den interne forespørgsel, der bruges til at hente datatyperne, har faktisk kun "4" (HUMIDITY har gået fra SELECT).

output:

Hvordan fikser man det? Ingen idé, men som jeg sagde ovenfor, ved at bruge Oracle 11g ojdbc6.jar-driveren, virker den samme forespørgsel (selv at forbinde med en Oracle 12c-database...).

Opførselen er ret tilfældig. Det ser ud til, at det afhænger af det første bogstav i kolonnen, der bruges i OPDATERING. Hvis det begynder med F og H fejler det altid, men jeg ved ikke, om der er nogen anden betingelse.



  1. MariaDB JSON_COMPACT() Forklaret

  2. Hvordan kan jeg vise forespørgselstiden i Perl, DBI?

  3. Hent navnet på en rækkes kildetabel, når du forespørger på den forælder, den arver fra

  4. PostgreSQL - afrunding af flydende kommatal