Oracle的SQL语句中的变量替换

一.问题描述

如下SQL:

INSERT INTO tmp(val)VALUES('a&b');
View Code

执行过程中会出现如下提示:

点击"确定"过后我们查看表中的数据:

b后面的字符串没有插入进去.

二.原因解析--替代变量

SQL*PLUS中默认的"&"表示替代变量,当写入&时,数据库会要求其替换成其它的值。

如,你可以定义:

这样插入数据库中的值就是ahellob.

三.解决方法

解决方法1:关闭变量替换

如下所示:

SET DEFINE OFF;
INSERT INTO tmp(val)VALUES('a&b');
COMMIT;
View Code

这样插入进去的值就是a&b

解决方法2:使用&符号的ASCII码CHR(38)来处理

字符串拼接,如下所示:

INSERT INTO tmp(val)VALUES('a'||CHR(38)||'b');
COMMIT;
View Code

字符串翻译,如下所示:

INSERT INTO tmp(val)VALUES(translate('aIIIb','III',CHR(38)));
COMMIT;
View Code

字符串替换,如下所示:

INSERT INTO tmp(val)VALUES(REPLACE('aIIIb','III',CHR(38)));
COMMIT;
View Code

 

附:ASCII码对照表

百度百科:http://baike.baidu.com/view/15482.htm?fromid=99077

 

转载于:https://www.cnblogs.com/gudi/p/6109210.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值