Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.07;
Скачать: CL | DM;

Вниз

Как в связке БДЕ+Оракл результат запроса вернуть?   Найти похожие ветки 

 
Duce ©   (2002-09-11 18:42) [0]

Уважаемые, пособите в меру добродетельности!
Как пользуя Оракл7,БДЕ и Дельфи6 вернуть в программу набор данных из хранимой процедуры/функции через TStoredProc?
Заранее признателен...


 
Peter Gluhiy ©   (2002-09-11 22:01) [1]

Сначала выполняеш:
StoredProc1.ExecProc
Получаеш результат:
Text := StoredProc1.ParamByName("Название параметра").AsString


 
oss ©   (2002-09-11 22:53) [2]

главное в процедуре правильно определи тип параметра


 
Suntechnic ©   (2002-09-11 23:40) [3]

>Peter Gluhiy © (11.09.02 22:01)
Человек интересовался как набор данных получить, а не просто строковый параметр.

>Duce © (11.09.02 18:42)
Делаешь примерно как написал Peter Gluhiy ©, только возвращаемым параметром ставишь курсор Oracle. Ну и соответственно процедура должна возвращать курсор из Oracle.


 
roottim   (2002-09-12 09:56) [4]

а в чем проблема?
связка все таже. StoredProc - DataSource - Grid(или что там)


 
Дмитрий Орехов   (2002-09-12 10:34) [5]

Я не уверен, что Oracle позволяет возвращать в качестве параметра хранимой процедуры набор данных. Сам не пробовал, но кто-то мне так сказал.


 
Val ©   (2002-09-12 10:50) [6]

>Duce © (11.09.02 18:42)
спрашивал в другой вашей ветке и в этой спрошу - зачем вам для этого данный компонент, если спокойно можно работать с квери. Спортивный интерес?


 
xGrey ©   (2002-09-12 15:50) [7]

В ощем виде.

Серверная часть:
PACKAGE PKG_TEST as
type Cur is ref cursor;
procedure TST(rCur in out Cur);
END;

PACKAGE body PKG_TEST as
procedure TST(rCur in out Cur) as
begin
open rCur for
select .........
end;
END;


Клиентская часть:
sp : TStoredProc
DB : TDatabase

sp.DatabaseName:=DB.DatabaseName;
sp.StoredProcName :="ИМЯ_ПАКЕТА.ИМЯ_ПРОЦЕДУРЫ";

in out параметр RCUR должен иметь тип ftCursor
Если в хр. процедуре есть входные (in) параметра, то присваиваем им значения.
sp.Open;
Если в хр. процедуре есть выходные (out) параметры, то забираем из них значения.


 
Duce ©   (2002-09-13 14:40) [8]

> Val
Нет, никаких абстрактных принципов, если так можно,
то прошу вразумить:) Я очень порадуюсь такому решению и с
удовольствием воспользуюсь.

> Все благородные люди. ОК! Все получилось, хотя с некоторыми напрягами. В рантайм делаю Prepare, лезет Exception в духе
неизвестный тип данных, обрабатываю его - ставлю ftCursor.
На клозе/опен почемуто начинаются какие-то неприятности - делаю
TParam.Clear - чтобы гарантированно.
Спасибо за консалт! Надеюсь буду и Вам полезен:)


 
xGrey ©   (2002-09-13 15:01) [9]

> лезет Exception в духе неизвестный тип данных....

По умолчанию тип Oracle ref cursor воспринимается Delphi как ftUnknown.
Измените его на ftCursor до обращения к хранимой.
То, как Вы это обрабытываете уж больно оригинально....


 
Val ©   (2002-09-13 15:04) [10]

Query.Close;
Query.SQL.Clear;
Query.SQL.Text := "select * from MY_SUPER_SP(:Value1,:Value2)";
Query.ParamByName("Value1").AsInteger := 157;
Query.ParamByName("Value2").AsString := "anything, what I want";
Query.Open;


 
Duce ©   (2002-09-13 15:27) [11]

> xGrey
так у меня набор параметров вариативный. Но вот курсор присутствует обязательно. Поэтому я список параметров не заполняю, а получаю после Prepare. Или не прав?
> К Val : а как выглядит MY_SUPER_SP?


 
Val ©   (2002-09-13 15:42) [12]

как ХП, возвращающая набор данных


 
Duce ©   (2002-09-13 16:08) [13]

TYPE curtype1 is ref cursor;

function GetIt return curtype1 as
retval curtype1;
begin
open retval for
select * from ar_ins_voc_status;
return retval;
end;

А потом есесно вызов в указанном виде...
Это не работает. Милости прошу подробнее, если не в тягость.



 
xGrey ©   (2002-09-13 16:46) [14]

> так у меня набор параметров вариативный
К моменту вызова хранимой она должна существовать на сервере и соотв ее параметры и их типы уже известны.
Параметры компонента TSoredProc леко настраиваются через инспектор объектов.

Если Вы исп. перегрузку хранимых, то можно, для настройки параметров перегруженной процедуры сделать так:
var P : TParam;
......................
p:=TParam.Create(sp.Params,ptInputOutput);
p.Name:="RCUR";
p.DataType:=ftCursor;
.............................

Для курсора из моего примера от 12.09.02 15:50.

> Это не работает>
Не используйте ф-цию, используйте процедуру. Это - работает.
См мой пост от 12.09.02 15:50.


 
Duce ©   (2002-09-16 10:25) [15]

> к XGray - да, таким образом все получилось. Просто специфика в том, что имя вызываемой процедуры берется из таблицы адекватно пользовательскому запросу->заранее проца неизвестна, мы пристегиваем компоненту имя и пошел анализ аргументов.

> Val не работает таким образом. А хотелось бы попробовать.
Не благоволите ли все же кодом ХП изумить? :)
Ибо в моем порочном варианте:

CREATE OR REPLACE procedure GetIt1(astatus IN number DEFAULT 140, aCursor IN OUT PKG_CURSOR.curtype1)
is
begin
open aCursor for
select * from voc_status where status=astatus;
end;
при обращении через вышеописанный SELECT получаю ожидаемый
ORA-00933 SQL command not properly ended



 
roottim   (2002-09-16 11:46) [16]

обязателен ли БДЕ?
можно перейти на ODAC, причем безболезненно (есть миграция от БДЕ компонент к ODAC).
работаю с ними.. курсоры возвращает! и очень много что есть приятного.


 
Duce ©   (2002-09-16 11:51) [17]

А вот это интересно!! Я вообще в свое время перетечь на
Direct Oracle Access думал(работал с ним). Но ODAC - это другой продукт, если не ошибаюсь? Насколько легко мигрировать, если есть какая матчасть, доки, введения и выведения в возможности, как с выходом под новые версии D(у меня 6-ка)-
очень порадуюсь.



Страницы: 1 вся ветка

Текущий архив: 2002.10.07;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
3-20940
Kurt
2002-08-29 17:34
2002.10.07
текст SQL-запроса прямо передается на сервер (случай работы с MS


14-21237
SPeller
2002-09-10 17:04
2002.10.07
С днём рожденья, Игорь Шевченко!!!


3-20899
kazaam
2002-09-13 08:16
2002.10.07
Как добавить запись в конец таблицы?


14-21245
ZetaX
2002-09-10 16:21
2002.10.07
нужен апдейт к C++ BUILDER 6


1-20954
Kaban
2002-09-26 10:21
2002.10.07
Доступ к элементам списка