如何插入包含"&"的字符串

时间:2020-03-06 14:55:12  来源:igfitidea点击:

如何编写包含&字符的插入语句?例如,如果我想在数据库的列中插入" 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')
)