Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.009 c
7-21285
Mihail
2002-07-29 15:55
2002.10.07
Как создать..?


6-21169
Egen
2002-08-07 08:15
2002.10.07
Замещение стандартной процедуры сокетовых ошибок в 2тоннике


1-21137
Rouse_
2002-09-25 21:36
2002.10.07
InsertMenu with Icon or Bitmap


3-20936
Шурик Ш
2002-09-17 16:08
2002.10.07
Настройка Lookup-поля


1-20990
Yarovoi Andrei
2002-09-26 17:45
2002.10.07
как в цикл узнать об нажание кновки и кликание мыши?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский