Мисля, че проблемът е, че динамичният оператор, който опитвате във вашия EXECUTE IMMEDIATE е SQL оператор, а не PL/SQL оператор. И INTO не е SQL, а PL/SQL.
Можете или да направите динамичен SQL израз само с една свързваща променлива и след това поставете своя INTO извън динамичното изявление. Това се поддържа при изпълнение на динамичен SQL изявление:
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;
Или можете да направите динамичен PL/SQL анонимен блок:
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;
Този път INTO трябва да е вътре в динамичния низ и да използва свързваща променлива, защото с BEGIN и END; сега работите динамично PL/SQL .
За вашия случай на употреба бих препоръчал първата опция, извършване на динамичен SQL и поставяне на INTO след низът на израза.