一般情況下,我們使用單引號居多
但在字元集不一致的時候,雙引號和單引號區別還是很大的
而且,使用ODBC橋匯入外部資料的時候,表名是帶雙引號的
先看個案例:
以前遇到過一個這樣的問題
一個朋友在建立表時,表名採用小寫,並且表名用雙引號括了起來
表已經建立了,但是在查詢的時候,顯示表名不存在,可在user_tables又能看到這張表
觀察得出,加了雙引號的小寫表名存入資料庫後也是小寫
用雙引號擴起來的標識符都作為原來的大小寫格式存放在資料字典中
而Oracle在調用時,預設的使用大寫格式去資料字典中查詢
以列名為例:
sys@EMREP> create table test(a varchar2(10), a varchar2(10));create table test(a varchar2(10), a varchar2(10)) *ERROR at line 1:ORA-00957: duplicate column namesys@EMREP> create table test("a" varchar2(10), a varchar2(10));Table created.sys@EMREP> SELECT table_name, column_name FROM user_tab_cols WHERE table_name = 'TEST';TABLE_NAME COLUMN_NAME------------------------------ ------------------------------TEST aTEST Asys@EMREP> insert into test values ('1','1');1 row created.sys@EMREP> commit;Commit complete.sys@EMREP> select * from test;a A---------- ----------1 1 以大寫方式存在資料字典中,驗證一下:sys@EMREP> create table test_xxxx(a varchar2(1), "A" varchar2(1));create table test_xxxx(a varchar2(1), "A" varchar2(1)) *ERROR at line 1:ORA-00957: duplicate column name
雙引號括起來的更確切一點叫 "引證標識符"
比如我們建立一張表,我們在寫CREATE語句的時候,就算表名用小寫,資料字典裡儲存的所有標識符還是大寫的
但是要想在資料字典裡儲存小寫標識符,那寫CREATE語句的時候就得用雙引號
所以要標識符區分大小寫,或在標識符中包含空格,或者使用保留字做標識符,就得用雙引號括起來的引證標識符
雙引號:
① 表示其內部的字串嚴格區分大小寫
② 用於特殊字元或關鍵字
③ 不受標識符規則限制
④ 會被當成一個列來處理
⑤ 當出現在to_char的格式字串中時,雙引號有特殊的作用,就是將非法的格式符封裝起來
避免出現ORA-01821: date format not recognized錯誤, to_char在處理格式字串時,會忽略雙引號
sys@EMREP> select to_char(sysdate, 'hh24"小時"mi"分"ss"秒"') AS RESULT from dual;RESULT------------------17小時31分30秒
單引號:
① 表示字串常量
② 字串中的雙引號僅僅被當作一個一般字元進行處理。此時,雙引號不需要成對出現
例如:
sys@EMREP> select 'hh24"小時""mi"分"""ss"秒"' AS RESULT from dual;RESULT-----------------------------hh24"小時""mi"分"""ss"秒"
③ 動態SQL:
在一對單引號包含的語句中,必須有一對相鄰的單引號表示一個單引號
兩個相鄰的單引號的作用,第一個是用來表示逸出字元,後面一個表示真正的單引號
單引號裡要用單引號應該是兩個連續的單引號,而不是雙引號
例如:
select 'alter system kill session ''''|| sid||','||serial#|| '''';' from v$session
我們在linux shell編程時
在設定變數的時候,可借用雙引號或單引號來控制,單引號與雙引號必須成對
若是單引號,則其內的特殊字元僅為一般字元
若是雙引號,則其內的特殊字元,如$,可以保有原本的特性。如,var=“lang is $LANG",則echo $var,可得 lang is en_US
[root@localhost ~]# name=think[root@localhost ~]# echo $namethink[root@localhost ~]# ename="$name is my English name"[root@localhost ~]# echo $enamethink is my English name[root@localhost ~]# ename='$name is my English name'[root@localhost ~]# echo $ename$name is my English name
在Oracle中只有單引號才表示字串,但在Linux中,無論單引號、雙引號,均表示字串