怎么插入一串,其中包含一个"&"
题
我怎么写插入语句,其中包括&字?例如,如果我想插入"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;