Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Interbase: как создать представление(вид) из хр. процедуры? [D6, IB6.x]


Dron ©   (2004-02-26 15:23:00) 

Здравствуйте. Можно ли создать каким-либо способом в хранимой процедуре вид? Проблема в том, что мне нужен вид, созданный по определенным входным параметрам, а эти параметры можно получить только из входных параметров хп. Получается замкнутый круг - мне нужен вид, созданный по данным за определенный промежуток времени, но при создании вида я эти параметры передать не могу. Надеюсь обьяснил как мог. Какие предложения?


Desdechado   (2004-02-26 19:00:00) [1]

процедурой можно перелопатить БД как хочешь, вдоль и поперек
задай параметры и мучай БД

а динамическое создание вьюх - дурной тон, т.к. количество изменений метаданных в IB ограничено, да и конфликты совместного доступа никто не отменял.
ну и на последок, как было сказано, изменение метаданных в хост-языке ХП недоступно


AlexA   (2004-02-26 15:56:00) [2]

Что я не понял... :)
Я так будет не проще Select * from My_HP(:my_date, :my_date_end, ::descrr)


Dron   (2004-02-26 15:38:00) [3]

В виде у меня обьединяются выборки из 3 таблиц - полная каша. Например

CREATE VIEW FORM18A_VIEW(
   V18A_DESCR,
   V18A_DATE_TIME,
   V18A_TIME_UNAVAL,
   V18A_LINKS,
   V18A_MESS_OUT,
   V18A_MESS_REP_OUT,
   V18A_OCT_OUT,
   V18A_MESS_INC,
   V18A_OCT_INC)
AS
select
links_names.descr,
links_data.date_time,
count(links_data.link_num),
sum(links_data.mess_out),
sum(links_data.mess_rep_out),
sum(links_data.oct_out),
sum(links_data.mess_inc),
sum(links_data.oct_inc),
links_time_unaval.time_unaval
from links_names,links_data,links_time_unaval
where
/**/
group by
links_names.descr,links_data.date_time,links_time_unaval.time_unaval;

А затем в хп я работаю как с обычной таблицей. Примерно так

begin
 select
 FORM18A_VIEW.v18a_descr,
 "Макс",
 max(FORM18A_VIEW.v18a_links),
 max(FORM18A_VIEW.v18a_mess_out),
 max(FORM18A_VIEW.v18a_mess_rep_out),
 "-",
 max(FORM18A_VIEW.v18a_oct_out)/450,
 max(FORM18A_VIEW.v18a_oct_out)/(450*max(FORM18A_VIEW.v18a_links)*65536),
 max(FORM18A_VIEW.v18a_mess_inc),
 max(FORM18A_VIEW.v18a_oct_inc)/450,
 max(FORM18A_VIEW.v18a_oct_inc)/(450*max(FORM18A_VIEW.v18a_links)*65536),
 "-",
 max(FORM18A_VIEW.v18a_time_unaval),
 "-"
 from FORM18A_VIEW
   where
   FORM18A_VIEW.v18a_date_time between :my_date and :my_date_end and
   form18a_view.v18a_descr = :descrr
 group by form18a_view.v18a_descr
 into
 :descr,:par,:kolvo,:mess_o,:rep,:emp1,:bit_c_o,:erlang_o,
 :mess_i,:bit_c_i,:erlang_i,:emp2,:time_puch,:emp3;
 suspend;

Что плохо: вид создается в данном случае по всем данным которые есть в 3 таблицах, а в хп я делаю выборку за опред. промежуток. Нужно каким-то образом сделать вид именно за тот промежуток, за который идет выборка в хп (зачем мне в виде лишние данные?).
Извиняюсь за своё кривое обьяснение.


stud   (2004-02-26 15:26:00) [4]

чего-то ты недоговариваещ))))
зачем вид? если ХП на выходе выдаст то что ты хочеш


Johnmen   (2004-02-26 15:26:00) [5]

>Какие предложения?

Зачем виды то ? Просто запрос, пусть и сложный...


Zacho   (2004-02-26 15:25:00) [6]

Нельзя. В ХП и триггерах операторы DDL не доступны. Лучше сделай обычнуй селективную ХП вместо view.


Наверх

Титульная страница Поиск, карта сайта Написать письмо