PDA

Vollständige Version anzeigen : Ersatz für Oracles "decode"?


StefanGe
06.10.2001, 19:48
Hallo,

ich suche einen adäquaten Ersatz für Oracles "decode" Funktion unter MS Access SQL.

Es geht um die Ersetzung von Parametern bei dynamischem SQL. Vielleicht hat einer von Euch eine Idee. Hier die Version für in Oracles PL/SQL:

select spalte1 from x
where spalte1=decode (param1,null,spalte1,param1)


Im Klartext wird dies zu:

param1 <> null:

select spalte1 from x where spalte1=param1

param1 = null:

select spalte1 from x where spalte1=spalte1

Sehr schön, vor allem wenn man 20 Spalten in der where-Bedingung
haben kann oder nicht.

Ansonsten ist dieses Kommando viel mächtiger, weil es eigentlich ein Switch
der Form

switch(variable)
{
case wert1:
result1:
break;
case wert2:
result2:
default:
defaultresult;
}

==> decode (variable,wert1,result1,wert2,result2,defaultresult)

Danke und Gruß,
Stefan

MarioR
06.10.2001, 21:12
Hallo Stefan,

also ein richtiger Ersatz fällt mir im Moment auch nicht ein. Aber zumindest für Dein Beispiel gibt es eine Lösung:
Where spalte1=IIf(IsNull(param1),spalte1,param1)

Und für Dein 2. Beispiel könnte man die IIf's verschachteln:
IIf(variable1=wert1,result1,IIf(variable1=wert2,result2,defaultresult))

Sascha Trowitzsch
07.10.2001, 13:27
Genau diesen SWITCH-Befehl gibt es auch in Access.

decode (variable,wert1,result1,wert2,result2,defaultresult)

wird zu

Switch(variable = wert1;result1;variable = wert2;result2; true; defaultresult)

Ciao, Sascha

MarioR
07.10.2001, 13:55
Tatsächlich! Man lernt doch nie aus :)