Ik denk dat het probleem is dat de dynamische instructie die u probeert in uw EXECUTE IMMEDIATE
is een SQL-instructie, geen PL/SQL-instructie. En INTO
is geen SQL, het is PL/SQL.
U kunt ofwel een dynamische SQL . doen statement met slechts één bindvariabele en plaats vervolgens uw INTO
buiten de dynamische verklaring. Dit wordt ondersteund bij het uitvoeren van een dynamische SQL verklaring:
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;
Of je kunt een dynamische PL/SQL . doen anonieme blokkering:
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;
Deze keer de INTO
moet binnen de dynamische tekenreeks zijn en een bindvariabele gebruiken, want met de BEGIN
en END;
je doet nu dynamische PL/SQL .
Voor uw gebruik zou ik de eerste optie aanbevelen, dynamische SQL . doen en het plaatsen van de INTO
na de instructiereeks.