Задача по PL/SQL (ORACLE)

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

Что нужно:

Написать функции по количеству output - параметров.
function out1( in1, in2, ... )
...
вызов PROC
return out_1
...
end;

итд итп.

Потом VIEW создаётся как
select out1(...), out2(...)

from SYS.DUAL
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
ratter
Сообщения: 3
Зарегистрирован: 22 май 2004, 09:45
Контактная информация:

Мне нужно решить такую же задачу. Если честно, я не до конца понимаю условия. Нужно ли в искомом v_T иметь значения всех выходных параметров для всех входных из T?
ratter
Сообщения: 3
Зарегистрирован: 22 май 2004, 09:45
Контактная информация:

Вот более точная формулировка.
Дано:
а) некоторая процедура 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 невозможен вызов каких либо процедур, скриптов, возможны только произвольные выборки.
ratter
Сообщения: 3
Зарегистрирован: 22 май 2004, 09:45
Контактная информация:

Предыдущее решение на мой взгляд неправильно тем, что слишком часто вызывается 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;
tie
Сообщения: 1
Зарегистрирован: 25 май 2004, 23:54

а как дела с предыдущими двумя задачами :D :D :D ?
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

[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]

Я думаю, что этот вариант оптимален. Но надо проверить, работает ли он.
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
Ответить