Het is omdat de 3-parameter van je decodeerinstructie NULL is; volgens de documentatie (mijn nadruk).
Oracle converteert expr en elke zoekwaarde automatisch naar het gegevenstype van de eerste zoekwaarde alvorens te vergelijken .... Als het eerste resultaat het gegevenstype CHAR heeft of als het eerste resultaat null is, converteert Oracle de geretourneerde waarde naar het gegevenstype VARCHAR2 .
In uw geval is het eerste resultaat NULL, dat door Oracle wordt behandeld als een VARCHAR2. Uw retourwaarde wordt impliciet geconverteerd naar een VARCHAR2. Als u uw DECODE()
. heeft gewijzigd naar het volgende zou je een nummer krijgen:
select decode(1, 0, 0, 0.75)
en je zou je NULL kunnen bereiken door de NULLIF()
. te gebruiken functie:
select nullif(decode(1, 0, 0, 0.75), 0) ...
Het is beter om een CASE-instructie te gebruiken, die afdwingt dat alle geretourneerde datatypes hetzelfde zijn:
select case 1 when 0 then null
else 0.75
end ...
1. waar ik ook op ben betrapt.