sql >> Database >  >> RDS >> Oracle

Oracle-query kan niet worden gecompileerd

Ik denk dat het probleem is dat de dynamische instructie die u probeert in uw EXECUTE IMMEDIATE is een SQL-instructie, geen PL/SQL-instructie. En INTO is geen SQL, het is PL/SQL.

U kunt ofwel een dynamische SQL . doen statement met slechts één bindvariabele en plaats vervolgens uw INTO buiten de dynamische verklaring. Dit wordt ondersteund bij het uitvoeren van een dynamische SQL verklaring:

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;

Of je kunt een dynamische PL/SQL . doen anonieme blokkering:

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;

Deze keer de INTO moet binnen de dynamische tekenreeks zijn en een bindvariabele gebruiken, want met de BEGIN en END; je doet nu dynamische PL/SQL .

Voor uw gebruik zou ik de eerste optie aanbevelen, dynamische SQL . doen en het plaatsen van de INTO na de instructiereeks.




  1. Verander de Oracle-poort van poort 8080

  2. Sqlplus-aanmeldingsfout bij gebruik van bash-variabelen:SP2-0306:Ongeldige optie

  3. Maak verbinding met ONLINE MySQL-database met behulp van DSN ODBC

  4. ORA-00604 ORA-12705