powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Баг с group-by to_char(date, ...) по первичному или уникальному ключу
7 сообщений из 7, страница 1 из 1
Баг с group-by to_char(date, ...) по первичному или уникальному ключу
    #40129623
Надфиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Намедни пристал разработчик с вопросом "как так?".
Я сначала не поверил, однако..
Очень странное поведение у 12 версии. (в 19 уже не воспроизводится). на других версиях не проверял.
при удалении первичного ключа,начинает работать, как ожидается.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table t (d date, n number, 
CONSTRAINT p primary key (d));

insert into t
select trunc(sysdate)+level,level from dual connect by level<50;


select to_char(d, 'IW') from t
group by to_char(d, 'IW');

select distinct to_char(d, 'IW') from t
group by to_char(d, 'IW');

select to_char(d, 'IW'),count(n) from t
group by to_char(d, 'IW');
...
Рейтинг: 0 / 0
Баг с group-by to_char(date, ...) по первичному или уникальному ключу
    #40129641
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надфиль
Намедни пристал разработчик с вопросом "как так?".
Я сначала не поверил, однако..
Очень странное поведение у 12 версии. (в 19 уже не воспроизводится). на других версиях не проверял.
при удалении первичного ключа,начинает работать, как ожидается.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table t (d date, n number, 
CONSTRAINT p primary key (d));

insert into t
select trunc(sysdate)+level,level from dual connect by level<50;


select to_char(d, 'IW') from t
group by to_char(d, 'IW');

select distinct to_char(d, 'IW') from t
group by to_char(d, 'IW');

select to_char(d, 'IW'),count(n) from t
group by to_char(d, 'IW');


Сложно сказать, не видя результатов и не зная конкретного PSU/RU. По структуре это: Bug 26588069 - Wrong Result (Duplicate Rows Produced) Using Group By After Upgrading To 12.2.0.1 (Doc ID 26588069.8)
...
Рейтинг: 0 / 0
Баг с group-by to_char(date, ...) по первичному или уникальному ключу
    #40129678
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надфиль
Намедни пристал разработчик с вопросом "как так?".
Я сначала не поверил, однако..
Очень странное поведение у 12 версии. (в 19 уже не воспроизводится). на других версиях не проверял.
при удалении первичного ключа, начинает работать, как ожидается.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table t (d date, n number, 
CONSTRAINT p primary key (d));

insert into t
select trunc(sysdate)+level,level from dual connect by level<50;

select to_char(d, 'IW') from t
group by to_char(d, 'IW');

select distinct to_char(d, 'IW') from t
group by to_char(d, 'IW');

select to_char(d, 'IW'),count(n) from t
group by to_char(d, 'IW');

Мой Crystall Ball сейчас на техобслуживании.

Что у вас не так получается?

выполнение приведенных команд на Oracle Database EE 19.14.0.1 (Always Free)
Код: 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.
56.
57.
58.
59.
SQL> create table t (d date, n number, 
  2  CONSTRAINT p primary key (d));
Table T created.

SQL> insert into t
  2  select trunc(sysdate)+level,level from dual connect by level<50;
49 rows inserted.

SQL> select to_char(d, 'IW') from t
  2  group by to_char(d, 'IW');

TO
--
09
08
05
06
04
10
07
11
8 rows selected. 

SQL> select distinct to_char(d, 'IW') from t
  2  group by to_char(d, 'IW');

TO
--
09
08
05
06
04
10
07
11
8 rows selected. 

SQL> select to_char(d, 'IW'),count(n) from t
  2  group by to_char(d, 'IW');

TO   COUNT(N)
-- ----------
09          7
08          7
05          7
06          7
04          4
10          7
07          7
11          3
8 rows selected. 

SQL> select banner_full from v$version;

BANNER_FULL                                                                                                                                                     
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.1.0


...
Рейтинг: 0 / 0
Баг с group-by to_char(date, ...) по первичному или уникальному ключу
    #40129684
Надфиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL*Plus,
Код: 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.
select  to_char(d, 'IW') from t
group by to_char(d, 'IW');


TO_CHAR(D,'IW')
04
04
04
04
05
05
05
05
05
05
05
06
06
06
06
06
06
06
07
07
07
07
07
07
07
08
08



другие запросы аналогично
оракал 12.2.0.1.0
...
Рейтинг: 0 / 0
Баг с group-by to_char(date, ...) по первичному или уникальному ключу
    #40129685
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Надфиль,

да, старый баг, у Льюиса он аж в нескольких постах был, вот самый последний: https://jonathanlewis.wordpress.com/2022/01/01/happy-new-year/
...
Рейтинг: 0 / 0
Баг с group-by to_char(date, ...) по первичному или уникальному ключу
    #40129687
Надфиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sayan Malakshinov,
да, это оно. забавно, но так можно очень где нибудь влететь)
...
Рейтинг: 0 / 0
Баг с group-by to_char(date, ...) по первичному или уникальному ключу
    #40129690
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Надфиль,

В общем патчитесь...
no_elim_groupby
Код: 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.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
SQL> create table t (d date, n number,
  2  CONSTRAINT p primary key (d));

Table created.

SQL>
SQL> insert into t
  2  select trunc(sysdate)+level,level from dual connect by level<50;

49 rows created.

SQL>
SQL> -- ========= Before
SQL> select to_char(d, 'IW') from t
  2  group by to_char(d, 'IW');

TO
--
04
04
04
04
05
05
05
05
05
05
05
06
06
06
06
06
06
06
07
07
07
07
07
07
07
08
08
08
08
08
08
08
09
09
09
09
09
09
09
10
10
10
10
10
10
10
11
11
11

49 rows selected.

SQL>
SQL> select distinct to_char(d, 'IW') from t
  2  group by to_char(d, 'IW');

TO
--
04
04
04
04
05
05
05
05
05
05
05
06
06
06
06
06
06
06
07
07
07
07
07
07
07
08
08
08
08
08
08
08
09
09
09
09
09
09
09
10
10
10
10
10
10
10
11
11
11

49 rows selected.

SQL>
SQL> select to_char(d, 'IW'),count(n) from t
  2  group by to_char(d, 'IW');

TO   COUNT(N)
-- ----------
04          1
04          1
04          1
04          1
05          1
05          1
05          1
05          1
05          1
05          1
05          1
06          1
06          1
06          1
06          1
06          1
06          1
06          1
07          1
07          1
07          1
07          1
07          1
07          1
07          1
08          1
08          1
08          1
08          1
08          1
08          1
08          1
09          1
09          1
09          1
09          1
09          1
09          1
09          1
10          1
10          1
10          1
10          1
10          1
10          1
10          1
11          1
11          1
11          1

49 rows selected.

SQL>
SQL> -- ========= with no_elim_groupby:
SQL>
SQL> select/*+ no_elim_groupby */ to_char(d, 'IW') from t
  2  group by to_char(d, 'IW');

TO
--
04
08
09
07
11
05
10
06

8 rows selected.

SQL>
SQL> select/*+ no_elim_groupby */ distinct to_char(d, 'IW') from t
  2  group by to_char(d, 'IW');

TO
--
04
08
09
07
11
05
10
06

8 rows selected.

SQL>
SQL> select/*+ no_elim_groupby */ to_char(d, 'IW'),count(n) from t
  2  group by to_char(d, 'IW');

TO   COUNT(N)
-- ----------
04          4
08          7
09          7
07          7
11          3
05          7
10          7
06          7

8 rows selected.

...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Баг с group-by to_char(date, ...) по первичному или уникальному ключу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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