sql >> Database teknologi >  >> RDS >> Oracle

Oracle-forespørgsel vil ikke kompilere

Jeg tror, ​​problemet er, at den dynamiske sætning du prøver i din EXECUTE IMMEDIATE er en SQL-sætning, ikke en PL/SQL-sætning. Og INTO er ikke SQL, det er PL/SQL.

Du kan enten lave en dynamisk SQL sætning med kun én bindevariabel, og placer derefter din INTO uden for det dynamiske udsagn. Dette understøttes, når du laver en dynamisk SQL erklæring:

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;

Eller du kan lave en dynamisk PL/SQL anonym blokering:

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;

Denne gang INTO skal være inde i den dynamiske streng og bruge en bind-variabel, fordi med BEGIN og END; du laver nu dynamisk PL/SQL .

Til din brug vil jeg anbefale den første mulighed, at lave dynamisk SQL og placere INTO efter erklæringsstrengen.




  1. Sådan fungerer LOCATE()-funktionen i MySQL

  2. PostgreSQL-ækvivalent til Oracles PERCENTILE_CONT-funktion

  3. flere MySQL-forespørgsler til en enkelt insert

  4. Hvordan får jeg et resultat på tværs af 2 tabeller