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


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

http://xxx.com/3DX?uid=0676&sid=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;



相关阅读:
C#中foreach语句使用break暂停遍历的方法
Mac itunes备份的文件在哪里 Mac itunes备份文件路径解析
jQuery使用CSS()方法给指定元素同时设置多个样式
让Mac屏幕横向或翻转显示适合躺在床上看电子书
php绘图之加载外部图片的方法
js实现数组冒泡排序、快速排序原理
PHP中的一些常用函数收集
使用生成系统健康报告快速查看Win8系统是否健康
Ubuntu Update-rc.d命令详细介绍
谈一谈Android内存泄漏问题
jQuery中:file选择器用法实例
PHP数组与对象之间使用递归实现转换的方法
在Ubuntu 15.10系统上安装NVIDIA 358.16显卡驱动
jQuery实现返回顶部功能适合不支持js的浏览器
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 綦江-涿州 禹城-文水 庄桥-泉州 怀仁-石家庄北 柳河-大东 双鸭山-汤原 桃山-望江 绥阳-海城 万宁-博鳌 泰山-容县 道劳杜-辉河 铜仁-达州 桑根达来-金州 尼勒克-乌鲁木齐 三间房-泰来 杭州东-进贤南 淮北-孝感 北京南-安庆 菏泽-永州 干塘-平凉 溧阳-涪陵北 祁家堡-中兴 沧州-苏州 永登-鄯善 襄阳-宣汉 葫芦岛北-无锡东 北台子-广德号 陇西-沙湾县 滁州北-陇西 南京-日照 定陶-任丘 长春-渠县 本溪-苏北 常州北-高密 水富-曲靖 潍坊-泰来 淄博-新干 山阴-祁县 东淤地-下社 汤原-莱西 松树林-青水山 龙南-南昌西 兴城-阳泉北 新县-漳州东 横峰-武穴 月山-轵城 三家店-柴沟堡 仙游-溧阳 昆明-江所田 牟平-萧县北 广水-瓦房店 柳州-昭通 恭城-怀集 营口东-鹤壁东 苏家屯-永甸 南京-磁窑 灵宝西-邯郸东 都匀东-桂林西 大庆东-哈达阳 绥化-沙园 株洲-樟树 牡丹江-马莲河 安陆-兰考 郭家店-宁陵县 开封-辽阳 玉泉-东边井 无锡-青县 淮南东-高密 荆州-郑州东 蒲城东-乌海 铜陵北-渭南北 建阳-十堰 凉红-代湾 讷河-春亭阁 嵯岗-四平 大虎山-曲靖 兰考-郯城 昆山-酒泉 兴隆县-石家庄 丽水-商丘南 请问从长春到临江市怎么坐车最快
为什么火车进入到福建省内以后速度这么慢
从深圳到重庆要多久
请问从上海浦东机场到苏州附二院怎么坐车啊
529从武昌列车火车站到湖北科技职业学院有几站
金华我腹部左下方有一块白色斑块
求银川列车站附近安全的旅店
玄武区珠江路699号东鼎大厦怎么走
蒙古到广州怎么坐车
L7636火车列车时刻表
十堰到黄石大冶要票价多少钱的路费
苍山县个人 养老保险怎么查询
九江瑞昌坐列车到邯郸
成都人民北路怎么坐公交车到金沙公交车站
淄博有哪些名胜古迹
从海淀半壁店到北京科技馆坐什么车
从沂南县城怎么去淄博师范高等专科学校
齐齐哈尔 泰来火车站有趣吉林四平的火车吗?几点啊?多少钱啊?多久能到啊?
南通狼山上的大势至菩萨用日语怎么读啊
窖口客车汽车站有没有到莲花山的车
西安到湖北距离_西安到湖北距离
福建厦门到湖北宜昌一共几公里
哥们俩计划于2011年7月底去西藏自助游,游拉萨、林芝,该如何...
中国有几个华夏第一县?
烟台列车站离哪个船运站最近
从海安怎么以最快的速度去宁波,目前汽车站只有一趟早上八点
25号成都到北京的列车火车票可以退吗
10号线1号线八通线末车时间
没列车火车票如何进站
麻烦谁告诉我从昆明到香格里拉的客车在哪里搭乘,

Copyright © 2016 phpStudy |