powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как переписать это с Oракла на PostgreSQL?
18 сообщений из 18, страница 1 из 1
Как переписать это с Oракла на PostgreSQL?
    #34335439
alosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select count(1) over() SESSION_COUNT
into v_Result
from LOGGED_SESSION
where USER_TYPE = pUSER_TYPE
and LOGIN_DATE >= pLOGIN_DATE_FROM
and LOGIN_DATE <= pLOGIN_DATE_TO
group by USER_ID;
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335442
alosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aloshaselect count(1) over() SESSION_COUNT
into v_Result
from LOGGED_SESSION
where USER_TYPE = pUSER_TYPE
and LOGIN_DATE >= pLOGIN_DATE_FROM
and LOGIN_DATE <= pLOGIN_DATE_TO
group by USER_ID;

меня интересует вот эта строчка: select count(1) over() SESSION_COUNT
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335455
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alosha aloshaselect count(1) over() SESSION_COUNT
into v_Result
from LOGGED_SESSION
where USER_TYPE = pUSER_TYPE
and LOGIN_DATE >= pLOGIN_DATE_FROM
and LOGIN_DATE <= pLOGIN_DATE_TO
group by USER_ID;

меня интересует вот эта строчка: select count(1) over() SESSION_COUNT
В PostgreSQL нет аналитического SQL,
поэтому замени count(1) over() на скалярный подзапрос к таблице LOGGED_SESSION
с count(distinct USER_ID) и таким же WHERE-clause, как и у основного запроса.
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335456
alosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бабичев Сергей alosha aloshaselect count(1) over() SESSION_COUNT
into v_Result
from LOGGED_SESSION
where USER_TYPE = pUSER_TYPE
and LOGIN_DATE >= pLOGIN_DATE_FROM
and LOGIN_DATE <= pLOGIN_DATE_TO
group by USER_ID;

меня интересует вот эта строчка: select count(1) over() SESSION_COUNT
В PostgreSQL нет аналитического SQL,
поэтому замени count(1) over() на скалярный подзапрос к таблице LOGGED_SESSION
с count(distinct USER_ID) и таким же WHERE-clause, как и у основного запроса.

можешь написать как это будет выглядить? Не могу понять.
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335523
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aloshaможешь написать как это будет выглядить? Не могу понять.А чего тут понимать-то?
Что ли не можешь заменить count(1) over() на count(distinct USER_ID) и убрать GROUP BY из своего запроса?
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335557
alosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бабичев Сергей aloshaможешь написать как это будет выглядить? Не могу понять.А чего тут понимать-то?
Что ли не можешь заменить count(1) over() на count(distinct USER_ID) и убрать GROUP BY из своего запроса?

Так можно?
select count(*) as SESSION_COUNT into v_Result
from LOGGED_SESSION
where USER_TYPE = pUSER_TYPE
and LOGIN_DATE >= pLOGIN_DATE_FROM
and LOGIN_DATE <= pLOGIN_DATE_TO
group by USER_ID;
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335593
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aloshaТак можно?
select count(*) as SESSION_COUNT into v_Result
from LOGGED_SESSION
where USER_TYPE = pUSER_TYPE
and LOGIN_DATE >= pLOGIN_DATE_FROM
and LOGIN_DATE <= pLOGIN_DATE_TO
group by USER_ID;Я же тебе сказал - GROUP BY нужно нафиг выкинуть.

А вообще, ты лучше на словах научись формулировать свои мысли, а не кусками кода их демострировать.
Вообще говоря, что бы получить запрос, совершенно эквивалентный твоему запрос по получаемому результату, то его нужно вот так написать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select (
         select count(distinct USER_ID)
          from LOGGED_SESSION
         where USER_TYPE = pUSER_TYPE
           and LOGIN_DATE >= pLOGIN_DATE_FROM
           and LOGIN_DATE <= pLOGIN_DATE_TO
       )
  into v_Result
  from LOGGED_SESSION
 where USER_TYPE = pUSER_TYPE
   and LOGIN_DATE >= pLOGIN_DATE_FROM
   and LOGIN_DATE <= pLOGIN_DATE_TO
 group by USER_ID;
Вот только я не понял, как ты собираешься засунуть многострочный результат в скалярную переменную?
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335617
alosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бабичев Сергей aloshaТак можно?
select count(*) as SESSION_COUNT into v_Result
from LOGGED_SESSION
where USER_TYPE = pUSER_TYPE
and LOGIN_DATE >= pLOGIN_DATE_FROM
and LOGIN_DATE <= pLOGIN_DATE_TO
group by USER_ID;Я же тебе сказал - GROUP BY нужно нафиг выкинуть.

А вообще, ты лучше на словах научись формулировать свои мысли, а не кусками кода их демострировать.
Вообще говоря, что бы получить запрос, совершенно эквивалентный твоему запрос по получаемому результату, то его нужно вот так написать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select (
         select count(distinct USER_ID)
          from LOGGED_SESSION
         where USER_TYPE = pUSER_TYPE
           and LOGIN_DATE >= pLOGIN_DATE_FROM
           and LOGIN_DATE <= pLOGIN_DATE_TO
       )
  into v_Result
  from LOGGED_SESSION
 where USER_TYPE = pUSER_TYPE
   and LOGIN_DATE >= pLOGIN_DATE_FROM
   and LOGIN_DATE <= pLOGIN_DATE_TO
 group by USER_ID;
Вот только я не понял, как ты собираешься засунуть многострочный результат в скалярную переменную?

Ну смотри. Первый подзапрос выведет число count(distinct USER_ID). Потом ето число запишется в v_Result. В чем проблема?
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335656
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aloshaНу смотри. Первый подзапрос выведет число count(distinct USER_ID). Потом ето число запишется в v_Result. В чем проблема?Да я-то смотрю. Вот ты привел изначально пример из Oracle. Но на Oracle такой пример не будет работать.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
*** SCRIPT START :  Session:TEST@TEST( 1 )    16 -фев- 2007   14 : 17 : 13  *** 
Processing ...
declare 
   v_Result number :=  0 ;
begin
   select count( 1 ) over() SESSION_COUNT
     into v_Result
     from v$session
     where username is not null
     group by username;
end;
declare 
*
ORA- 01422 : exact fetch returns more than requested number of rows
ORA- 06512 : at line  4 
*** Script stopped due to error ***
Вот мне и интересно, что же ты пыташься сделать на самом деле...
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335686
alosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Функция на Оракле выглядт вот так
function getSessionsCountCntByFilter(
pUSER_TYPE LOGGED_SESSION.USER_TYPE%TYPE,
pLOGIN_DATE_FROM LOGGED_SESSION.LOGIN_DATE%TYPE,
pLOGIN_DATE_TO LOGGED_SESSION.LOGIN_DATE%TYPE,
pUSER_TABLE STRING_TABLE default NULL
) return NUMBER is
v_Result NUMBER;
begin
if (pUSER_TABLE is null) then
select count(1) over() SESSION_COUNT
into v_Result
from LOGGED_SESSION
where USER_TYPE = pUSER_TYPE
and LOGIN_DATE >= pLOGIN_DATE_FROM
and LOGIN_DATE <= pLOGIN_DATE_TO
group by USER_ID;
else
select count(1) over() SESSION_COUNT
into v_Result
from LOGGED_SESSION
where USER_TYPE = pUSER_TYPE
and LOGIN_DATE >= pLOGIN_DATE_FROM
and LOGIN_DATE <= pLOGIN_DATE_TO
and USER_ID in (select column_value from table(cast(pUSER_TABLE as STRING_TABLE)))
group by USER_ID;
end if;
return v_Result;
exception
when NO_DATA_FOUND then
return 0;
when TOO_MANY_ROWS then
return v_Result;
end;

М не надо ее переделать на PostgreSQL. Она на Оракле работает.
Я вот не пойму зачем ты делаешь двойной запрос:


select (
select count(distinct USER_ID)
from LOGGED_SESSION
where USER_TYPE = pUSER_TYPE
and LOGIN_DATE >= pLOGIN_DATE_FROM
and LOGIN_DATE <= pLOGIN_DATE_TO
)
into v_Result
from LOGGED_SESSION
where USER_TYPE = pUSER_TYPE
and LOGIN_DATE >= pLOGIN_DATE_FROM
and LOGIN_DATE <= pLOGIN_DATE_TO
group by USER_ID;


Нельзя ли просто написать вместо всего следующее выражение? Что не правильно?:

select count(*) as SESSION_COUNT into v_Result
from LOGGED_SESSION
where USER_TYPE = pUSER_TYPE
and LOGIN_DATE >= pLOGIN_DATE_FROM
and LOGIN_DATE <= pLOGIN_DATE_TO
group by USER_ID;
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335692
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aloshaЯ вот не пойму зачем ты делаешь двойной запрос:Выполни оба запроса (пока ещё просто запроса, не надо пихать их в функцию) на наборе данных, в котором более одного USER_ID, найди N-отличий...
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335699
alosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бабичев Сергей aloshaЯ вот не пойму зачем ты делаешь двойной запрос:Выполни оба запроса (пока ещё просто запроса, не надо пихать их в функцию) на наборе данных, в котором более одного USER_ID, найди N-отличий...

Слушай, у меня к тебе еще один вопрос. Видишь в функции есть exception? Это можно как нибудь переделать на PostgreSQL?
У тебя ICQ работает?
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335746
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сути - она коряво реализована и в оракле. Не вижу смысла переводить эту корявость в постгре. Кстати, исключение NO_DATA_FOUND в этой функции вообще никогда не возникнет, поэтому смысл его перехвата и обработки лично мне совершенно непонятен.
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335756
alosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бабичев СергейПо сути - она коряво реализована и в оракле. Не вижу смысла переводить эту корявость в постгре. Кстати, исключение NO_DATA_FOUND в этой функции вообще никогда не возникнет, поэтому смысл его перехвата и обработки лично мне совершенно непонятен.

А другое исключение сработать же может? Как его переделать не знаешь?
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335759
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бабичев СергейПо сути - она коряво реализована и в оракле. Не вижу смысла переводить эту корявость в постгре. Кстати, исключение NO_DATA_FOUND в этой функции вообще никогда не возникнет, поэтому смысл его перехвата и обработки лично мне совершенно непонятен.Пардон, таки оно будет возникать.
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335772
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aloshaКак его переделать не знаешь?Подумай над тем, что делает эта функция.
И тебе всё станет ясно.
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335793
alosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бабичев Сергей aloshaКак его переделать не знаешь?Подумай над тем, что делает эта функция.
И тебе всё станет ясно.

спасибо большое , буду разбираться сидеть :-)
...
Рейтинг: 0 / 0
Как переписать это с Oракла на PostgreSQL?
    #34335845
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aloshaспасибо большое , буду разбираться сидеть :-)"Лучше день потерять, зато потОм за пять минут долететь!" (с)
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как переписать это с Oракла на PostgreSQL?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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