一、問題簡介
1、開發環境
操作系統:win10
數 據 庫:Oracle11g
數據庫連接工具:Navicat Premium
2、問題簡述
在使用SQL Development、Navicat Premium、powerdesigner生成SQL腳本 或 使用Navicat Premium的“數據傳輸”功能,將舊的數據庫復制到Oracle數據庫后,再使用select查詢語句查詢表中記錄會出錯。
二、問題解決方案
1、原因分析
Oracle數據庫的語法是大小寫敏感的,通過SQL語句創建表時,會自動將表名轉換成大寫。但是如果表名或字段名加上""后,Oracle不會將雙引號內的表名變成大寫。通過數據庫連接工具、數據傳輸功能生成的SQL語句中的表名生成都帶有雙引號。
在Oracle數據庫執行這種語句后,表名就變成了【表名加雙引號】的方式。我們可以通過表名加雙引號的方式來查詢表。
1 select * from "emp"
運行結果如下:
2、更改表名和別名
1 --修改表名 2 --方法一:ALTER TABLE "emp" RENAME TO emp; 3 --方法二:create emp as select * from "emp"; 4 --方法三:使用rename方法,但只能修改當前用戶下的表 5 rename "emp" to emp; 6 rename "dept" to dept; 7 rename "SALGRADE" to SALGRADE; 8 rename "sysdiagrams" to sysdiagrams; 9 10 --修改字段名 11 alter table dept rename column "deptno" to deptno; 12 alter table dept rename column "dname" to dname; 13 alter table dept rename column "loc" to loc; 14 15 --測試程序 16 select * from emp; 17 select * from dept; 18 select * from SALGRADE; 19 select * from sysdiagrams; 20 21 select * from dept where deptno = 10
3、Navicat Premium解決辦法
使用Navicat Premium進行數據傳輸,把其他數據庫中的數據傳輸到Oracle數據庫時,需要在【高級】選項卡中勾選【轉換對象名為大寫】才可。
4、PowerDesigner解決辦法
(1)修改Naming Convention配置
在[Tools->Model Options->Naming Convention]中,把Name和Code的Charcter case屬性設成Uppercase(只要不是混合模式即可)。
(2)修改CaseSensitivityUsingQuote配置
在【Database->Edit current database->Script->Sql->Format】下將CaseSensitivityUsingQuote的comment為“Determines if the case sensitivity for identifiers is managed using double quotes”,表示是否適用雙引號來規定標識符的大小寫,可以看到右邊的values默認值為“YES”,改為“No”即可!