处理PL / SQL过程中的特殊字符。

时间:2014-04-02 10:19:20

标签: sql plsql oracle10g

我正在使用oracle 10g plsql程序进行插入和列出,但如果我们有任何特殊字符,如'(单引号)和&等查询失败。如何处理plsql中的特殊字符?

之前:

    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;

更改查询后其工作正常。问题是如果我们在单引号内保存类似名称值的变量,有些时候查询在更改查询工作正常后不会对' , "等特殊字符执行。

1 个答案:

答案 0 :(得分:2)

首先如何处理引用'和符号&

SQL@xe> set define off
SQL@xe> select q'(foo's & bar's)' from dual;

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

SQL@xe>

有关替代引用机制q''的详细信息,另请参阅How do I ignore ampersands in a SQL script running from SQL Plus?Text Literals

其次,不要将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;