Myslím, že problém je v tom, že dynamický příkaz, který zkoušíte ve svém EXECUTE IMMEDIATE
je příkaz SQL, nikoli příkaz PL/SQL. A INTO
není SQL, je to PL/SQL.
Můžete buď vytvořit dynamický SQL příkaz pouze s jednou proměnnou vazby a poté umístěte INTO
mimo dynamický příkaz. Toto je podporováno při provádění dynamického SQL prohlášení:
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;
Nebo můžete vytvořit dynamický PL/SQL anonymní blok:
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;
Tentokrát INTO
musí být uvnitř dynamického řetězce a používat proměnnou vazby, protože s BEGIN
a END;
nyní děláte dynamické PL/SQL .
Pro váš případ použití bych doporučil první možnost, provedení dynamického SQL a umístěním INTO
po řetězec příkazu.