2012-07-03 62 views
64

在Oracle PL/SQL中,如何在字符串中轉義單引號?我試過這種方式,它不起作用。PL/SQL,如何在字符串中轉義單引號?

declare 
    stmt varchar2(2000); 
begin 
    for i in 1021 .. 6020 
    loop 
    stmt := 'insert into MY_TBL (Col) values(\'ER0002\')'; 

    dbms_output.put_line(stmt); 
    execute immediate stmt; 
    commit; 
    end loop; 
exception 
    when others then 
    rollback; 
    dbms_output.put_line(sqlerrm); 
end; 
/
+0

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

回答

121

您可以使用文字引用:

stmt := q'[insert into MY_TBL (Col) values('ER0002')]'; 

的文檔文字can be found here

或者,你可以用兩個引號表示一個單引號:

stmt := 'insert into MY_TBL (Col) values(''ER0002'')'; 

用Q語法文字引用機制更加靈活和可讀性,海事組織。

11

這裏的a blog post應該幫助逃避字符串中的蜱。

這裏是最簡單的方法從後說:

最簡單,最常用的方法是使用一個單引號,在兩側的兩個單>引號。

SELECT'dual'quote'''from dual;

上述聲明的輸出將是:

測試單引號」

簡單說明你需要一個額外的單引號字符打印單引號>字符。這就是說,如果你把兩個單引號字符Oracle打印出來。第一個>一個就像一個轉義字符。

這是在Oracle中打印單引號的最簡單方法。但是當你必須打印一組引號而不是一個引號時,它會變得複雜。在這種情況下,以下方法可以正常工作。但它需要更多的打字工作。

-3

只要把下面的語句for前:

set escape '\'; 
+1

我沒有-1,但我無法得到這個工作。 – rjdkolb

2

除了DCookie的回答上面,你也可以使用CHR(39)爲一個單引號。

當我必須基於大量現有數據創建大量插入/更新語句時,我發現這非常有用。

這裏是一個非常簡單的例子:[在PLSQL逃逸單引號]的

Select 'UPDATE Customers SET LName = ' || chr(39) || 'Doe' || chr(39) || ';' From dual; 
相關問題