2014-12-04 2 views
0

Я запутался в ошибке при выполнении хранимой процедуры. Ошибка «недопустимый оператор отношения»:Почему я получаю ошибку во время выполнения при выполнении немедленной команды

... 
    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 не то, что я делаю очень часто, и я озадачен этим. Что не так с этой линией?

ТИА

ответ

0

Он не любит и: фильтр, вы не можете передать в целом состоянии в виде строки, вы можете только передать параметр, чтобы связывать. Для решения вам просто нужно добавить строку напрямую, а не передавать ее в качестве параметра.

execute immediate 'select count(*) from samples where samplecode = :samplecode and auditflag = 0 and ' || REPLACE(varFilterString, '''', '''''') 
into varResult 
using varSampleCode; 
+0

Хорошо, теперь понятно и спасибо - но я все еще получаю ошибку времени выполнения (ор-0900 недействительное заявление SQL), когда линия выполняет: выполнить немедленный «SELECT COUNT (*) из образцов, где samplecode =: 1 и auditflag = 0 и '|| varFilterString в varResult с использованием varSampleCode; –

+0

Что произойдет, если вы выполните запрос вручную: 'select count (*) из образцов, где samplecode = 's00083' и auditflag = 0 и auditflag = 0'? Я не вижу явной ошибки, но в настоящий момент у меня нет Oracle. – DoctorMick

+0

Все в порядке. Фактическое значение varFilter, когда я получаю ошибку, является «submittercode = 'S», которое передается вызывающим приложением и вполне законно. Может ли это быть чем-то связанным с внедренными апострофами? –