Creo que el problema es que la declaración dinámica que está intentando en su EXECUTE IMMEDIATE
es una sentencia SQL, no una sentencia PL/SQL. Y INTO
no es SQL, es PL/SQL.
Puedes hacer un SQL dinámico declaración con solo una variable de vinculación y luego coloque su INTO
fuera de la instrucción dinámica. Esto es compatible cuando se hace un SQL dinámico declaración:
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;
O puede hacer un PL/SQL dinámico bloque 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;
Esta vez el INTO
debe estar dentro de la cadena dinámica y usar una variable de vinculación, porque con BEGIN
y END;
ahora estás haciendo PL/SQL dinámico .
Para su caso de uso, recomendaría la primera opción, hacer SQL dinámico y colocando el INTO
después la cadena de sentencia.