Страница 1 из 1
Добавлено: 07 апр 2004, 19:19
DeeJayC
Что нужно:
Написать функции по количеству output - параметров.
function out1( in1, in2, ... )
...
вызов PROC
return out_1
...
end;
итд итп.
Потом VIEW создаётся как
select out1(...), out2(...)
from SYS.DUAL
Добавлено: 23 май 2004, 15:29
ratter
Мне нужно решить такую же задачу. Если честно, я не до конца понимаю условия. Нужно ли в искомом v_T иметь значения всех выходных параметров для всех входных из T?
Добавлено: 23 май 2004, 16:42
ratter
Вот более точная формулировка.
Дано:
а) некоторая процедура PROC(IN_1,IN_2,...IN_N, OUT_1,OUT_2,OUT_N)
код которой нам неизвестен (чёрный ящик) и на время выполнения (секунды!) мы никакого влияния оказать не можем.
б) некоторый набор данных
Т(например таблица или View) с полями IN_1, IN_2, ... IN_N
Требуется на наборе данных T получить в ОДНОМ SQL запросе, оформив его в виде view, значения выходных параметров, например:
CREATE view v_T SELECT OUT_1(IN_1,IN_2,...IN_N),OUT_2(IN_1,IN_2,...IN_N),OUT_3(IN_1,IN_2,...IN_N), IN_1,IN_2,...IN_N... FROM T WHERE....
При этом пользователь будет использовать view неопределённым способом, т. е. разный набор значений OUT_*, разные фильтры выборкм и т. п.
Следует сделать так, чтобы выполнение View было опитмально с точки зрения ресурсов сервера. Допускается создание любых объектов БД для данных целей (view,package и т. п.). Принять что перед запуском выборки из v_T невозможен вызов каких либо процедур, скриптов, возможны только произвольные выборки.
Решение.
Добавлено: 25 май 2004, 13:59
ratter
Предыдущее решение на мой взгляд неправильно тем, что слишком часто вызывается proc, в условии сказано, что время её вызова - секунды, поэтому вызывать её так часто не имеет смысла.
Я кажется придумал как решить, но к сожалению у меня нет под рукой Oracle, чтобы проверить можно ли там сделать подобное.
Идея заключается в том, что создаётся собственный тип type mytype is record of out1,out2,out3... и пишется функция которая возвращает такой тип, в своём теле вызывая процедуру PROC
create or replace function func(IN_1,IN_2...)
return mytype is
ret mytype;
begin func
---здесь вызываем proc, заполняем поля типа
return ret;
end func;
Добавлено: 26 май 2004, 00:02
tie
а как дела с предыдущими двумя задачами

?
Re: Решение.
Добавлено: 10 июн 2004, 12:04
DeeJayC
[quote="ratter"]
Я кажется придумал как решить, но к сожалению у меня нет под рукой Oracle, чтобы проверить можно ли там сделать подобное.
Идея заключается в том, что создаётся собственный тип type mytype is record of out1,out2,out3... и пишется функция которая возвращает такой тип, в своём теле вызывая процедуру PROC
create or replace function func(IN_1,IN_2...)
return mytype is
ret mytype]
Я думаю, что этот вариант оптимален. Но надо проверить, работает ли он.