Acho que o problema é que a instrução dinâmica que você está tentando no seu
EXECUTE IMMEDIATE
é uma instrução SQL, não uma instrução PL/SQL. E INTO
não é SQL, é PL/SQL. Você pode fazer um SQL dinâmico declaração com apenas uma variável de ligação e, em seguida, coloque seu
INTO
fora da declaração dinâmica. Isso é suportado ao fazer um SQL dinâmico declaração:execute immediate 'select CASE WHEN EXISTS ( SELECT 1 from samples where samplecode = :varSamplecode and auditflag = 0 and ' || varFilterString || ') then 1 else 0 end from DUAL'
into varResult
using IN varSampleCode;
Ou você pode fazer um PL/SQL dinâmico bloco anônimo:
execute immediate 'begin select CASE WHEN EXISTS ( SELECT 1 from samples where samplecode = :varSamplecode and auditflag = 0 and ' || varFilterString || ') then 1 else 0 end into :varresult from DUAL; end;'
using IN varSampleCode, OUT varResult;
Desta vez, o
INTO
deve estar dentro da string dinâmica e usando uma variável de ligação, porque com o BEGIN
e END;
agora você está fazendo PL/SQL dinâmico . Para o seu caso de uso, recomendo a primeira opção, fazendo o SQL dinâmico e colocando o
INTO
depois a seqüência de instruções.