如何插入包含“&”的string

我如何写一个包含&字符的插入语句? 例如,如果我想将“J&J Construction”插入到数据库的一列中。

我不确定它是否有所作为,但我正在使用Oracle 9i。

我一直忘记这一点,并再次回到它! 我认为最好的答案是迄今为止提供的答复的组合。

首先,&是sqlplus / sqldeveloper中的variables前缀,因此问题出现时,它应该是variables名称的一部分。

SET DEFINE OFF将停止sqlplus解释和这种方式。

但是,如果你需要使用sqlplusvariables文字&字符呢?

  • 您需要SET DEFINE ON以使variables正常工作
  • 并设置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 '#' 

如果你是从SQLPLUS使用它

 SET DEFINE OFF 

阻止它踩踏和作为一个特殊情况

另一种解决scheme是使用串联和chr函数:

 select 'J' || chr(38) || 'J Construction' from dual; 

正确的语法是

 set def off; insert into tablename values( 'J&J'); 

总是有chr()函数,它将ascii代码转换为string。

即。 如下所示:INSERT INTO table VALUES(CONCAT('J',CHR(38),'J'))

在程序中,始终使用参数化查询。 它避免了SQL注入攻击以及SQLparsing器特有的任何其他字符。

我发现使用以下任一选项都可以工作:

SET DEF OFF

要么

SET SCAN OFF

我对数据库知之甚less,不知道一个比另一个更好还是更“正确”。 另外,如果有什么比这两个更好,请让我知道。

你可以插入像'J'||'&'||'Construction'这样的string。 它工作正常。

 insert into table_name (col_name) values('J'||'&'||'Construction'); 
 SET ESCAPE ON; INSERT VALUES("J\&J Construction") INTO custnames; 

(未经testing,手边没有Oracle盒子,已经有一段时间了)

如果你正在使用sql plus,那么我认为你需要发出命令

 SET SCAN OFF 

停止使用SQL / Plus,我强烈推荐PL / SQL Developer,它不仅仅是一个SQL工具。

有些人喜欢TOAD 。

安德鲁:

“J&Jbuild设”

SELECT CONCAT('J',CONCAT(CHR(38),'J Construction'))FROM DUAL;