变量符"&"转义
在DML中,若操作的字符中有特殊字符"&",则会被oracle视作是输入变量的标志,此时需要用转义字符来进行转义
以下脚本在执行过程中,会导致数据缺失,目标表数据中只包含'辽宁','&大连'会被忽略
insert into tableA values ('辽宁&大连');
&符号是Oracle里面用来识别自定义变量的设置
方法1:在SQL*PLUS下执行以下命令将其关闭,然后再次执行导入脚本,问题搞定
Set define OFF;
注意:如果是在TOAD中执行,建议在每一个要导入的脚本前执行以上命令,否则当导入第二个含有特殊字符的脚本的时候,又会出错
如果是在SQL*PLUS中执行,则只需要设置一次define OFF,后面就可以连续导入了,直到重新设置define ON为止
方法2:在SQL语句中将'&'替换成chr(38),因为chr(38)是"&"的ASCII码
select 'Tom' || chr(38) || 'Jerry' from dual;
方法3:分拆原来的字符串
select 'Tom' || '&' || 'Jerry' from dual;
总结:方法1最为简便,而且效率也最高
方法2因为有一个调用函数的过程,所以性能稍差
方法3需要两次连接字符串,效率最差
单引号"'"转义
方法1:使用转义字符
Select 'test' || '''' from dual; --''''中第一和第四个'的作用是包含字符串,第二个'是转义字符,第三个'是真正的内容
方法2:使用另一方式的转义字符
Select 'test''' from dual; --'''中第一和第二个'分别是转义字符和真正内容,第三个'跟最开始的'匹配