天天看點

單引号oracle如何轉義_淺談oracle中單引号轉義

ORACLE 單引号轉義:

在ORACLE中,單引号有兩個作用:

1:字元串是由單引号引用

2:轉義。

單引号的使用是就近配對,即就近原則。而在單引号充當轉義角色時相對不好了解

1.從第二個單引号開始被視為轉義符,如果第二個單引号後面還有單引号(哪怕隻有一個)。

SQL> select '''' result from dual;

RESULT

------

'

第二個單引号被作為轉義符,第三個單引号被轉義,可将sql寫成這樣更好了解:

select ' '' ' from dual;

output:'

//

2.連接配接符‘||'導緻了新一輪的轉義:

連接配接符号‘||'左右的單引号沒有任何的關系,

除非‘||'是作為字元串的一部分(這在動态SQL中很常見)。

SQL> select 'name'||'''' result from dual;

RESULT

------

name'

了解:||後面的作為一個字元串,即前後是',中間又是一個密集型單引号串'',是以第一個為轉義功能.

SQL> select 'name''''' result from dual;

RESULT

------

name''

第一個和最後一個單引号作為字元串引用符,中間四個單引号兩兩轉義.

//

oracle中使用雙引号:

1)一般來說,字元串中的雙引号僅僅被當作一個普通字元進行處理。

此時,雙引号不需要成對出現:

SQL> select 'hh24"小時""mi""分"""ss"秒"' results from dual;

RESULTS

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

hh24"小時""mi""分"""ss"秒"

//

2)當出現在to_char的格式字元串中時,雙引号有特殊的作用,  就是将非法的格式符包裝起來,避免出現ORA-01821: date format not recognized錯誤。  也就是說,去掉雙引号和其包含的字元後,剩下的應該是一個合法的格式串。

to_char在處理格式字元串時,會忽略雙引号:

SQL> select to_char(sysdate,'hh24"小時"mi"分"ss"秒"') results from dual;

RESULTS

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

06小時39分51秒

//

格式串為'hh24"小時"mi"分"ss"秒"';  去掉雙引号部分後,剩下的是'hh24miss',是一個合法的格式串。

不過即使真不知道雙引号的這個用法,也可以這樣來處理,雖然麻煩一點:

select to_char(sysdate, 'hh24') || '小時' ||

to_char(sysdate, 'mi') || '分' ||

to_char(sysdate, 'ss') || '秒'

AS RESULT

from dual;

RESULT

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

06小時40分18秒

例子

create table t_test1(str_sql varchar2(2000));

create table t_test2(str_sql varchar2(2000),cnt number(10));

truncate table t_test1;

truncate table t_test2;

insert into t_test1 select table_name from user_tables;

commit;

--------

set serveropput on;

declare

vv_name varchar2(200):='';

vv_cnt number(10):=0;

vv_sql varchar2(2000):='';

begin

for usr in (select str_sql from t_test1)

loop

vv_sql := rtrim('insert into t_test2 SELECT '''||usr.str_sql|| ''',COUNT(1) FROM ' || usr.str_sql,';');

dbms_output.put_line(vv_sql);

execute immediate vv_sql;

commit;

end loop;

commit;

end;

vv_sql := rtrim('insert into t_test2 SELECT '''||usr.str_sql|| ''',COUNT(1) FROM ' || usr.str_sql,';');

rtrim(a,b):

從右邊删除a字元串的b字元串;

以上例子即為:删除  'insert into t_test2 SELECT '''||usr.str_sql|| ''',COUNT(1) FROM ' || usr.str_sql  字元串中的 ;

'insert into t_test2 SELECT '''||usr.str_sql|| ''',COUNT(1) FROM ' || usr.str_sql

'insert into t_test2 SELECT '''

1 234

==> 單引号之中是 insert into t_test2 SELECT '

其中第1、4個單引号是代表裡面是字元串,第2個單引号是轉義字元,第3個單引号就是想要輸出的單引号;

|| --連接配接字元串

usr.str_sql

|| --連接配接字元串

''',COUNT(1) FROM '

123 4

第1、4個單引号是代表裡面是字元串,第2個單引号是轉義字元,第3個單引号就是想要輸出的單引号;

==> ',COUNT(1) FROM

|| --連接配接字元串

usr.str_sql

故以上語句等價于

==> insert into t_test2 SELECT 'usr.str_sql',COUNT(1) FROM usr.str_sql

總結

以上就是本文關于淺談oracle中單引号轉義的全部内容,希望對大家有所幫助。感興趣的朋友可以參閱:oracle 資料庫啟動階段分析  、 oracle 虛拟專用資料庫詳細介紹 、  oracle中通配符和運算符的使用方法介紹 等,有什麼問題可以随時留言,小編會及時回複大家的。感謝朋友們對腳本之家網站的支援。