Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dense_rank проверяет только первые 1000 символов? / 14 сообщений из 14, страница 1 из 1
15.01.2018, 02:04
    #39584114
fanat000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dense_rank проверяет только первые 1000 символов?
Добрый вечер!

в общем возникла необходимость пронумеровать строки в зависимости от содержания некого поля MyText Varchar2(4000).

... dense_rank() over(order by MyText )

в рабочей базе оказались в наличии две строки, у которых значение в MyText более 1000 символов длиной, при этом первые 1000 совпадают, а дальше текст совершенно разный.

по логике строки разные и dense_rank должна вернуть разные значения, но нет!

ЧЯДНТ?

пример (воспроизводится в ORACLE 11.0.2):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
select 

dense_rank() over(order by text) "dense_rank", 
rank() over(order by text) "rank", 
row_number() over(order by text) "row_number", 
length(text)"length", t.*
from
(
select 1 x, '0000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000vxvvxjty5' text from dual

union 
select 2 x, '0000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000frgegeg' text from dual
)t
order by x
...
Рейтинг: 0 / 0
15.01.2018, 02:23
    #39584116
fanat000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dense_rank проверяет только первые 1000 символов?
dense_rank rank row_number length X TEXT
1 1 2 1008 1 0000000000000000000000000000000000000000...
1 1 1 1018 2 0000000000000000000000000000000000000000...

вот такие дела.
...
Рейтинг: 0 / 0
15.01.2018, 06:14
    #39584128
dense_rank проверяет только первые 1000 символов?
fanat000,

вот тебе же не лениво было столько нулей набивать. LPAD/RPAD - это для лохов, наверное?
...
Рейтинг: 0 / 0
15.01.2018, 07:01
    #39584134
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dense_rank проверяет только первые 1000 символов?
Ha 11.2.0.3 (11.2.0.2 не имею и проверить не могу) не воспроизводится:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
SQL> select banner from v$version
  2  /

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE    11.2.0.3.0      Production
TNS for 64-bit Windows: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production

SQL> select
  2  dense_rank() over(order by text) "dense_rank",
  3  rank() over(order by text) "rank",
  4  row_number() over(order by text) "row_number",
  5  length(text)"length", x
  6  from
  7  (
  8  select 1 x, '0000000000000000000000000000000000000000000000000000000000000000000000
  9  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 10  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 11  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 12  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 13  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 14  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 15  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 16  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 17  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 18  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 19  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 20  0000vxvvxjty5' text from dual
 21  union
 22  select 2 x, '0000000000000000000000000000000000000000000000000000000000000000000000
 23  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 24  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 25  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 26  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 27  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 28  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 29  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 30  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 31  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 32  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 33  00000000000000000000000000000000000000000000000000000000000000000000000000000000000
 34  0000000000000000frgegeg' text from dual
 35  )t
 36  order by x
 37  /

dense_rank       rank row_number     length          X
---------- ---------- ---------- ---------- ----------
         2          2          2       1008          1
         1          1          1       1018          2

SQL> 



SY.
...
Рейтинг: 0 / 0
15.01.2018, 07:11
    #39584136
dense_rank проверяет только первые 1000 символов?
SY,

у меня на

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
"CORE 11.2.0.4.0 Production"
TNS for 64-bit Windows: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

результат соответствует тому, что у ТС:

Код: plsql
1.
2.
3.
4.
dense_rank       rank row_number     length          X
---------- ---------- ---------- ---------- ----------
         1          1          2       1008          1
         1          1          1       1018          2
...
Рейтинг: 0 / 0
15.01.2018, 07:14
    #39584137
dense_rank проверяет только первые 1000 символов?
Добрый Э - Эх,

на
Код: plsql
1.
2.
3.
4.
5.
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
"CORE	10.2.0.5.0	Production"
TNS for 64-bit Windows: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production



результат аналогичный....
Код: plsql
1.
2.
3.
4.
dense_rank       rank row_number     length          X
---------- ---------- ---------- ---------- ----------
         1          1          2       1008          1
         1          1          1       1018          2
...
Рейтинг: 0 / 0
15.01.2018, 08:20
    #39584145
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dense_rank проверяет только первые 1000 символов?
...
Рейтинг: 0 / 0
15.01.2018, 08:24
    #39584147
mssql--2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dense_rank проверяет только первые 1000 символов?
глюков нету
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
SELECT 
       DENSE_RANK() OVER(ORDER BY text) "dense_rank", 
       RANK() OVER(ORDER BY text) "rank", 
       row_number() OVER(ORDER BY text) "row_number", 
       LEN(text)"length", T.*
  FROM
(
SELECT 1 x, '0000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000vxvvxjty5' text 

UNION 
SELECT 2 x, '0000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000frgegeg' text 
) T
ORDER BY x
...
Рейтинг: 0 / 0
15.01.2018, 08:45
    #39584149
fanat000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dense_rank проверяет только первые 1000 символов?
Добрый Э - Эхfanat000,

вот тебе же не лениво было столько нулей набивать. LPAD/RPAD - это для лохов, наверное?

а с LPAD при 1000 не воспроизводится;-)

поигрался, вот так снова "глючит":

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select 

dense_rank() over(order by text) "dense_rank", 
rank() over(order by text) "rank", 
row_number() over(order by text) "row_number", 
length(text)"length", t.*
from
(
select 1 x, lpad('000000vxvvxjty5', 1051, '0') text from dual
union 
select 2 x, lpad('0000000000frgegeg', 1051, '0') text from dual
)t
order by x
...
Рейтинг: 0 / 0
15.01.2018, 08:52
    #39584153
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dense_rank проверяет только первые 1000 символов?
...
Рейтинг: 0 / 0
15.01.2018, 08:53
    #39584154
dense_rank проверяет только первые 1000 символов?
fanat000,

ты его просто неправильно готовишь.... Нужно ведь чтобы строка была не 1000 байт длиной, а чуть больше....

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select 

dense_rank() over(order by text) "dense_rank", 
rank() over(order by text) "rank", 
row_number() over(order by text) "row_number", 
length(text)"length", t.*
from
(
select 1 x, lpad('0', 1000, '0')||'vxvvxjty5' text from dual
union 
select 2 x, lpad('0', 1000, '0')||'frgegeg' text from dual
)t
order by x
...
Рейтинг: 0 / 0
15.01.2018, 11:08
    #39584243
fanat000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dense_rank проверяет только первые 1000 символов?
спасибо всем за участие,
в будущем буду иметь ввиду данный нюанс.
...
Рейтинг: 0 / 0
15.01.2018, 11:08
    #39584244
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dense_rank проверяет только первые 1000 символов?
fanat000,

dense_rank() over(order
by text,substr(text,1000),substr(text,1999),substr(text,2998),substr(text,3997)) "dense_rank",


....
stax
...
Рейтинг: 0 / 0
15.01.2018, 11:16
    #39584251
fanat000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dense_rank проверяет только первые 1000 символов?
+1
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dense_rank проверяет только первые 1000 символов? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]