sql >> Databáze >  >> RDS >> Oracle

Apache Dbutils mění název sloupce v aktualizaci SQL

Měl jsem podobný problém. Myslím, že je to chyba v ovladači Oracle JDBC 7 (ojdbc7.jar). Chyba může být v metodě PreparedStatement.getParameterMetaData.

Tuto metodu interně používají Apache DBUtils. Nešlo by tedy o chybu DBUtils, ale o chybu z ovladače Oracle JDBC distribuovaného s Oracle 12c.

Stejný dotaz bude pravděpodobně fungovat dobře, pokud použijete ovladač Oracle 11g ojdbc6.jar. Alespoň u mě to fungovalo.

Pokud chcete vidět, jak je dotaz interně nesprávně zpracován ovladačem Oracle ojdbc7.jar, můžete použít hlavní metodu obsaženou ve třídě oracle.jdbc.driver.OracleParameterMetaDataParser. Zkuste toto:

např.

Výstupem je vaše SQL Sentence analyzovaná a převedená na SQL Query, který interně používá ovladač k identifikaci datových typů parametrů:

Ale jak můžete vidět na ukázce, FIRSTNAME je špatně analyzováno právě jako "F".

Pomocí jednoho z dotazů, které jste zadali ve své otázce, výsledkem je, že jeden z parametrů prostě zmizí... takže analyzátor říká „5“ parametrů, ale interní dotaz použitý k získání datových typů má ve skutečnosti pouze „4“ (HUMIDITY má pryč z SELECT).

výstup:

Jak to opravit? Nemám ponětí, ale jak jsem řekl výše, pomocí ovladače Oracle 11g ojdbc6.jar funguje stejný dotaz (dokonce i připojení k databázi Oracle 12c...).

Chování je docela náhodné. Vypadá to, že to závisí na prvním písmenu sloupce použitého v UPDATE. Pokud to začíná na F a H, vždy selže, ale nevím, zda existuje nějaká jiná podmínka.



  1. Rails 3:Chyba migrace při použití json jako typu sloupce v ActiveRecord podporovaném Postgres

  2. Nastavení dotazu pro konkrétní pole entity Hibernate

  3. Spustit spouštěč pouze při aktualizaci určitých sloupců (SQL Server)

  4. Jak získat druhý nejnovější řádek z mysql?