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.