主页 > 知识库 > Oracle中插入特殊字符:和'的解决方法汇总

Oracle中插入特殊字符:和'的解决方法汇总

热门标签:呼叫中心市场需求 网站排名优化 地方门户网站 百度竞价排名 AI电销 Linux服务器 铁路电话系统 服务外包

今天在导入一批数据到Oracle时,碰到了这样一个问题:Toad提示要给一个自定义变量AMP赋值,一开始我很纳闷,数据是一系列的Insert语句,怎么会有自定义变量呢?后来搜索了一下关键字AMP发现,原来是因为在插入数据中有一个字段的内容如下:

http://xxx.com/3DX?uid=0676sid=rt_060908

Oracle把这里的URL的参数连接符当成是一个自定义变量了,所以要求我给变量AMP赋值。经过测试之后,总结出以下三种方法:

方法一:在要插入的SQL语句前加上Set define off;与原SQL语句一起批量执行

我们在SQL*PLUS下执行 SQL> show all命令时,可以发现一个参数:define "" (hex 26),代码如下所示

......
concat "." (hex 2e)
copycommit 0
copytypecheck ON
define "" (hex 26)
describe DEPTH 1 LINENUM OFF INDENT OFF
echo OFF
......

这个是Oracle里面用来识别自定义变量的设置,现在我们在SQL*PLUS下将其关闭:

SQL> Set define OFF;

然后再次执行导入脚本,OK!问题搞定。

注意:如果是在TOAD中执行,建议在每一个要导入的脚本第一行加上前面那句关闭define的话,否则当你导入第二个含有特殊字符的脚本的时候,又会出错。
如果是在SQL*PLUS中执行,则只需要设置一次define OFF,后面就可以连续导入了。直到你重新设置define ON为止。

插入一条语句:

SQL> insert into AA (O,resvalue) values ('AA', 'S'||chr(38)||'P');

方法二:在SQL语句中将''替换成chr(38),因为chr(38)是‘'的ASCII码

SQL> Select 'Tom' || chr(38) || 'Jerry' from dual;

方法三:分拆原来的字符串

SQL> Select 'Tom' || '' || 'Jerry' from dual;

我们可以看到,方法一最为简便,而且效率也最高。方法二因为有一个调用函数的过程,所以性能稍差。方法三需要两次连接字符串,效率最差!

那么如果字段的内容中包含了单引号要怎么插入呢?例如:It's fine。这种情况下同样有三种方法:

方法一:使用转义字符

SQL > Select 'test' || '''' from dual;

注意:这里的''''四个单引号是什么意思呢?首先第一个和最后一个都是Oracle中的字符串连接符,这个没有异议。那么第二个'和第三'又表示什么意思呢?第二个'是一个转义字符
第三个'才是我们真正的内容

方法二:同样是使用转义字符,只不过方式不同而已

SQL > Select 'test ''' from dual;

注意:这里的第二个,第三个'就是我们上面方法一中提到的转义符和真正的内容

方法三:在SQL中将'替换成chr(39),因为chr(39)是'的ASCII码

SQL > Select 'It' || chr(39) || 'fine' from dual;
您可能感兴趣的文章:
  • oracle保留两位小数解决方案
  • plsql连接oracle数据库报ora 12154错误解决方法
  • oracle中文乱码解决的办法
  • PL/SQL Dev连接Oracle弹出空白提示框的解决方法分享
  • oracle12c安装报错:PRVF-0002的解决方法
  • oracle远程连接服务器出现 ORA-12170 TNS:连接超时 解决办法
  • oracle 数据库数据迁移解决方案
  • oracle中文乱码的解决方法
  • ORACLE EXP不能导出空表的原因分析及解决方法
  • linux系统oracle数据库出现ora12505问题的解决方法

标签:湘潭 仙桃 铜川 湖南 兰州 衡水 黄山 崇左

巨人网络通讯声明:本文标题《Oracle中插入特殊字符:和'的解决方法汇总》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266