sql >> Databasteknik >  >> RDS >> Oracle

Oracle-frågan kompileras inte

Jag tror att problemet är att den dynamiska satsen du försöker i din EXECUTE IMMEDIATE är en SQL-sats, inte en PL/SQL-sats. Och INTO är inte SQL, det är PL/SQL.

Du kan antingen göra en dynamisk SQL sats med bara en bindningsvariabel och placera sedan din INTO utanför det dynamiska uttalandet. Detta stöds när du gör en dynamisk SQL uttalande:

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 så kan du göra en dynamisk PL/SQL anonym blockering:

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;

Den här gången INTO måste vara inuti den dynamiska strängen och använda en bindningsvariabel, eftersom med BEGIN och END; du gör nu dynamisk PL/SQL .

För ditt användningsfall skulle jag rekommendera det första alternativet, att göra dynamisk SQL och placera INTO efter uttalandesträngen.




  1. "Är det hemligt? Är det säkert?" Hantera känsliga data i din datamodellering

  2. SQL Server RAISERROR-uttalande med enkla exempel

  3. Hur loggar/spår jag Oracles lagrade proceduranrop med parametervärden?

  4. Hur man initierar en PostgreSQL-databas utan att köra PostgreSQL-servern