如何插入包含“&”的字符串

时间:2008-09-30 12:34:18

标签: sql oracle escaping sqlplus

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

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

14 个答案:

答案 0 :(得分:57)

我继续忘记这一点并再次回到它!我认为最好的答案是到目前为止提供的答复的组合。

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

SET DEFINE OFF将停止sqlplus解释&这样。

但是如果你需要使用sqlplus变量 literal&字符?

  • 您需要SET DEFINE ON才能使变量正常工作
  • 并设置ESCAPE ON以逃避使用&。

e.g。

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

答案 1 :(得分:16)

如果您是从SQLPLUS使用

SET DEFINE OFF  

阻止它踩踏&作为一个特例

答案 2 :(得分:10)

另一种解决方案,使用连接和chr函数:

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

答案 3 :(得分:5)

正确的语法是

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

答案 4 :(得分:5)

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

即。就像是: 插入  表 价值观(  CONCAT('J',CHR(38),'J') )

答案 5 :(得分:4)

答案 6 :(得分:4)

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

答案 7 :(得分:2)

我发现使用以下任一选项都有效:

SET DEF OFF

SET SCAN OFF

我对数据库知之甚少,不知道一个人比另一个更好还是“更正确”。另外,如果有比这些更好的东西,请告诉我。

答案 8 :(得分:2)

您可以插入' J' ||'&' ||' Construction' 这样的字符串。 它工作正常。

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

答案 9 :(得分:2)

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

此查询的输出: Jonhy的Sport&健身

答案 10 :(得分:0)

如果您使用的是sql plus,那么我认为您需要发出命令

SET SCAN OFF

答案 11 :(得分:0)

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

(未经测试,手头没有Oracle盒子,已经有一段时间了)

答案 12 :(得分:0)

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

P.S。有些人更喜欢TOAD

答案 13 :(得分:0)

看,安德鲁:

“J& J Construction”

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