2015-04-28 166 views
1

如何在SqlDeveloper中成功运行这样的查询?插入带有特殊字符的字符串到列中

execute immediate q'# 
        insert into results(SrcProcedure) 
           values('d/&'s*73;.f45') 
        #'; 
+0

可能重复( http://stackoverflow.com/questions/6678478/escaping-single-quote-in-plsql) –

+0

[SQL Server varchar字段中允许使用哪些“特殊”字符?](http://stackoverflow.com/问题/ 7038213 /其中,特殊字符,都允许的功能于SQL- server-varchar-fields) –

回答

2

您需要了解您的语言的转义规则。在SQL中,'是一个特殊字符。它的逃逸是''

execute immediate q'# 
       insert into results(SrcProcedure) 
          values(''d/&''''s*73;.f45'') 
       #'; 

规则:对于嵌套每个级别,你需要复制所有的单引号。

d/&'s*73;.f45 
'd/&''s*73;.f45' 
...values(''d/&''''s*73;.f45'')... 

你可以,如果你use q'{...}'用更少的报价逃脱:

execute immediate q'{ 
       insert into results(SrcProcedure) 
          values('d/&''s*73;.f45') 
       }'; 

相关:

+0

可选的引用语法几乎适用于任何字符作为quote_delimiter。 'q'#...#';'工作正常。问题在于字符串内部的字符串必须被转义。 –

1

问题是您试图插入值d/&'s*73;.f45并且'字符被解释为值的结尾。

你需要躲避'字符:

execute immediate q'# 
       insert into results(SrcProcedure) 
          values('d/&''s*73;.f45') 
       #'; 

或者你可以嵌套替代引用机制,以避免任何字符串转义:在PLSQL逃逸单引号]的

execute immediate q'# 
       insert into results(SrcProcedure) 
          values(q'!d/&'s*73;.f45!') 
       #';