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;
我們可以看到:
此表在建表的時候,表名和字段名,都被強制加了雙引號。
但是,事實上表在創建成功后,只有表名被控制成了小寫,字段並不受影響。