2011-07-20 181 views
1

我寫一個查詢像如何處理查詢字符串中的特殊字符?

select * from fact_table where name = 'R&D' 

select * from fact_table where name = 'John's' 

我使用Oracle 11g數據庫。是否有任何通用函數或查詢樣式可以在我的查詢中處理特殊字符,如'&'和'''。

我不想單獨處理每個案例,我想要一個通用的機制。

如果這是一個重複的職位,請指引我原來的職位

+0

我不知道「最好」的方式,但似乎你可以使用一個逃生用戶定義函數來修改你的字符串。 –

回答

0

使用引用操作

select * from fact_table where name = q'#John's#' 

對於&號,它是像SQL工具的問題* Plus的

set define ~ 
select * from fact_table where name = 'R&D' 

但在PL/SQL塊,似乎工作的罰款:

declare 
    output VARCHAR2(10); 
BEGIN 
    SELECT name 
    INTO output 
    FROM fact_table 
    WHERE name = '&1'; 

    DBMS_OUTPUT.put_line('Output: ' || output); 
END; 
/

SQL> @test.sql; 
Enter value for 1: R&D 
old 7:   WHERE name = '&1'; 
new 7:   WHERE name = 'R&D'; 
Output: R&D 

PL/SQL procedure successfully completed. 
1

的符號應該正常工作。一些工具,如SQLPlus或SQLDeveloper使用此字符來指示綁定變量。禁用此「功能」是這樣的: 集定義關閉 重新啓用它是這樣的: 集定義上

單引號,需要特別注意。 使用兩個單引號字符告訴數據庫,把它作爲文字,就像這樣: SELECT * FROM fact_table其中名稱=「約翰」的