Това е, защото параметърът 3 на вашия израз за декодиране е NULL; според документацията (подчертавам).
Oracle автоматично преобразува expr и всяка стойност за търсене в типа данни на първата стойност за търсене, преди да сравни .... Ако първият резултат има тип данни CHAR или ако първият резултат е нулев, тогава Oracle преобразува върнатата стойност в типа данни VARCHAR2 .
Във вашия случай първият резултат е NULL, който Oracle третира като VARCHAR2. Вашата върната стойност се преобразува имплицитно в VARCHAR2. Ако сте променили своя DECODE()
до следното ще получите номер:
select decode(1, 0, 0, 0.75)
и бихте могли да постигнете своя NULL, като използвате NULLIF()
функция:
select nullif(decode(1, 0, 0, 0.75), 0) ...
По-добре е да използвате израз CASE, който налага всички върнати типове данни да са еднакви:
select case 1 when 0 then null
else 0.75
end ...
1. за което и аз бях хванат.