![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в Оракле выбрать нужные записи из таблицы с помощью хранимой процедуры? [D5, Oracle, ]
sync © (2002-01-22 09:11:00)Подскажите пожалуйста.
На InterBase можно было выбрать нужные записи с помощью хранимой процедуры типа:
create procedure SELECT_FROM
for select name, code, ...
from table
into :name, :code, ...
do begin
suspend;
end;
а затем запросом: select * from SELECT_FROM выбрать записи.
Как на Oracle реализовать нечто подобное?
Заранее спасибо.
GorA (2002-01-23 14:27:00) [1]для того, чтобы выбрать записи процедурой, эта процедура должна содержать в качестве OUT параметра курсор:
procedure myProc(param1 NUMBER, param2 VARCHAR(N),... paramN OUT myCursor) as
begin
...
end;
myCursor должен быть об"явлен в пакете.
Дальше, думаю, все понятно.
Удачи.
fnatali (2002-01-22 13:13:00) [2]>может ведь прочитать кучу данных из разных таблиц, перемолоть >их, повернуть боком, отформатировать и много чего другого, >после чего вернуть в виде набора строк.
Может, я чего то не понимаю, но для этих целей я в Оракле использую Functions. Создаю функцию, где определена вся обработка и откуда возвращаются значения. Эта функция вызывается в обычном select. Могу кучу рабочих примеров привести.
Desdechado (2002-01-22 12:06:00) [3]2 Внук
>Речь шла о том, о чем написано в вопросе.
Вопрос был
выбрать нужные записи с помощью хранимой процедуры
и простой SELECT - это не запрос к одной таблице, а имелся ввиду ОБЫЧНЫЙ SELECT. ХП может ведь прочитать кучу данных из разных таблиц, перемолоть их, повернуть боком, отформатировать и много чего другого, после чего вернуть в виде набора строк. думаю, речь была об этом.
sync (2002-01-22 11:49:00) [4]2 EternalWonderer
Понятно :)
Просто в процедуру передается несколько параметров, один из которых используется условным оператором
IF :PARAM = 2 then ...
SELECT ...
IF :PARAM = 3 then ...
Можно конечно в программе разделять случаи, но хотелось бы это делать на сервере.
fnatali (2002-01-22 11:27:00) [5]По-моему в Оракле, в отличие от IB, есть возможность использования такой конструкции:
select t1.pole1, t2.pole1,... from table1 t1, (select * from table3) t2
Внук (2002-01-22 11:11:00) [6]>>Desdechado © Речь шла о том, о чем написано в вопросе. Представления в IB, конечно, есть, еще бы им не быть, но может автор не в курсе. А кроме простого SELECT можно составить сложный :) Вообще такие вопросы лучше решать относительно конкретной ситуации. Иначе - см. EternalWonderer (22.01.02 10:46).
Desdechado (2002-01-22 10:53:00) [7]2 Внук
вообще-то, вьюхи и в ИБ есть. Речь-то шла о другом - как сформировать набор данных, кторый не сделать простым SELECT. Должны же быть процедуры, возвращающие именно набор данных. Они есть в Информиксе, значит, тем более должны быть в Оракле.
2 sync
прости, в Оракле пока не силен
EternalWonderer (2002-01-22 10:46:00) [8]Увы, в Oracle нет SELECT * from PROC_NAME(PARAMS).
Можно, правда, вернуть из процедуры курсор или временную таблицу, но дальше в приложении приходится обрабатывать результат построчно - в DBGrid запихнуть его мне лично не удалось (а может, я не знаю чего?)
Внук (2002-01-22 10:33:00) [9]В ORACLE это делается обычно с помощью представлений:
create or replace view SELECT_FROM
as select name, code, ...
from table
а затем запросом: select * from SELECT_FROM выбрать записи.