Jeg tror, problemet er, at den dynamiske sætning du prøver i din EXECUTE IMMEDIATE er en SQL-sætning, ikke en PL/SQL-sætning. Og INTO er ikke SQL, det er PL/SQL.
Du kan enten lave en dynamisk SQL sætning med kun én bindevariabel, og placer derefter din INTO uden for det dynamiske udsagn. Dette understøttes, når du laver en dynamisk SQL erklæring:
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;
Eller du kan lave en dynamisk PL/SQL anonym blokering:
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;
Denne gang INTO skal være inde i den dynamiske streng og bruge en bind-variabel, fordi med BEGIN og END; du laver nu dynamisk PL/SQL .
Til din brug vil jeg anbefale den første mulighed, at lave dynamisk SQL og placere INTO efter erklæringsstrengen.