用Navicat將mysql導入Oracle后,查詢報錯:表或視圖不存在


1.情景展示

使用Navicat,可以很方便的實現:mysql與Oracle的數據互傳;

我將mysql數據庫當中的某些表導入Oracle數據庫后,導致:

查詢導入的表名,被自動加上了雙引號;

一旦手動將雙引號刪除,導入的表將無法查詢,報錯信息如下:ORA-00942: table or view does not exist

在plsql中也是如此:

2.原因分析

Oracle表和字段是有大小寫的區別:

Oracle默認是大寫,如果我們用雙引號括起來的就區分大小寫,如果沒有,系統會自動轉成大寫(即使我們用的是小寫)。

當Oracle執行的時候,默認執行的是:select *  from META_THEME_COPY1;

由於Oracle區分大小寫,所以才查不到此表。

在Oracle中,我們可以用雙引號括起來,來區分大小寫(也就是,強制Oracle,按照雙引號之間內容來執行,不再自動轉換成大寫)。

因為,Oracle中,表名:meta_theme_copY1,所以,才會報錯:此表不存在。

3.解決方案

方式一:在Navicat中手動對表進行重命名;

點擊Navicat工具欄上的“表”--》找到要重命名的表,按f2,進行重命名改成大寫即可。

方式二:將原來導入的表刪除,用Navicat重新導一次。

Navicat的數據傳輸選項中,可以指定輸出是:大寫還是小寫。

工具--》數據傳輸;

選擇好要傳輸的兩端數據后,點擊“選項”;

勾選:轉換對象名為小寫/大寫的選項,選擇“大寫”;

默認選中的是:小寫,所以才會導致上述情況的發生。

4.拓展延伸

我們一起來,看一看:Navicat導入該表時的建表語句到底是個啥?

查看Oracle的建表語句,語法:

select dbms_metadata.get_ddl('TABLE','表名') from dual;

我們可以看到: 

此表在建表的時候,表名和字段名,都被強制加了雙引號。

但是,事實上表在創建成功后,只有表名被控制成了小寫,字段並不受影響。

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:


免責聲明!

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



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