Текущий архив: 2004.03.28;
Скачать: CL | DM;
Вниз
Interbase: как создать представление(вид) из хр. процедуры? Найти похожие ветки
← →
Dron (2004-02-26 15:23) [0]Здравствуйте. Можно ли создать каким-либо способом в хранимой процедуре вид? Проблема в том, что мне нужен вид, созданный по определенным входным параметрам, а эти параметры можно получить только из входных параметров хп. Получается замкнутый круг - мне нужен вид, созданный по данным за определенный промежуток времени, но при создании вида я эти параметры передать не могу. Надеюсь обьяснил как мог. Какие предложения?
← →
Zacho © (2004-02-26 15:25) [1]Нельзя. В ХП и триггерах операторы DDL не доступны. Лучше сделай обычнуй селективную ХП вместо view.
← →
stud © (2004-02-26 15:26) [2]чего-то ты недоговариваещ))))
зачем вид? если ХП на выходе выдаст то что ты хочеш
← →
Johnmen © (2004-02-26 15:26) [3]>Какие предложения?
Зачем виды то ? Просто запрос, пусть и сложный...
← →
Dron (2004-02-26 15:38) [4]В виде у меня обьединяются выборки из 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 таблицах, а в хп я делаю выборку за опред. промежуток. Нужно каким-то образом сделать вид именно за тот промежуток, за который идет выборка в хп (зачем мне в виде лишние данные?).
Извиняюсь за своё кривое обьяснение.
← →
AlexA © (2004-02-26 15:56) [5]Что я не понял... :)
Я так будет не проще Select * from My_HP(:my_date, :my_date_end, ::descrr)
← →
Desdechado © (2004-02-26 19:00) [6]процедурой можно перелопатить БД как хочешь, вдоль и поперек
задай параметры и мучай БД
а динамическое создание вьюх - дурной тон, т.к. количество изменений метаданных в IB ограничено, да и конфликты совместного доступа никто не отменял.
ну и на последок, как было сказано, изменение метаданных в хост-языке ХП недоступно
Страницы: 1 вся ветка
Текущий архив: 2004.03.28;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.056 c