我正在使用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;
更改查询后其工作正常。问题是如果我们在单引号内保存类似名称值的变量,有些时候查询在更改查询工作正常后不会对' , "
等特殊字符执行。
答案 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;