Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 сложный select перенести на Pl/SQL  [new]
Jhon
Member

Откуда:
Сообщений: 93
Доброе время суток всем!
есть такой запрос
select a.*, b.* from
 (select   table1.col1,  table1.NAME, 
 FROM table2,table1
 Where ((table2.ID_table1 = table1.ID_table1) 
    group by table1.col1,table1.NAME
Having (table1.col1 <> 0))
  a, (select  table1.col1,table2.col. 

    round( sum( decode(table2.clo3/1000, null)), +2) JAN,
    round( sum( decode(table2.clo3/1000, null) FEB,
    round( sum( decode(TO_CHAR(table2.clo3/1000, null) MAR,
    ....
   round( sum( decode(TO_CHAR(table2.clo3/1000, null) des, 

 Where ( (TO_CHAR(DATA,'rrrr') = :year)
 (table2.ID_table1 = table1.ID_table1) 
    group by table1.col1, table1.NAME
 Having (table1.col1 <> 0))
 b where a.col1 = b.col1(+)
работает правильно и замечательно.. но нужно его перетащить его на pl|SQL , как это сделать правильно?
если можно по подолбнее раскажите..
нету опыта работы с курсорами и коллекциями:(
16 янв 09, 09:17    [6694433]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
__vvp_
Member

Откуда: Санкт-Петербург
Сообщений: 1158
Jhon,

Какая версия базы и для каких целей перенос? Клиент какой?
16 янв 09, 09:21    [6694443]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
SQ(L)uash
Guest
__vvp_, что же мешает самому изучить эту тему?
16 янв 09, 09:44    [6694520]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
Jhon
Member

Откуда:
Сообщений: 93
база oracle 9.2.
Клент, BDS2006 цепляюсь через ODAC..
16 янв 09, 09:55    [6694586]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
Jhon
Member

Откуда:
Сообщений: 93
пользователей увеличилось , удобство сопровождения и расширение функционала..
16 янв 09, 09:57    [6694602]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
__vvp_
Member

Откуда: Санкт-Петербург
Сообщений: 1158
Jhon,
типа этого
procedure proc1(year in number, rc out sys_refcurcor) is
begin

open rc for
select a.*, b.* from
 (select   table1.col1,  table1.NAME, 
 FROM table2,table1
 Where ((table2.ID_table1 = table1.ID_table1) 
    group by table1.col1,table1.NAME
Having (table1.col1 <> 0))
  a, (select  table1.col1,table2.col. 

    round( sum( decode(table2.clo3/1000, null)), +2) JAN,
    round( sum( decode(table2.clo3/1000, null) FEB,
    round( sum( decode(TO_CHAR(table2.clo3/1000, null) MAR,
    ....
   round( sum( decode(TO_CHAR(table2.clo3/1000, null) des, 

 Where ( (TO_CHAR(DATA,'rrrr') = year)
 (table2.ID_table1 = table1.ID_table1) 
    group by table1.col1, table1.NAME
 Having (table1.col1 <> 0))
 b where a.col1 = b.col1(+);

end;
16 янв 09, 10:41    [6694887]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
__vvp_
Member

Откуда: Санкт-Петербург
Сообщений: 1158
sys_refcursor
__vvp_
Jhon,
типа этого
procedure proc1(year in number, rc out sys_refcursor) is
begin
...
16 янв 09, 10:42    [6694907]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
Jhon
Member

Откуда:
Сообщений: 93
сделал, только не процедуру, а функцию..
select * from table (my_test(2008));
грит, что не может получить доступ ко вложенным строкам таблицы..
16 янв 09, 12:09    [6695690]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
__vvp_
Member

Откуда: Санкт-Петербург
Сообщений: 1158
Jhon,

Зачем Вы делаете select из refcorsor-а?

Читайте доку ODAC

Недавно обсуждалось

На форум Delphi Вам дорога :)
16 янв 09, 12:17    [6695739]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
__vvp_
Member

Откуда: Санкт-Петербург
Сообщений: 1158
Jhon,

Поиск
16 янв 09, 12:21    [6695775]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
Jhon
Member

Откуда:
Сообщений: 93
мне нужно , именно селект из функциии сделать..
уже понял, что надо сделать тип.. сделал..
но не получается функцию скомпилить..
много таблиц..
16 янв 09, 13:50    [6696489]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
Алымов Анатолий
Member

Откуда: Оренбург
Сообщений: 1309
смотрите в сторону pipeline-функций
16 янв 09, 14:14    [6696694]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
__vvp_
Member

Откуда: Санкт-Петербург
Сообщений: 1158
Jhon
мне нужно , именно селект из функциии сделать..
уже понял, что надо сделать тип.. сделал..
но не получается функцию скомпилить..
много таблиц..


Можете объяснить зачем Вам запрос из функции?
Вы его с клиента будете запрашивать или из другого PL/SQL модуля?
Если с клиента, то и запрашивайте свой сложный select с него.

Заниматься объектными типами для этих целей можно, но зачем!
16 янв 09, 15:13    [6697210]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
Jhon
Member

Откуда:
Сообщений: 93
__vvp_
Jhon
мне нужно , именно селект из функциии сделать..
уже понял, что надо сделать тип.. сделал..
но не получается функцию скомпилить..
много таблиц..


Можете объяснить зачем Вам запрос из функции?
Вы его с клиента будете запрашивать или из другого PL/SQL модуля?
Если с клиента, то и запрашивайте свой сложный select с него.

Заниматься объектными типами для этих целей можно, но зачем!

Отвечаю: тот запрос, который я приводил в начеле, как раз и работаает по таму принципу, который Вы мне говорите,.т.е. я передаю значение параметра через клиента..
Все работает.. Но мне нужно значительно расширить этот модуль, т.е. увеличивается и размер запроса и количество пользователей, которые будут обращаться к этому запросу. Кроме этого, на базе этого запроса, нужно построить еще несколько, анологичныхз запросов..
Плюс ко всему, удобство сопровождения да и безопасноть тоже увеличится..
у меня еще появилась возможность перетащить БД на oracle 10, может там эту проблему можно как то проще решить?
19 янв 09, 07:17    [6702891]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
__vvp_
Member

Откуда: Санкт-Петербург
Сообщений: 1158
Jhon
__vvp_
Jhon
мне нужно , именно селект из функциии сделать..
уже понял, что надо сделать тип.. сделал..
но не получается функцию скомпилить..
много таблиц..


Можете объяснить зачем Вам запрос из функции?
Вы его с клиента будете запрашивать или из другого PL/SQL модуля?
Если с клиента, то и запрашивайте свой сложный select с него.

Заниматься объектными типами для этих целей можно, но зачем!

Отвечаю: тот запрос, который я приводил в начеле, как раз и работаает по таму принципу, который Вы мне говорите,.т.е. я передаю значение параметра через клиента..
Все работает.. Но мне нужно значительно расширить этот модуль, т.е. увеличивается и размер запроса и количество пользователей, которые будут обращаться к этому запросу. Кроме этого, на базе этого запроса, нужно построить еще несколько, анологичныхз запросов..
Плюс ко всему, удобство сопровождения да и безопасноть тоже увеличится..
у меня еще появилась возможность перетащить БД на oracle 10, может там эту проблему можно как то проще решить?


ИМХО - у Вас каша в голове. Собрали все в кучу
19 янв 09, 09:11    [6703020]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10045
Jhon
Доброе время суток всем!
есть такой запрос
работает правильно и замечательно.


And why do you want to rewrite it in PL/SQL? Too slow? Anyway, look at HAVING clause in both inline views. There is no aggregated expression in it. It filters out complete groupings where table1.col1 is either zero or is null. So your inline views do all the work to group all data where table1.col1 is either zero or is null only to filter it out later. Just replace:

 Where table2.ID_table1 = table1.ID_table1
    group by table1.col1,table1.NAME
Having (table1.col1 <> 0)

 Where table2.ID_table1 = table1.ID_table1
AND table1.col1 <> 0
    group by table1.col1,table1.NAME

Now you did not specify FROM clause in second inline view. Is it same as in first inline view? If so both will produce same set of groups and outer join does not make much sense. Post complete query to take the guessing out.

SY.

Сообщение было отредактировано: 19 янв 09, 16:48
19 янв 09, 16:48    [6706201]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
You can take your query and replace all bind variables (:year for example) on the according pl/sql variables (year_var NUMBER - for example).

There are no any differencies between query writing in sql and pl/sql contexts (at least in such simple case);

COMMIT;
19 янв 09, 17:07    [6706378]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
Take my appologies, i forgot about fetching a results.

You can use cursors for fetching query results.
One of the possible writing cases:

автор

declare
cur_var sys_refcursor;
begin
open cur_var for
select .... your query ........
loop
fetch cur_var into ... variable or pl/sql records ....
exit when cur_var%NOT_FOUND;
end loop;
end;



COMMIT;
19 янв 09, 17:13    [6706447]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
Elic
Member

Откуда:
Сообщений: 29980
[quot test_2008]i forgot/quot]В Москве не найти русской клавы?
19 янв 09, 17:15    [6706465]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
Elic
[quot test_2008]i forgot/quot]В Москве не найти русской клавы?


Let me train my English ....

COMMIT;
19 янв 09, 17:17    [6706486]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
Elic
Member

Откуда:
Сообщений: 29980
test_2008
Let me train my English ....
Необоснованное злоупотребление есть почти нарушение правил :)
19 янв 09, 17:19    [6706506]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
Elic
test_2008
Let me train my English ....
Необоснованное злоупотребление есть почти нарушение правил :)


This is language discrimination.
19 янв 09, 17:21    [6706522]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
Elic
Member

Откуда:
Сообщений: 29980
test_2008
This is language discrimination.
Не будь дятлом и чти правила.
19 янв 09, 17:42    [6706705]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
Elic
test_2008
This is language discrimination.
Не будь дятлом и чти правила.


Rules ? What the rules ?
Show me rules about English language in the forum rules list .....

Those rules that are found just in your head are unknown to me .....


COMMIT;
19 янв 09, 17:50    [6706749]     Ответить | Цитировать Сообщить модератору
 Re: сложный select перенести на Pl/SQL  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
автор
Ограничения
Официальный язык форума - русский. Однако допускаются сообщения, написанные транслитом
и на английском языке.


In accordance with forum rule i can use English language in my messages.

COMMIT;
19 янв 09, 17:57    [6706804]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить