powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / ORACLE против SQL. Разные результаты. Кто поможет?
16 сообщений из 16, страница 1 из 1
ORACLE против SQL. Разные результаты. Кто поможет?
    #38432147
HResult
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый LR предложил остроумный способ динамической сегментации на сервере. Он нормально работает на MS SQL.
Но когда попробовал на ORACLE - совсем другие результаты.

Итак, MS SQL
Код: 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.
with tt as (
select 0 as st ,    35.853 as finish,    1 as weight union all
select 35.853,    18265.49,    10  union all
select 18265.487,    18267.474,    1  union all
select 18267.474,    19661.324,    10  union all
select 19661.324,    19670.246,    1  union all
select 19670.246,    19728.048,    10  union all
select 19728.048,    19739.708,    1  union all
select 19739.708,    22528.106,    10  union all
select 22528.106,    22530.145,    1  union all
select 22530.145,    29864.117,    10  union all
select 29864.117,    29866.117,    1  union all
select 29866.117,    70695.245,    10  union all
select 70695.245,    70697.306,    1  union all
select 70697.306,    96866.3,    10  union all
select 96866.303,    96906.59,    1  union all
select 24675.6,    26656.2,    8  union all
select 35462.84,    35462.85,    3  union all
select 53701.851,    53701.86,    3  union all
select 53702.071,    53702.08,    3 
),
cte as (
select p.x, p.leftweight + ISNULL(sum(t.weight),0) as leftweight, 
       p.rightweight + ISNULL(sum(t.weight),0) as rightweight, 
       row_number() over (order by p.x) as ord 
from (
    select v.x, sum(v.lweight) leftweight, sum(v.rweight) rightweight from (
        select st x, 0 as lweight, weight rweight from tt union all
        select finish, weight, 0 from tt
    ) v group by v.x
) p left join tt t on p.x > t.st and p.x < t.finish 
group by p.x, p.leftweight, p.rightweight
)
SELECT  ISNULL(e2.x, 0) Start, e1.x Finish, e2.leftweight, e2.rightweight
FROM cte e1 left join cte e2 on e1.ord-1=e2.ord
Where e1.x>e2.x



Результат MS SQL (считаю правильный):
startfinishleftweightrightweight0.000 35.8530135.85318265.48711018265.48718265.490101118265.49018267.47411118267.47419661.32411019661.32419670.24610119670.24619728.04811019728.04819739.70810119739.70822528.10611022528.10622530.14510122530.14524675.60011024675.60026656.200101826656.20029864.117181029864.11729866.11710129866.11735462.84011035462.84035462.850101335462.85053701.851131053701.85153701.860101353701.86053702.071131053702.07153702.080101353702.08070695.245131070695.24570697.30610170697.30696866.30011096866.30096866.30310096866.30396906.59001

Вот ORACLE
Код: 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.
with tt as (
select 0 as st ,    35.853 as finish,    1 as weight FROM  DUAL union all
select 35.853,    18265.49,    10 FROM  DUAL  union all
select 18265.487,    18267.474,    1 FROM  DUAL  union all
select 18267.474,    19661.324,    10 FROM  DUAL  union all
select 19661.324,    19670.246,    1 FROM  DUAL  union all
select 19670.246,    19728.048,    10 FROM  DUAL  union all
select 19728.048,    19739.708,    1 FROM  DUAL  union all
select 19739.708,    22528.106,    10 FROM  DUAL  union all
select 22528.106,    22530.145,    1 FROM  DUAL  union all
select 22530.145,    29864.117,    10 FROM  DUAL  union all
select 29864.117,    29866.117,    1 FROM  DUAL  union all
select 29866.117,    70695.245,    10 FROM  DUAL  union all
select 70695.245,    70697.306,    1 FROM  DUAL  union all
select 70697.306,    96866.3,    10 FROM  DUAL  union all
select 96866.303,    96906.59,    1 FROM  DUAL  union all
select 24675.6,    26656.2,    8 FROM  DUAL  union all
select 35462.84,    35462.85,    3 FROM  DUAL  union all
select 53701.851,    53701.86,    3 FROM  DUAL  union all
select 53702.071,    53702.08,    3 FROM  DUAL 
),
cte as (
select p.x, p.leftweight + nvl(sum(t.weight),0) as leftweight, 
       p.rightweight + nvl(sum(t.weight),0) as rightweight, 
       row_number() over (order by p.x) as ord 
from (
    select v.x, sum(v.lweight) leftweight, sum(v.rweight) rightweight from (
        select st x, 0 as lweight, weight rweight from tt union all
        select finish, weight, 0 from tt
    ) v group by v.x
) p left join tt t on p.x > t.st and p.x < t.finish 
group by p.x, p.leftweight, p.rightweight
)
SELECT  nvl(e2.x, 0) Start, e1.x Аштшыр, e2.leftweight, e2.rightweight
FROM cte e1 left join cte e2 on e1.ord-1=e2.ord
Where e1.x>e2.x



Результаты (если MS SQL можно еще проверять, то тут точно дрова)
STARTFINISHLEFTWEIGHTRIGHTWEIGHT0 35.853 0 135.853 18265.487 1 1018265.487 18265.49 0 118265.49 18267.474 10 018267.474 19661.324 1 1019661.324 19670.246 10 119670.246 19728.048 1 1019728.048 19739.708 10 119739.708 22528.106 1 1022528.106 22530.145 10 122530.145 24675.6 1 1024675.6 26656.2 0 826656.2 29864.117 8 029864.117 29866.117 10 129866.117 35462.84 1 1035462.84 35462.85 0 335462.85 53701.851 3 053701.851 53701.86 0 353701.86 53702.071 3 053702.071 53702.08 0 353702.08 70695.245 3 070695.245 70697.306 10 170697.306 96866.3 1 1096866.3 96866.303 10 096866.303 96906.59 0 1

Вроде все сделал аккуратно - запрос один в один. Вроде.
Что опять такого в ORACLE?

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
ORACLE против SQL. Разные результаты. Кто поможет?
    #38432152
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HResult,

А что не так? По-моему идентично.
...
Рейтинг: 0 / 0
ORACLE против SQL. Разные результаты. Кто поможет?
    #38432164
HResult
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой, там же все не так.
Обратите внимание на leftweight и rightweight. Это суммы весов входящих отрезков в начале и в конце каждого агрегированного.
Они совсем разные, а в них вся соль.
Гляньте на оригинальный пост 14962312

Я потратил кучу времени на реальных данных в поисках причин, пока не догадался составить запросы на константах и выполнить в чистом виде в обоих средах.
И нате Вам.
Честно говоря, потрясен.
...
Рейтинг: 0 / 0
ORACLE против SQL. Разные результаты. Кто поможет?
    #38432165
HResultОй, там же все не так.
Обратите внимание на leftweight и rightweight. Это суммы весов входящих отрезков в начале и в конце каждого агрегированного.
Они совсем разные, а в них вся соль.
Гляньте на оригинальный пост 14962312

Я потратил кучу времени на реальных данных в поисках причин, пока не догадался составить запросы на константах и выполнить в чистом виде в обоих средах.
И нате Вам.
Честно говоря, потрясен.

Пупсик, ты не потрясайся, а выполни свои запросы еще раз.

Вот тот SQL, что для Oracle - возвращает аккурат то, что ото у тебя в первой таблице, а не во второй (если слово start заменить и ото Аштшыр).

Ты походу в копипасте запутался, бедолашный.
...
Рейтинг: 0 / 0
ORACLE против SQL. Разные результаты. Кто поможет?
    #38432167
HResult
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Капитан очевидность на проводеHResultОй, там же все не так.
Обратите внимание на leftweight и rightweight. Это суммы весов входящих отрезков в начале и в конце каждого агрегированного.
Они совсем разные, а в них вся соль.
Гляньте на оригинальный пост 14962312

Я потратил кучу времени на реальных данных в поисках причин, пока не догадался составить запросы на константах и выполнить в чистом виде в обоих средах.
И нате Вам.
Честно говоря, потрясен.

Пупсик, ты не потрясайся, а выполни свои запросы еще раз.

Вот тот SQL, что для Oracle - возвращает аккурат то, что ото у тебя в первой таблице, а не во второй (если слово start заменить и ото Аштшыр).

Ты походу в копипасте запутался, бедолашный.
Это как раз не копипаст, а совсем наоборот.
Я написал FINISH на русской раскладке. Без копипаста. Да, смешно.
Но это не должно смущать королей арены.
Если есть сомнения - выложите Ваш вариант, который таки дает правильный результат.
...
Рейтинг: 0 / 0
ORACLE против SQL. Разные результаты. Кто поможет?
    #38432172
HResult
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этот запрос без русских буков, но с тем же мусором в результате.
Код: 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.
with tt as (
select 0 as st ,    35.853 as finish,    1 as weight FROM  DUAL union all
select 35.853,    18265.49,    10 FROM  DUAL  union all
select 18265.487,    18267.474,    1 FROM  DUAL  union all
select 18267.474,    19661.324,    10 FROM  DUAL  union all
select 19661.324,    19670.246,    1 FROM  DUAL  union all
select 19670.246,    19728.048,    10 FROM  DUAL  union all
select 19728.048,    19739.708,    1 FROM  DUAL  union all
select 19739.708,    22528.106,    10 FROM  DUAL  union all
select 22528.106,    22530.145,    1 FROM  DUAL  union all
select 22530.145,    29864.117,    10 FROM  DUAL  union all
select 29864.117,    29866.117,    1 FROM  DUAL  union all
select 29866.117,    70695.245,    10 FROM  DUAL  union all
select 70695.245,    70697.306,    1 FROM  DUAL  union all
select 70697.306,    96866.3,    10 FROM  DUAL  union all
select 96866.303,    96906.59,    1 FROM  DUAL  union all
select 24675.6,    26656.2,    8 FROM  DUAL  union all
select 35462.84,    35462.85,    3 FROM  DUAL  union all
select 53701.851,    53701.86,    3 FROM  DUAL  union all
select 53702.071,    53702.08,    3 FROM  DUAL 
),
cte as (
select p.x, p.leftweight + nvl(sum(t.weight),0) as leftweight, 
       p.rightweight + nvl(sum(t.weight),0) as rightweight, 
       row_number() over (order by p.x) as ord 
from (
    select v.x, sum(v.lweight) leftweight, sum(v.rweight) rightweight from (
        select st x, 0 as lweight, weight rweight from tt union all
        select finish, weight, 0 from tt
    ) v group by v.x
) p left join tt t on p.x > t.st and p.x < t.finish 
group by p.x, p.leftweight, p.rightweight
)
SELECT  nvl(e2.x, 0) nmStart, e1.x nmEnd, e2.leftweight, e2.rightweight
FROM cte e1 left join cte e2 on e1.ord-1=e2.ord
Where e1.x>e2.x
...
Рейтинг: 0 / 0
ORACLE против SQL. Разные результаты. Кто поможет?
    #38432343
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я не увидел отличий, последий запрос выдает идентичную первой таблице
...
Рейтинг: 0 / 0
ORACLE против SQL. Разные результаты. Кто поможет?
    #38432406
HResultЭтот запрос без русских буков, но с тем же мусором в результате.



Вот результат из свежего Oracle. Тыкни конкретно, где там мусор то?

Код: plaintext
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.
NMSTART	NMEND	LEFTWEIGHT	RIGHTWEIGHT
0	35.853	0	1
35.853	18265.487	1	10
18265.487	18265.49	10	11
18265.49	18267.474	11	1
18267.474	19661.324	1	10
19661.324	19670.246	10	1
19670.246	19728.048	1	10
19728.048	19739.708	10	1
19739.708	22528.106	1	10
22528.106	22530.145	10	1
22530.145	24675.6	1	10
24675.6	26656.2	10	18
26656.2	29864.117	18	10
29864.117	29866.117	10	1
29866.117	35462.84	1	10
35462.84	35462.85	10	13
35462.85	53701.851	13	10
53701.851	53701.86	10	13
53701.86	53702.071	13	10
53702.071	53702.08	10	13
53702.08	70695.245	13	10
70695.245	70697.306	10	1
70697.306	96866.3	1	10
96866.3	96866.303	10	0
96866.303	96906.59	0	1
...
Рейтинг: 0 / 0
ORACLE против SQL. Разные результаты. Кто поможет?
    #38432494
HResult
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Капитан очевидность,
Ну, это совершенно другое дело. Спасибо.
Вопрос только, что такое "свежий"? У меня, вроде, 10g. (Надо спросить спецов).
Это как, свежий? Насколько?
И как может "свежесть" влиять на абсолютно детерменированный запрос?
Потому, что на моей стороне ничего не поменялось.

NMSTARTNMENDLEFTWEIGHTRIGHTWEIGHT035.8530135.85318265.48711018265.48718265.490118265.4918267.47410018267.47419661.32411019661.32419670.24610119670.24619728.04811019728.04819739.70810119739.70822528.10611022528.10622530.14510122530.14524675.611024675.626656.20826656.229864.1178029864.11729866.11710129866.11735462.8411035462.8435462.850335462.8553701.8513053701.85153701.860353701.8653702.0713053702.07153702.080353702.0870695.2453070695.24570697.30610170697.30696866.311096866.396866.30310096866.30396906.5901
И что потенциально может повлиять?
...
Рейтинг: 0 / 0
ORACLE против SQL. Разные результаты. Кто поможет?
    #38432510
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HResult,

select * from v$version;

у меня на Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit другой результат

Код: plaintext
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.
0	35.853	0	1
35.853	18265.487	1	10
18265.487	18265.49	10	11
18265.49	18267.474	11	1
18267.474	19661.324	1	10
19661.324	19670.246	10	1
19670.246	19728.048	1	10
19728.048	19739.708	10	1
19739.708	22528.106	1	10
22528.106	22530.145	10	1
22530.145	24675.6	1	10
24675.6	26656.2	10	18
26656.2	29864.117	18	10
29864.117	29866.117	10	1
29866.117	35462.84	1	10
35462.84	35462.85	10	13
35462.85	53701.851	13	10
53701.851	53701.86	10	13
53701.86	53702.071	13	10
53702.071	53702.08	10	13
53702.08	70695.245	13	10
70695.245	70697.306	10	1
70697.306	96866.3	1	10
96866.3	96866.303	10	0
96866.303	96906.59	0	1
...
Рейтинг: 0 / 0
ORACLE против SQL. Разные результаты. Кто поможет?
    #38432553
HResult
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за подсказку. Вот что мне дает:

Oracle Database 10g Release 10.2.0.3.0
PL/SQL Release 10.2.0.3.0
CORE 10.2.0.3.0
TNS for 32-bit Windows: Version 10.2.0.3.0
NLSRTL Version 10.2.0.3.0
...
Рейтинг: 0 / 0
ORACLE против SQL. Разные результаты. Кто поможет?
    #38432718
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HResultСпасибо за подсказку. Вот что мне дает:

Oracle Database 10g Release 10.2.0.3.0
PL/SQL Release 10.2.0.3.0
CORE 10.2.0.3.0
TNS for 32-bit Windows: Version 10.2.0.3.0
NLSRTL Version 10.2.0.3.0

10.2.0.3.0 было пара неприятных багов, помниться у меня jdbc молча возвращал меньше строк, чем реально было в курсоре. ставьте патч скорей.
...
Рейтинг: 0 / 0
ORACLE против SQL. Разные результаты. Кто поможет?
    #38432740
HResult
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!HResultСпасибо за подсказку. Вот что мне дает:

Oracle Database 10g Release 10.2.0.3.0
PL/SQL Release 10.2.0.3.0
CORE 10.2.0.3.0
TNS for 32-bit Windows: Version 10.2.0.3.0
NLSRTL Version 10.2.0.3.0

10.2.0.3.0 было пара неприятных багов, помниться у меня jdbc молча возвращал меньше строк, чем реально было в курсоре. ставьте патч скорей.
Спасибо, пошел топтать айтишников.
...
Рейтинг: 0 / 0
ORACLE против SQL. Разные результаты. Кто поможет?
    #38432798
HResult
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На 10.2.0.4.0 все работает, как должно. Айтишники уволены.

Спасибо всем большое.
...
Рейтинг: 0 / 0
ORACLE против SQL. Разные результаты. Кто поможет?
    #38552198
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, у вас так и задумано, но "Where e1.x>e2.x" превращает ваш "left join" в "inner join", и гипотетически вы получаете не те цифры, что ожидаете. И в mssql, и в oracle.
...
Рейтинг: 0 / 0
ORACLE против SQL. Разные результаты. Кто поможет?
    #38554282
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HResultНа 10.2.0.4.0 все работает, как должно. Айтишники уволены.

Спасибо всем большое.

а ты сам-то кто?
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / ORACLE против SQL. Разные результаты. Кто поможет?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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