Ich denke, das Problem ist, dass die dynamische Anweisung, die Sie versuchen, in Ihrem EXECUTE IMMEDIATE
ist eine SQL-Anweisung, keine PL/SQL-Anweisung. Und INTO
ist nicht SQL, sondern PL/SQL.
Sie können entweder ein dynamisches SQL ausführen -Anweisung mit nur einer Bind-Variablen und platzieren Sie dann Ihren INTO
außerhalb der dynamischen Anweisung. Dies wird unterstützt, wenn eine dynamische SQL ausgeführt wird Aussage:
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;
Oder Sie können ein dynamisches PL/SQL ausführen Anonymer Block:
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;
Diesmal der INTO
muss innerhalb des dynamischen Strings sein und eine Bind-Variable verwenden, da mit dem BEGIN
und END;
Sie machen jetzt dynamisches PL/SQL .
Für Ihren Anwendungsfall würde ich die erste Option empfehlen, nämlich dynamisches SQL und Platzieren des INTO
nach die Anweisungszeichenfolge.