Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: NULLS FIRST problem with numeric fields
"Federico Albesano - Technical Design S.r.l." <federico.albesano_at_technicaldesign.it> a écrit dans le
message de news:cetdcp$c39$1_at_grillo.cs.interbusiness.it...
> Hi all,
> I have Oracle 8.1.7 with a table:
>
> CREATE TABLE PREDTABSTATOPRATICA
> (
> IDSTATOPRATICA NUMBER(5) NOT NULL,
> STATOPRATICA VARCHAR2(100)
> );
> ALTER TABLE PREDTABSTATOPRATICA ADD ( CONSTRAINT PK_PREDTABSTATOPRATICA
> PRIMARY KEY ( IDSTATOPRATICA ) ) ;
>
> If I
> ORDER BY STATOPRATICA NULLS FIRST
> I get the correct result: first empty strings (null), then an alfabetically
> ascending ordered list.
>
> If I
> ORDER BY IDSTATOPRATICA NULLS FIRST
> I get a list ordered in a numerical DESCENDING manner, even if I specify
> also ASC !!! :-(
>
> Is this a bug? Is there an available patch?
> Is there a workaround?
>
> I know in thisi case IDSTATOPRATICA can't be NULL from it's definition, but
> I have an automatic query translator (from MSSQL to ORACLE) so I can't
> distiguish string from numeric fields only from the query text, but I want
> empty strings to come first in ASC and last in DESC order like MSSQL !!
>
> Thanks in advance for help!
>
> Federico Albesano
>
Can you post your test case as it seems to work for me (8.1.7.4 WinNT4SP6):
SQL> create table t (id number, name varchar2(30));
Table created.
SQL> insert into t
2 select decode(sign(dbms_random.value-0.8),1,to_number(null),rownum),
3 decode(sign(dbms_random.value-0.8),1,to_char(null),object_name)
4 from dba_objects
5 where rownum <= 20
6 order by dbms_random.value;
20 rows created.
SQL> commit;
Commit complete.
SQL> select * from t;
ID NAME
---------- ------------------------------ 19 2 ALL_ALL_TABLES ALL_COL_PRIVS_RECD 10 ALL_COL_PRIVS 17 ALL_DEF_AUDIT_OPTS ALL_COL_COMMENTS ALL_CONSTRAINTS 3 1 ACCESS$ 7 ALL_CLUSTER_HASH_EXPRESSIONS 5 ALL_CATALOG 18 ALL_DEPENDENCIES ALL_ASSOCIATIONS 16 ALL_DB_LINKS 15 ALL_CONTEXT 8 14 6 ALL_CLUSTERS 20
20 rows selected.
SQL> select * from t order by name nulls first;
ID NAME
---------- ------------------------------ 19 3 20 14 8 1 ACCESS$ 2 ALL_ALL_TABLES ALL_ASSOCIATIONS 5 ALL_CATALOG 6 ALL_CLUSTERS 7 ALL_CLUSTER_HASH_EXPRESSIONS ALL_COL_COMMENTS 10 ALL_COL_PRIVS ALL_COL_PRIVS_RECD ALL_CONSTRAINTS 15 ALL_CONTEXT 16 ALL_DB_LINKS 17 ALL_DEF_AUDIT_OPTS 18 ALL_DEPENDENCIES
20 rows selected.
SQL> select * from t order by id nulls first;
ID NAME
---------- ------------------------------ ALL_COL_PRIVS_RECD ALL_COL_COMMENTS ALL_CONSTRAINTS ALL_ASSOCIATIONS 1 ACCESS$ 2 ALL_ALL_TABLES 3 5 ALL_CATALOG 6 ALL_CLUSTERS 7 ALL_CLUSTER_HASH_EXPRESSIONS 8 10 ALL_COL_PRIVS 14 15 ALL_CONTEXT 16 ALL_DB_LINKS 17 ALL_DEF_AUDIT_OPTS 18 ALL_DEPENDENCIES 19 20
20 rows selected.
-- Regards Michel CadotReceived on Thu Aug 05 2004 - 10:12:03 CDT