我怎么写插入语句,其中包括&字?例如,如果我想插入"J&J建筑"纳入中列的数据库。

我不确定如果它使有差别,但是,我使用Oracle9i.

有帮助吗?

解决方案

我一直忘记这回到它了!我认为最好的答案是一个结合对策提供了迄今为止.

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

设定将停止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 '#'

其他提示

如果您是从SQLPLUS使用

SET DEFINE OFF  

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

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

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

正确的语法是

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

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

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

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

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

SET DEF OFF

SET SCAN OFF

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

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

insert into table_name (col_name) values('J'||'&'||'Construction');
INSERT INTO TEST_TABLE VALUES('Jonhy''s Sport &'||' Fitness')

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

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

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

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

SET SCAN OFF

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

P.S。有些人更喜欢 TOAD

看,安德鲁:

" J& J Construction"

SELECT CONCAT('J', CONCAT(CHR(38), 'J Construction')) FROM DUAL;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top