如何插入包含“&”的string
我如何写一个包含&字符的插入语句? 例如,如果我想将“J&J Construction”插入到数据库的一列中。
我不确定它是否有所作为,但我正在使用Oracle 9i。
我一直忘记这一点,并再次回到它! 我认为最好的答案是迄今为止提供的答复的组合。
首先,&是sqlplus / sqldeveloper中的variables前缀,因此问题出现时,它应该是variables名称的一部分。
SET DEFINE OFF将停止sqlplus解释和这种方式。
但是,如果你需要使用sqlplusvariables和文字&字符呢?
- 您需要SET DEFINE ON以使variables正常工作
- 并设置ESCAPE ON以避免使用&。
例如
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
阻止它踩踏和作为一个特殊情况
另一种解决scheme是使用串联和chr函数:
select 'J' || chr(38) || 'J Construction' from dual;
正确的语法是
set def off; insert into tablename values( 'J&J');
总是有chr()函数,它将ascii代码转换为string。
即。 如下所示:INSERT INTO table VALUES(CONCAT('J',CHR(38),'J'))
在程序中,始终使用参数化查询。 它避免了SQL注入攻击以及SQLparsing器特有的任何其他字符。
我发现使用以下任一选项都可以工作:
SET DEF OFF
要么
SET SCAN OFF
我对数据库知之甚less,不知道一个比另一个更好还是更“正确”。 另外,如果有什么比这两个更好,请让我知道。
你可以插入像'J'||'&'||'Construction'这样的string。 它工作正常。
insert into table_name (col_name) values('J'||'&'||'Construction');
SET ESCAPE ON; INSERT VALUES("J\&J Construction") INTO custnames;
(未经testing,手边没有Oracle盒子,已经有一段时间了)
如果你正在使用sql plus,那么我认为你需要发出命令
SET SCAN OFF
停止使用SQL / Plus,我强烈推荐PL / SQL Developer,它不仅仅是一个SQL工具。
有些人喜欢TOAD 。
安德鲁:
“J&Jbuild设” :
SELECT CONCAT('J',CONCAT(CHR(38),'J Construction'))FROM DUAL;