为什么执行立即命令时出现运行时错误
问题描述:
我在执行存储过程时遇到错误而困惑不解。该错误是“无效的关系运算符”:为什么执行立即命令时出现运行时错误
...
DECLARE
varResult integer;
varFilterString varchar2(1000);
varSampleCode nvarchar2(80);
begin
--debug values
varFilterString := 'auditflag=0' ;
varSampleCode := 's00083';
--this command gives the runtime error:
execute immediate 'select count(*) from samples where samplecode = :samplecode and auditflag = 0 and :filter'
into varResult
using varSampleCode, varFilterString ;
...
PL/SQL是不是我经常做的,我是被它迷惑。这条线有什么问题?
TIA
答
它不喜欢的:过滤器,你不能在一个完整的条件作为字符串传递,你只能通过绑定到参数。要解决你只需要直接附加字符串,而不是作为参数传递它。
execute immediate 'select count(*) from samples where samplecode = :samplecode and auditflag = 0 and ' || REPLACE(varFilterString, '''', '''''')
into varResult
using varSampleCode;
好了,现在,有了理解 - 但我仍然得到一个运行时错误(ORA-0900无效的SQL语句)当行执行:1和auditflag:从样品,其中samplecode =执行即时“SELECT COUNT(*) = 0和'|| varFilterString into varResult using varSampleCode; – 2014-12-04 09:29:25
如果您手动运行查询,会发生什么情况:'sample sample ='s00083'且auditflag = 0且auditflag = 0'的样本中选择count(*)?我看不到明显的错误,但我现在没有Oracle。 – DoctorMick 2014-12-04 09:46:16
没关系。当我得到错误时,varFilter的实际值是“submittercode ='S'”,它由调用应用程序传递并且非常合法。这可能与嵌入的撇号有关吗? – 2014-12-04 09:54:35