Oracle之表 字段大寫問題

2021-08-03 06:24:49 字數 1234 閱讀 7094

先寫結論:如果在oracle中的物件是區分大小寫的,那麼select必須加雙引號。

由於剛使用 oracle ,沒有想到它有一些奇奇怪怪的特質,並非貶義。也許就像我吃慣了川菜,浙菜雖有其風味,但還是令人我想念家鄉的味道。

用慣sql server,剛開始用 oracle 肯定不大習慣。sql server資料庫是不轉換為大寫,但是使用時並不區分大小寫。而 oracle 建的表名和欄位名會自動為轉換為大寫。甚至會因為這一點感到有些惱火。因為不知道這一點,但又出了錯誤,根本無從檢查。。。

我會從 oracle 官方的預設配置,以及誤區,和個人考慮三個方面來解釋這個問題。

因為 oracle 在建表/欄位時,如果沒有雙引號, oracle 會把表名、欄位名全部轉化為大寫字母,然後寫入資料字典。訪問資料字典時,沒有雙引號 oracle 會將其轉化成大寫然後再去資料字段中查詢。不僅僅關鍵字不區分大小寫,函式名,過程名,表名稱,pl/sql塊中變數名,使用者名稱,密碼等都不區分大小寫[1]。

可能很多人都會誤認為 oracle 是不區分大小寫的,原因是我們在寫查詢語句的時候,大小寫無所謂,結果都是一樣的,這只是個表面現象。因為只要你不使用雙引號表示區分大小寫, oracle 會預設把你寫的指令碼全部轉換為大寫的。

例如:如果建立表使用如下語句:

create table "table_name"(blah..)

那麼必須在select中使用雙引號才能返回預期結果。

如果建立表使用:

create table table_name (blah..)

沒有引號的select也應該能返回預期結果[2]。

我也在想這些,官方推薦的大寫是否是因為大小寫對sql執行快慢有影響?

但有網上大神提到:「任何的語言都需要進行詞法和語法分析,經過oracle的詞法分析,本身就會將小寫轉成大寫,所以這個無關sql的執行效率問題,只是減少了編譯過程的時間而已。」

但我覺得這條也挺好:「斤斤計較這個沒什麼必要

,即使多執行一條功能相同的語句也是非常快的,關鍵是處理大資料量的時候的效能優化(這問題很廣,網上有很多建議都可以看看),這個比較重要。」

我認為,就只當是單純的資料庫差異來看比較好。

[1]  oracle 物件大小寫問題

[2] -12c-query-require-double-quotes-around-table/31572872#31572872 whydoes  oracle  12c query require double quotes around table[duplicate]

ORACLE表字段名稱改為大寫的方法

一些資料庫的表字段名稱不區分大小寫 如sqlserver 在通過資料匯入方式匯出到oracle後,會因為欄位名稱的大小寫問題帶來很多麻煩。在資料匯入到oracle後,可以使用如下方式將oracle中的字段轉換為大寫 plsql 新建sql窗體 中執行 begin dbms output.enable...

Oracle操作表,字段

0.建立表 create table table name as select from table name b 1.oracle 修改表名 alter table old table name rename to new table name 大寫為系統命令 2.oracle通過altertab...

oracle修改表字段

增加字段 alter table docdsp add dspcode char 200 刪除字段 alter table table name drop column column name 修改字段型別 alter table table name alter column column nam...