使用Navicat遷移MySQL數據至Oracle時大小寫原因報“表或視圖不存在”問題處理


使用Navicat提供的數據傳輸工具將JEECMSv9的MySQL的數據遷移至Oracle數據庫,數據遷移成功表都存在,但是在程序啟動時提示表或視圖不存在。

Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: 表或視圖不存在

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:447)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:951)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:513)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:227)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:208)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:886)
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1175)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1296)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3613)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3657)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1495)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:353)

    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:82)
    ... 63 more

跟蹤源碼,發現是找不到“jc_task”表,但是在Oracle中這張表是存在的並包含數據。

image

但是奇怪的是表名上加了雙引號,去掉雙引號后提示“表或視圖不存在”。

image

 

問題原因:

參考:https://www.cnblogs.com/fuchen/p/5680478.html

1、Oracle表和字段是有大小寫的區別。Oracle默認是大寫,如果我們用雙引號括起來的就區分大小寫,如果沒有,系統會自動轉成大寫。
2、Navicat傳輸數據時按照MySQL中的表名大小寫狀態進行傳輸,導致在Oracle中必須通過加雙引號的方式進行操作。

 

解決辦法:

Navicat數據傳輸工具的選項卡中提供了“轉換對象名為小寫/大寫”的選項,勾選為大寫再次進行數據傳輸即可。

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM