Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.misc -> Sorting with ROW_NUMBER Bug

Sorting with ROW_NUMBER Bug

From: Björn Wächter <bwc_at_p3-solutions.de>
Date: Thu, 06 Jul 2006 16:01:12 +0200
Message-ID: <4h4jd8F1ohg0iU1@news.dfncis.de>


Hello all,

I see a strange behavior in my
Oracle 10.2.0.1 Database. When I create
a table like this:

CREATE TABLE BUG_TEST
(
  USER_NAME VARCHAR2(200 BYTE)
);

then create a view on the table:

CREATE OR REPLACE VIEW VI_BUG_TEST
(USER_NAME)
AS
SELECT
usr.USER_NAME USER_NAME
FROM
BUG_TEST usr
ORDER BY USER_NAME Insert test data:

INSERT INTO BUG_TEST ( USER_NAME ) VALUES (
'a');

INSERT INTO BUG_TEST ( USER_NAME ) VALUES (
'b');

INSERT INTO BUG_TEST ( USER_NAME ) VALUES (
'c');

INSERT INTO BUG_TEST ( USER_NAME ) VALUES (
'd');

INSERT INTO BUG_TEST ( USER_NAME ) VALUES (
'e');

INSERT INTO BUG_TEST ( USER_NAME ) VALUES (
'f');

INSERT INTO BUG_TEST ( USER_NAME ) VALUES (
'g');

INSERT INTO BUG_TEST ( USER_NAME ) VALUES (
'h');

INSERT INTO BUG_TEST ( USER_NAME ) VALUES (
'i');

COMMIT; and then execute this statement:

SELECT
ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY vi.USER_NAME) my_row_num, MY_MAX_ROW,
vi.USER_NAME
FROM (
SELECT MAX(ROWNUM) OVER (PARTITION BY 1) MY_MAX_ROW, my_vi.* FROM VI_BUG_TEST my_vi
) vi
ORDER BY my_row_num

The result is:

MY_ROW_NUM MY_MAX_ROW USER_NAME
---------- ---------- ---------

         1          9 a
         2          9 b
         3          9 c
         4          9 d
         5          9 i
         6          9 f
         7          9 g
         8          9 h
         9          9 e

9 rows selected.

I think the result should be sorted by
USER_NAME but it is not.

When changing
MAX(ROWNUM) OVER (PARTITION BY 1)
to
MAX(ROWNUM) OVER ()
resulting in:

SELECT
ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY vi.USER_NAME) my_row_num, MY_MAX_ROW,
vi.USER_NAME
FROM (
SELECT MAX(ROWNUM) OVER () MY_MAX_ROW, my_vi.* FROM VI_BUG_TEST my_vi ) vi
ORDER BY my_row_num

the result is correct:

MY_ROW_NUM MY_MAX_ROW USER_NAME
---------- ---------- ---------

         1          9 a
         2          9 b
         3          9 c
         4          9 d
         5          9 e
         6          9 f
         7          9 g
         8          9 h
         9          9 i

9 rows selected.

Am I wrong with the result I expect or is it a Bug? Does someone know if this bug can be fixed? And if it really is a bug how can I report it oracle in the best way?

Björn Received on Thu Jul 06 2006 - 09:01:12 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US