如何插入包含"&"的字符串
如何编写包含&字符的插入语句?例如,如果我想在数据库的列中插入" J&J Construction"。
我不确定是否会有所作为,但我使用的是Oracle 9i。
解决方案
如果我们使用的是sql plus,那么我认为我们需要发出命令
SET SCAN OFF
如果我们是通过SQLPLUS执行的,请使用
SET DEFINE OFF
阻止它踩踏和特殊情况
SET ESCAPE ON; INSERT VALUES("J\&J Construction") INTO custnames;
(未经测试,没有Oracle盒子,已经有一段时间了)
我发现使用以下任一选项均可:
设置关闭
或者
``关闭扫描''
我对数据库了解不足,无法确定一个数据库比另一个数据库更好还是"更正确"。另外,如果有什么比这两个更好的了,请告诉我。
SET SCAN OFF已过时
http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a90842/apc.htm
在程序中,请始终使用参数化查询。它避免了SQL注入攻击以及SQL解析器特有的任何其他字符。
正确的语法是
set def off; insert into tablename values( 'J&J');
停止使用SQL / Plus,我强烈建议PL / SQL Developer,它不仅仅是SQL工具。
p.s.有些人喜欢TOAD。
我一直忘了这个,然后再回到它!我认为最好的答案是到目前为止提供的响应的组合。
首先,&是sqlplus / sqldeveloper中的变量前缀,因此出现问题时,它应该是变量名的一部分。
SET DEFINE OFF将以这种方式停止sqlplus的解释。
但是,如果我们需要使用sqlplus变量以及文字和字符,该怎么办?
- 我们需要SET DEFINE ON才能使变量起作用
- 并设置ESCAPE ON以逃避&的使用。
例如
set define on set escape on define myvar=/forth select 'back\ \& &myvar' as swing from dual;
产生:
old 1: select 'back\ \& &myvar' from dual new 1: select 'back\ & /forth' from dual SWING -------------- back\ & /forth
如果要使用其他转义字符:
set define on set escape '#' define myvar=/forth select 'back\ #& &myvar' as swing from dual;
设置特定的转义字符时,我们可能会看到" SP2-0272:转义字符不能为字母数字或者空格"。这可能意味着我们已经定义了转义字符,并且事情变得非常自指。避免此问题的干净方法是先设置转义:
set escape off set escape '#'
始终存在chr()函数,该函数将ascii代码转换为字符串。
IE。就像是:
插入
桌子
值(
CONCAT('J',CHR(38),'J')
)