Slightly Weird Oracle Stuff

PDF24 Creator    Send article as PDF   

I knew you could do this:

SQL> select 1234567890 as abc from dual;



SQL> select 1234567890 abc from dual;


But I didn’t know that this worked as well:

SQL> select 1234567890abc from dual;


So I did a bit of playing and discovered that there is a difference if the alias is D or F but no other single character:

SQL> select 1234567890d, 1234567890f, 1234567890p from dual;

1234567890D 1234567890F          P
----------- ----------- ----------
 1.235E+009  1.235E+009 1234567890

This shows the values in Scientific notation when D or F is used as an alias in this manner, but not if used in this manner:

SQL> select 1234567890 d, 1234567890 f, 1234567890 p from dual

         D          F          P
---------- ---------- ----------
1234567890 1234567890 1234567890

Then it gets stranger:

SQL> select 1234567890df from dual;


SQL> select 1234567890fd from dual


SQL> select 1234567890fa from dual


I get the impression that a trailing F or D on a number means “display as floating point or decimal” then the F/D is dropped and the A used as a label. I can’t find this in the docs though.

Works with strings as well but the F/D thing doesn’t appear with strings. Doesn’t work – for obvious reasons – with column names.

UPDATE: Thanks to Maxim on the Oracle-L list, the answer is here

UPDATE 2: Thanks to Jonathan Lewis also on the Oracle-L list, it seems that Tanel Poder has also come across this. On his blog here.


4 Comments to "Slightly Weird Oracle Stuff"

  1. WilliamRobertson's Gravatar WilliamRobertson
    December 14, 2011 - 3:05 pm | Permalink

    F and D indicate BINARY_FLOAT and BINARY_DOUBLE, respectively, so 1234567890d etc are valid numeric literals (since Oracle 10.1).

    NUMBER and Floating-Point Literals

  2. WilliamRobertson's Gravatar WilliamRobertson
    December 14, 2011 - 3:13 pm | Permalink

    Ah, I see you found it…

Leave a Reply