在ORACLE中,單引號有兩個作用,一是字符串是由單引號引用,二是轉義。單引號的使用是就近配對,即就近原則。而在單引號充當轉義角色時相對不好理解
1、從第二個單引號開始被視為轉義符,如果第二個單引號后面還有單引號(哪怕只有一個)
select
''
''
from
dual;
--output:' # 第二個單引號被作為轉義符,第三個單引號被轉義,可將sql寫成這樣更好理解:select ' '' ' from dual --output:'
2、連接符‘||’導致了新一輪的轉義:連接符號‘||’左右的單引號沒有任何的關系,除非‘||’是作為字符串的一部分(這在動態SQL中很常見)。
select
'name'
||
''
''
from
dual;
--output:name' 理解:||后面的作為一個字符串,即前后是',中間又是一個密集型單引號串'',因此第一個為轉義功能
select 'name''''' from dual --output:name'' 理解:第一個和最后一個單引號作為字符串引用符,中間四個單引號兩兩轉義。
3.
舉幾個簡單例子: 一個單引號,是最正常的情況,比如:
'asdfas'
,這代表一個字符串,顯示的內容是 asdfas ;
兩個單引號,一般成對出現在一個單引號之內,表示一個單引號之內的單引號,比如
'sdfs'
'123'
'dfsdf'
,這種字符串顯示的時候就是 sdfs
'123'
dfsdf
三個或四個單引號的情況是在一個和兩個的情況之上發展出來的,比如
'asd'
''
||'輸入值'||
''
''
,它顯示的時候內容就是: asd
'輸入值'
。
(把一對兩個單引號分開了,一部分在||之前,一部分在||之后) (后面四個單引號分開看,中間兩個是一對
--代表一對單引號之內的一個單引號,外邊兩個是一對--代表一對單引號
4. 舉例如下:
z:='alter session set time_zone='''||WET||''''
alter session set time_zone='WET'