Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 порядок обработки  [new]
grok
Member

Откуда:
Сообщений: 1686
есть запрос

select f1, my_pkg.myfunction(f1) ,max(f2) 
from t
group by f1


вопрос

что будет -
1) будет вызвано my_pkg.myfunction, потом сгруппировано
1) будет сгруппировано, потом вызвано my_pkg.myfunction
22 янв 13, 13:37    [13808901]     Ответить | Цитировать Сообщить модератору
 Re: порядок обработки  [new]
Cristiano_Rivaldo
Member

Откуда:
Сообщений: 346
Мне кажется вариант №1 (сначала работает select, потом только group by). Причем операции группировки, сортировки проходят в PGA (т.е. в памяти)
22 янв 13, 13:51    [13809058]     Ответить | Цитировать Сообщить модератору
 Re: порядок обработки  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
grok,
в функции поместите dbms_output, и сами всё узнаете.
22 янв 13, 13:53    [13809074]     Ответить | Цитировать Сообщить модератору
 Re: порядок обработки  [new]
OldBoyOdeSu
Member

Откуда: и куда?
Сообщений: 202
grok,

create or replace 
PACKAGE my_pkg
IS
   FUNCTION myfunction(p_value integer)return integer;
END; -- Package spec
/


create or replace 
PACKAGE BODY my_pkg
IS
  function myfunction(p_value integer)return integer
  is
  begin
    DBMS_OUTPUT.Put_Line('[param:'||to_char(p_value)||']');  
    return p_value;
  end;
END;
/

create table t
    (id                             number,
    value                          number);

INSERT INTO t
("ID","VALUE")
VALUES
(5,0)
/
INSERT INTO t
("ID","VALUE")
VALUES
(5,1)
/
INSERT INTO t
("ID","VALUE")
VALUES
(3,3)
/
INSERT INTO t
("ID","VALUE")
VALUES
(3,2)
/
INSERT INTO t
("ID","VALUE")
VALUES
(1,3)
/
INSERT INTO t
("ID","VALUE")
VALUES
(1,2)
/
INSERT INTO t
("ID","VALUE")
VALUES
(1,1)
/
commit;


select id, my_pkg.myfunction(id) ,max(value) 
from t
group by id;

[param:1]
[param:5]
[param:3]
22 янв 13, 14:01    [13809132]     Ответить | Цитировать Сообщить модератору
 Re: порядок обработки  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
ну, можно и добиться () чтобы функция раньше группировки сработала - например в where кляузу её
засунуть
22 янв 13, 14:24    [13809349]     Ответить | Цитировать Сообщить модератору
 Re: порядок обработки  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34630
grok,

Не определенно, может быть как угодно.
Только что как раз на это напарывались.
23 янв 13, 00:46    [13812688]     Ответить | Цитировать Сообщить модератору
 Re: порядок обработки  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
MasterZiv
Не определенно, может быть как угодно.
Только что как раз на это напарывались.


А пример можно? А то я по наивности считал что как-раз определено. И выполнение до группировки вызвало бы not a group by expression.

SY.
23 янв 13, 17:40    [13817166]     Ответить | Цитировать Сообщить модератору
 Re: порядок обработки  [new]
OldBoyOdeSu
Member

Откуда: и куда?
Сообщений: 202
MasterZiv,

ага, тоже интересно, я просто не стал спрашивать чтоб дураком не выглядеть, так и думал что кто-то посолидней поинтересуется если это действительно подозрительное утверждение
понятное дело например если есть order by к примеру, то вначале функция вызывается а потом сортировка, или запрос хитрый, но конкретно для этого запроса я думаю порядок определён и постоянен
23 янв 13, 19:36    [13817743]     Ответить | Цитировать Сообщить модератору
 Re: порядок обработки  [new]
abtop_
Member

Откуда:
Сообщений: 16
вот в таком порядке все выполняется:
order by( select (having ( group by (where ( from )
)
)
)
)

делайте выводы.

если не прав, не гневитесь... )
23 янв 13, 23:32    [13818578]     Ответить | Цитировать Сообщить модератору
 Re: порядок обработки  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
SY
MasterZiv
Не определенно, может быть как угодно.
Только что как раз на это напарывались.


А пример можно? А то я по наивности считал что как-раз определено. И выполнение до группировки вызвало бы not a group by expression.

SY.
Раз + Два
23 янв 13, 23:52    [13818667]     Ответить | Цитировать Сообщить модератору
 Re: порядок обработки  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
dbms_photoshop
Раз+Два


Раз - это баг в случае функции либо без аргумента либо аргумент константа. В данном случае аргумент поле таблицы над которой производится group by.

Два - я там сказал: мой Пример - brain fart, а сабж вообще с данным вопросом ничего общего не имеет.

SY.
24 янв 13, 01:44    [13818946]     Ответить | Цитировать Сообщить модератору
 Re: порядок обработки  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
SY,

В принципе, да, по моим ссылкам полуоффтоп и суть в том, что функция в вопросе ТС должна считаться после группировки.
Смысл обеих ссылок в том, что достаточно много багов в случае соединения с inline view, содержащей group by.
24 янв 13, 02:27    [13818998]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить