Penso che il problema sia che l'istruzione dinamica che stai provando nel tuo EXECUTE IMMEDIATE
è un'istruzione SQL, non un'istruzione PL/SQL. E INTO
non è SQL, è PL/SQL.
Puoi eseguire un SQL dinamico istruzione con una sola variabile di binding e quindi inserisci il tuo INTO
al di fuori della dichiarazione dinamica. Questo è supportato quando si esegue un SQL dinamico dichiarazione:
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;
Oppure puoi eseguire un PL/SQL dinamico blocco anonimo:
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;
Questa volta il INTO
deve essere all'interno della stringa dinamica e utilizzare una variabile bind, perché con BEGIN
e END;
ora stai eseguendo PL/SQL dinamico .
Per il tuo caso d'uso, consiglierei la prima opzione, eseguendo SQL dinamico e inserendo il INTO
dopo la stringa dell'istruzione.