Мисля, че проблемът е, че динамичният оператор, който опитвате във вашия 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
след низът на израза.