Форум: "Базы";
Поиск по всему сайту: 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.02 c
1-57113           MystiX                2002-02-02 17:40  2002.02.18  
FILE?????


7-57232           Zevsus                2001-11-13 00:28  2002.02.18  
Запускаем процесс, идем его завершения или сворачивания и обрабатываем сие событие..


1-57080           MAN-IN-RED            2002-02-01 19:36  2002.02.18  
Как посмотреть нажата ли левая кнопка мыши?


1-57069           novomod               2002-01-31 14:24  2002.02.18  
HELP. Алгоритм.


1-57151           olookin               2002-02-04 10:12  2002.02.18  
Эмуляция нажатия клавиши