Oracle11g 如何处理查询字符串中的特殊字符?

Oracle11g 如何处理查询字符串中的特殊字符?,oracle11g,Oracle11g,我正在写一个类似这样的问题 select * from fact_table where name = 'R&D' select * from fact_table where name = 'John's' 我正在使用Oracle11g数据库。是否有任何通用函数或查询样式,我可以在其中处理查询中的特殊字符,如“&”和“%” 我不想单独处理每一个案例,我想要一个通用的机制 如果这是一篇重复的文章,请引导我到原始文章符号应该可以使用。有些工具,如SQLPlus或SQLDeveloper

我正在写一个类似这样的问题

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

select * from fact_table where name = 'John's'
我正在使用Oracle11g数据库。是否有任何通用函数或查询样式,我可以在其中处理查询中的特殊字符,如“&”和“%”

我不想单独处理每一个案例,我想要一个通用的机制


如果这是一篇重复的文章,请引导我到原始文章

符号应该可以使用。有些工具,如SQLPlus或SQLDeveloper,使用此字符表示绑定变量。禁用此“功能”,如下所示: 抵销 按如下方式重新启用它: 设置定义

单引号需要特别注意。 使用两个单引号字符告诉数据库将其视为文本,如下所示:
从事实表中选择*,其中name='John's'

符号应该可以正常工作。有些工具,如SQLPlus或SQLDeveloper,使用此字符表示绑定变量。禁用此“功能”,如下所示: 抵销 按如下方式重新启用它: 设置定义

单引号需要特别注意。 使用两个单引号字符告诉数据库将其视为文本,如下所示: 从事实表中选择*,其中name='John's'

使用引号运算符

select * from fact_table where name = q'#John's#'
对于ampersands来说,这是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.
使用报价运算符

select * from fact_table where name = q'#John's#'
对于ampersands来说,这是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.
我不知道“最佳”方式,但似乎可以使用escape用户定义函数修改字符串。我不知道“最佳”方式,但似乎可以使用escape用户定义函数修改字符串。