使用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中這張表是存在的並包含數據。
但是奇怪的是表名上加了雙引號,去掉雙引號后提示“表或視圖不存在”。
問題原因:
參考:https://www.cnblogs.com/fuchen/p/5680478.html
1、Oracle表和字段是有大小寫的區別。Oracle默認是大寫,如果我們用雙引號括起來的就區分大小寫,如果沒有,系統會自動轉成大寫。
2、Navicat傳輸數據時按照MySQL中的表名大小寫狀態進行傳輸,導致在Oracle中必須通過加雙引號的方式進行操作。
解決辦法:
Navicat數據傳輸工具的選項卡中提供了“轉換對象名為小寫/大寫”的選項,勾選為大寫再次進行數據傳輸即可。