Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.18;
Скачать: [xml.tar.bz2];




Вниз

Как в Оракле выбрать нужные записи из таблицы с помощью хранимой процедуры? 


sync   (2002-01-22 09:11) [0]

Подскажите пожалуйста.
На InterBase можно было выбрать нужные записи с помощью хранимой процедуры типа:
create procedure SELECT_FROM
for select name, code, ...
from table
into :name, :code, ...
do begin
suspend;
end;
а затем запросом: select * from SELECT_FROM выбрать записи.
Как на Oracle реализовать нечто подобное?
Заранее спасибо.



Внук   (2002-01-22 10:33) [1]

В ORACLE это делается обычно с помощью представлений:
create or replace view SELECT_FROM
as select name, code, ...
from table
а затем запросом: select * from SELECT_FROM выбрать записи.



EternalWonderer   (2002-01-22 10:46) [2]

Увы, в Oracle нет SELECT * from PROC_NAME(PARAMS).
Можно, правда, вернуть из процедуры курсор или временную таблицу, но дальше в приложении приходится обрабатывать результат построчно - в DBGrid запихнуть его мне лично не удалось (а может, я не знаю чего?)



Desdechado   (2002-01-22 10:53) [3]

2 Внук
вообще-то, вьюхи и в ИБ есть. Речь-то шла о другом - как сформировать набор данных, кторый не сделать простым SELECT. Должны же быть процедуры, возвращающие именно набор данных. Они есть в Информиксе, значит, тем более должны быть в Оракле.

2 sync
прости, в Оракле пока не силен



Внук   (2002-01-22 11:11) [4]

>>Desdechado © Речь шла о том, о чем написано в вопросе. Представления в IB, конечно, есть, еще бы им не быть, но может автор не в курсе. А кроме простого SELECT можно составить сложный :) Вообще такие вопросы лучше решать относительно конкретной ситуации. Иначе - см. EternalWonderer (22.01.02 10:46).



fnatali   (2002-01-22 11:27) [5]

По-моему в Оракле, в отличие от IB, есть возможность использования такой конструкции:
select t1.pole1, t2.pole1,... from table1 t1, (select * from table3) t2



sync   (2002-01-22 11:49) [6]

2 EternalWonderer
Понятно :)
Просто в процедуру передается несколько параметров, один из которых используется условным оператором
IF :PARAM = 2 then ...
SELECT ...
IF :PARAM = 3 then ...
Можно конечно в программе разделять случаи, но хотелось бы это делать на сервере.



Desdechado   (2002-01-22 12:06) [7]

2 Внук
>Речь шла о том, о чем написано в вопросе.
Вопрос был
выбрать нужные записи с помощью хранимой процедуры

и простой SELECT - это не запрос к одной таблице, а имелся ввиду ОБЫЧНЫЙ SELECT. ХП может ведь прочитать кучу данных из разных таблиц, перемолоть их, повернуть боком, отформатировать и много чего другого, после чего вернуть в виде набора строк. думаю, речь была об этом.



fnatali   (2002-01-22 13:13) [8]

>может ведь прочитать кучу данных из разных таблиц, перемолоть >их, повернуть боком, отформатировать и много чего другого, >после чего вернуть в виде набора строк.
Может, я чего то не понимаю, но для этих целей я в Оракле использую Functions. Создаю функцию, где определена вся обработка и откуда возвращаются значения. Эта функция вызывается в обычном select. Могу кучу рабочих примеров привести.



GorA   (2002-01-23 14:27) [9]

для того, чтобы выбрать записи процедурой, эта процедура должна содержать в качестве OUT параметра курсор:

procedure myProc(param1 NUMBER, param2 VARCHAR(N),... paramN OUT myCursor) as
begin
...
end;

myCursor должен быть об"явлен в пакете.

Дальше, думаю, все понятно.

Удачи.




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.18;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.028 c
1-57073           Злой_Гном             2002-02-01 18:23  2002.02.18  
Все, про ProgressBar дотумкал :-)))


6-57157           Kate                  2001-11-27 03:58  2002.02.18  
BROADCAST


14-57212          Yuraz                 2001-12-29 10:58  2002.02.18  
EURO+ERO


3-57013           Kirill                2002-01-24 16:56  2002.02.18  
Дублирующиеся записи в SQL Server


1-57075           kaif                  2002-02-01 16:52  2002.02.18  
Директива {$DEFINE mmm}