2011-07-20 99 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其中名称=“约翰”的