Oracle 單引號 雙重角色

2021-06-29 05:34:57 字數 2246 閱讀 4036

單引號雙重角色——字串引用與轉義 

在oracle中,單引號有兩個作用,一是字串是由單引號引用,二是轉義,開始學習時動態構成sql時經常不解。單引號的使用是就近配對,即就近原則。而在單引號充當轉義角色時相對不好理解。

1、從第二個單引號開始被視為轉義符,如果第二個單引號後面還有單引號(哪怕只有乙個)。

sql> select '''' from dual;

''--'

為了證實結果是被第二個單引號轉義的第三個單引號(既:select '''' from dual;),我們做如下兩個測試:

sql> select ''' from dual;

error:

ora-01756: 括號內的字串沒有正確結束

相信大家對這樣的錯誤不陌生吧

sql> select 'sdlf from dual;

error:

ora-01756: 括號內的字串沒有正確結束

也就是說,當第二個單引號充當轉義角色,第三個單引號被轉義,(既:select '' ' from dual;)自然就缺少與第乙個單引號匹配的單引號了,出現了孤立的單引號

下面的兩個實驗就更加支援了上面的結論。

sql> select ' '' ' from dual;

''''

------

'sql> select '' '' from dual;

select '' '' from dual

*error 位於第 1 行:

ora-00923: 未找到預期 from 關鍵字

對於第乙個:select ' '' ' from dual;

對於第二個:不存在轉義。

上面的這兩個實驗其實也是單引號轉義與非轉義的乙個性質:轉義是密集的,也就是說,如果單引號出現在轉義的位置上,而該單引號後面緊跟(緊跟的定義為:兩個單引號之間是零距離的)的不是單引號,這個時候單引號就不在充當轉義的角色,而是與它前面的配對。

2、連線符『||』導致了新一輪的轉義:連線符號『||』左右的單引號沒有任何的關係,除非『||』是作為字串的一部分(這在動態sql中很常見)。

sql> select 'oracle'||'''' from dual;

'oracle'||''

----------

oracle'

個人理解,'oracle'||'''' 後面的「''''」應該認為是乙個字串(即前後單引號,中間是「''」串,而中間又是密集單引號,因此第乙個為轉義功能)

sql> select 'oracle''''' from dual;

'oracle'''''

------------

oracle''

對於第乙個,前兩個單引號配對,後面四個單引號按照上面的第一條原則分配,既:select 'oracle'||'''' from dual;

對於第二個,由於第二個單引號後面存在單引號,所以就不與第乙個配對,而是充當了轉義的角色。既:select 'oracle''''' from dual;

有了上面的兩條原則,我們就可以從容的面對複雜的動態sql了。

那如果是mysql中呢,可以使用concat函式實現新增單引號的效果,如下所示:

mysql> select * from t1 ;

+------+------+

| a | b |

+------+------+

| 1 | 2 |

| 2 | 3 |

+------+------+

2 rows in set (0.00 sec)

mysql> select concat('''',a) from t1 ;

+----------------+

| concat('''',a) |

+----------------+

| '1 |

| '2 |

+----------------+

2 rows in set (0.00 sec)

mysql> select concat(concat('''',a),'''') from t1 ;

+-----------------------------+

| concat(concat('''',a),'''') |

+-----------------------------+

| '1' |

| '2' |

+-----------------------------+

2 rows in set (0.00 sec)

ORACLE SQL 單引號雙重角色

單引號雙重角色 字串引用與轉義 在oracle中,單引號有兩個作用,一是字串是由單引號引用,二是轉義,開始學習時動態構成sql時經常不解。單引號的使用是就近配對,即就近原則。而在單引號充當轉義角色時相對不好理解。1 從第二個單引號開始被視為轉義符,如果第二個單引號後面還有單引號 哪怕只有乙個 sql...

ORACLE SQL單引號雙重角色

oracle sql單引號雙重角色 在oracle中,單引號有兩個作用,一是字串是由單引號引用,二是轉義,開始學習時動態構成sql時經常不解。單引號的使用是就近配對,即就近原則。而在單引號充當轉義角色時相對不好理解。1 從第二個單引號開始被視為轉義符,如果第二個單引號後面還有單引號 哪怕只有乙個 w...

oracle 單引號 雙引號

在oracle中 雙引號的作用是 假如建立物件的時候,物件名 欄位名oracle將嚴格區分大小寫,否則oracl都預設大寫。而單引號則示意 這個加了單引號的字段是乙個字類似字串,並不區分大小寫。當指定字串文字時,必須用單引號將字串文字引住。oracle10g之前,假如字串文字裡含有單引號,那麼必須運...