oracle中单引号的双重作用:表示字符串+转义符


作用1:表示字符串

作用2:表示转义符

declare
v_sql varchar2(100);
v_empname t_employ.empname%type:='&empname';
v_id t_employ.id%type:=&empid;
v_depid t_employ.depid%type:=&depid;
begin
v_sql:='select empname from t_employ where 1=1';
if v_id>0 then
v_sql:=v_sql||' and id='||v_id;
end if;
if v_depid>0 then
v_sql:=v_sql||' and depid='||v_depid;
end if;
if v_empname is not null then
v_sql :=v_sql || ' and empname like ''%' || v_empname || '''';
--’ and empname like ''' 中间两个转义为一个' '''' 中间两个转义为一个'
--单引号转义与非转义的一个性质:转义是密集的,也就是说,如果单引号出现在转义的位置上,
--而该单引号后面紧跟(紧跟的定义为:两个单引号之间是零距离的)的不是单引号,这个时候单引号就不在充当转义的角色,而是与它前面的配对
end if;
dbms_output.put_line(v_sql);
execute immediate v_sql into v_empname;
dbms_output.put_line(v_empname);
end;

解释:

红色的部分为作用1,表示包含的内容为字符串(v_sql声明类型是字符串型)。

 在oracle中,字符串是由单引号引用的,而转义也是由单引号来完成的,这对于许多初学者而言是件头疼的事情,尤其是开始学习动态SQL的人。如果就单纯的单引号而言,很容易让人理解:它总是找与它最近的一个单引号配对。也就是所谓的就近原则;但是在单引号充当转义角色的时候,情况就比较让人头晕了。

请记住:

1,第一个单引号后的第二个单引号如果后面还有单引号,那么从第二个单引号开始被视为转义符,比如下面这句话:

v_sql :=v_sql || ' and empname like ''%' || v_empname || '''';

’ and empname like ''' 中间两个转义为一个单引号' , 最后四个单引号'''' 中间两个''转义为一个单引号'

总结:

单引号转义与非转义的一个性质:转义是密集的,也就是说,如果单引号出现在转义的位置上,什么时候是出现在转义的位置上,就是上面说过的,当第二个单引号后面还有单引号,此时分为两种情况:

1,第二个单引号后面紧跟(紧跟的定义为:两个单引号之间是零距离的)的是单引号,那么第二个单引号和紧跟着的第三个单引号作为转义;

2,第二个单引号后面紧跟的不是单引号,这个时候单引号就不在充当转义的角色,而是与它前面的配对。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM