如何插入包含一个“&”的字符串(How to insert a string which conta

2019-07-21 04:37发布

我怎么能写一个INSERT语句,其中包括&字符? 例如,如果我想插入“强生公司建设”到数据库中的一列。

我不知道这是否有差别,但我使用的是Oracle 9i中。

Answer 1:

我一直在这个遗忘和再回来了! 我认为最好的答案是迄今为止提供的响应的组合。

首先,&是在sqlplus /的SQLDeveloper变量前缀,因此问题 - 当它出现时,它预期是一个变量名称的一部分。

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

但是,如果你有什么需要使用sqlplus的变量文字及字符?

  • 到要设置上定义使变量工作
  • 并设置逃脱逃脱和用途。

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 '#'


Answer 2:

如果您是从SQLPLUS用做

SET DEFINE OFF  

停止它踩&作为特例



Answer 3:

另一种解决方案,使用级联和Chr函数:

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


Answer 4:

正确的语法是

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


Answer 5:

总是有CHR()函数,它的ASCII码转换为字符串。

即。 类似:INSERT INTO表VALUES(CONCAT( 'J',CHR(38), 'J'))



Answer 6:

SET SCAN OFF是过时http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a90842/apc.htm



Answer 7:

在程序中,始终使用参数化查询。 它避免了SQL注入攻击以及其他任何字符是特殊的SQL语法分析程序。



Answer 8:

我发现,使用任一下列选项的工作原理:

SET DEF OFF

要么

SET SCAN OFF

我不知道有足够的了解数据库知道一个比另一个好或者“更多的权利”。 此外,如果有什么东西比任何的这些好,请让我知道。



Answer 9:

您可以插入这样的字符串作为“J” ||“和” ||“建设”。 它工作正常。

insert into table_name (col_name) values('J'||'&'||'Construction');


Answer 10:

INSERT INTO TEST_TABLE VALUES('Jonhy''s Sport &'||' Fitness')

此查询的输出:Jonhy的运动健身



Answer 11:

SET ESCAPE ON;
INSERT VALUES("J\&J Construction") INTO custnames;

(未经测试,不要手头的Oracle服务器,它已经有一段时间)



Answer 12:

如果您使用的是SQL加上那么我认为你需要发出命令

SET SCAN OFF


Answer 13:

停止使用SQL /另外,我强烈建议PL / SQL开发者 ,它比一个SQL工具等等。

PS有些人喜欢蟾蜍 。



Answer 14:

你看,安德鲁:

“强生公司建设”:

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


文章来源: How to insert a string which contains an “&”