Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Abfrage wird nicht kompiliert

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.