2015-04-28 132 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!') 
       #';