全部博文(116)
分类: DB2/Informix
2005-11-11 13:14:30
今天在研究xalan的sql extension的时候,需要动态构造sql 语句,其中用到插入单引号的功能.一开始,就被单引号,双引号搞晕了,无论怎么匹配,都提示我的xslt文件格式错误.
后来上网查了一下资料,得出了以下结果.
在xml中,属性的内容应该由双引号,或者单引号括起来.如果使用了单引号来引用一段属性的值,那么在单引号的内部就不允许再次出现单引号了。否则就会报解析错误。
例如:
a='abc' efg' 错误
a=" abc'efg" 正确
以上情况比较简单,只要换一下最外面的引号类型,使之和内部的引号类型错开,就能解决问题。
下面看一种比较复杂的情况。即在属性中使用了xpath函数。
b='concat($a,"abc")'
以上函数的功能是将变量a和字符串"abc"连接在一起。内部采用双引号,外部采用单引号,而且都是成对使用,解析起来没有问题。如果现在要求将变量a和字符串"ab'c"连接在一起。那么刚才这种写法就有问题了。
b='concat($a,"ab'c")' 错误
原因很简单,因为解析起来,单引号的匹配会有问题。
正确的写法应该是
b='concat($a,"ab'c")'
解决了这个问题,顺便又查了一下在sql里面的单引号问题。
如果插入一条记录,记录值中包含了单引号,那么应该怎么处理?
比如说 insert into a values ('ab'c');
这种写法肯定有问题。
那么insert into a values ("ab'c");也是不对。
真正有用的是:
insert into a values ('ab''c');
这里用两个单引号表示一个。