Expression value data type
example-1: decode(1<>1,2,1.23), this evaluates to 1
example-2: decode(1<>1,2.0,1.23) this evaluates to 1.23
example-3: decode(1<>1,2.0,1) this evaluates to 1
What is happening here?
BODS will cast from left to right, i.e. what ever the datatype of the left most operand is the final datatype of the expression.
in example 1 first operand is 1, entire expression castes/converts to INTEGER
in example 2 first operand is a floting point, entire expression casts/converts to a float/double
in example 3 first operand is a floting point, entire expression casts/converts to a float/double
This issue is applicable where ever a mathematical expression is possible like in query transform, lookup etc.