Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Баг с group-by to_char(date, ...) по первичному или уникальному ключу / 7 сообщений из 7, страница 1 из 1
26.01.2022, 15:08
    #40129623
Надфиль
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Баг с group-by to_char(date, ...) по первичному или уникальному ключу
Намедни пристал разработчик с вопросом "как так?".
Я сначала не поверил, однако..
Очень странное поведение у 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
26.01.2022, 15:37
    #40129641
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Баг с group-by to_char(date, ...) по первичному или уникальному ключу
Надфиль
Намедни пристал разработчик с вопросом "как так?".
Я сначала не поверил, однако..
Очень странное поведение у 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
26.01.2022, 16:58
    #40129678
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Баг с group-by to_char(date, ...) по первичному или уникальному ключу
Надфиль
Намедни пристал разработчик с вопросом "как так?".
Я сначала не поверил, однако..
Очень странное поведение у 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
26.01.2022, 17:04
    #40129684
Надфиль
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Баг с group-by to_char(date, ...) по первичному или уникальному ключу
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
26.01.2022, 17:06
    #40129685
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Баг с group-by to_char(date, ...) по первичному или уникальному ключу
Надфиль,

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

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


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