2014-04-02 45 views
0

我使用oracle 10g plsql程序進行插入和列表,但如果我們有任何特殊字符如'(單引號)和&等查詢失敗。如何處理plsql中的特殊字符?處理PL/SQL過程中的特殊字符。

前:

lquery := 'select count(id) into lCount 
         From 
          dual 
         where 
          name = '||iName||' 
         and Id= '||iId 

後:

 select into lCount 
         From 
          dual 
         where 
          Id= iId 
         and name = iName; 

更改查詢其工作正常後。問題是如果我們在單引號內保持像名稱值這樣的變量,那麼在改變查詢工作正常之後,某些時候查詢將不會執行像' , "等特殊字符。

+0

請編輯您的帖子,以包括一個代碼失敗的例子。還包括有關如何調用此代碼的信息,因爲這可能會影響答案。謝謝。 –

+1

你不應該像這樣連接你的查詢。使用參數來代替'select ... where id =:1和name =:2' –

回答

1

一是如何處理報價'和符號&

[email protected]> set define off 
[email protected]> select q'(foo's & bar's)' from dual; 

Q'(FOO'S&BAR' 
------------- 
foo's & bar's 

[email protected]> 

參見How do I ignore ampersands in a SQL script running from SQL Plus?Text Literals爲引用機制q''替代的細節。

其次,不要將SQL語句創建爲字符串,而應使用PL/SQL Static SQL。靜態SQL將爲你自動處理引用(並且也是SQL注入安全的)。像:

declare 
    lCount number; 
    iName varchar2(20) := q'(foo's & bar's)'; 
    iId number := 42; 
begin 
    select count(*) into lCount From dual where name = iName and Id= iId; 
end;