如何插入包含“&”的字符串
如何编写包含&字符的插入语句?例如,如果我想在数据库的列中插入“J & J Construction”。如何插入包含“&”的字符串
我不确定它是否有所作为,但我正在使用Oracle 9i。
我继续忘记这一点,并再次回到它!我认为最好的答案是迄今为止提供的答复的组合。
首先,&是sqlplus/sqldeveloper中的变量前缀,因此问题 - 当它出现时,它有望成为变量名的一部分。
SET DEFINE OFF将停止sqlplus解释&这种方式。
但是,如果您需要使用sqlplus变量和文字&字符?
- 时候才需要设定上定义使变量工作
- 和SET逃脱逃脱&用途。
例如,
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 '#'
如果您使用的是SQL加上那么我认为你需要发出命令
SET SCAN OFF
如果从SQLPLUS做它用
SET DEFINE OFF
阻止它踩&作为一种特殊的案例
作品在SQL Developer也 – 2008-09-30 15:47:43
SET ESCAPE ON;
INSERT VALUES("J\&J Construction") INTO custnames;
(未测试,没有一个Oracle盒在手,它有已经有一段时间)
然后,你必须有指定反斜杠特殊处理。 – 2008-09-30 15:47:03
我发现,使用以下任一选项的工作原理:
SET DEF OFF
或
SET SCAN OFF
我不知道有足够的了解数据库知道如果一个比另一个更好或更“正确”。另外,如果有什么比这两者更好,请让我知道。
在程序中,始终使用参数化查询。它避免了SQL注入攻击以及SQL解析器特有的任何其他字符。
正确的语法是
set def off;
insert into tablename values('J&J');
停止使用SQL /另外,我强烈建议PL/SQL Developer这是不是一个SQL工具等等。
p.s.有些人更喜欢TOAD。
如果您需要在Unix/Linux上运行,该怎么办? :) – Neels 2014-10-09 14:50:18
总是有CHR()函数,它的ASCII码转换为字符串。
即。类似: INSERT INTO 表 VALUES( CONCAT( 'J',CHR(38), 'J') )
一种替代的解决方案,使用级联和Chr函数:
select 'J' || chr(38) || 'J Construction' from dual;
您可以插入如下字符串:'J'||' &'||'建筑'。 它工作正常。
insert into table_name (col_name) values('J'||'&'||'Construction');
看,安德鲁:
“Ĵ&Ĵ施工”:
SELECT CONCAT( 'J',CONCAT(CHR(38), 'Ĵ施工'))FROM DUAL ;
INSERT INTO TEST_TABLE VALUES('Jonhy''s Sport &'||' Fitness')
此查询的输出:Jonhy的运动&健身
np!正如我所说的,我一直在忘记这一点,很高兴有机会记录“综合答案”;-) – tardate 2009-01-20 08:06:45
这[SQL * Plus常见问题](http://www.orafaq.com/wiki/SQL*Plus_FAQ# How_does_one_disable_interactive_prompting_in_SQL.2APlus.3F)提供了类似的答案。 – DavidRR 2012-11-16 14:15:22