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

Вниз

Работа с ораклом через ADOStoredProc   Найти похожие ветки 

 
keymaster ©   (2008-09-01 11:28) [0]

Есть хранимка, которая первым параметром возвращает курсор.
AdoStoredProc при попытке сделать Active := True; страшно выдаёт оракловую ошибку invalid number or types of arguments[...]
AdoDataSet - аналогично.
Параметр заводил, тип ftVariant, не помогает.
Если в рантайме сказать parameters.refresh, то получаю сообщение "вызов SetParameterInfo" не выполнен.

Задача - получить этот курсор через ADO, не используя сторонние компоненты.

D2006, Oracle 10g


 
Правильный$Вася   (2008-09-01 11:30) [1]

select * from table( pr_ )
?


 
keymaster ©   (2008-09-01 11:43) [2]

Не...
PACKAGE_NAME.FUNCTIONNAME(P_ITEMS REF_CUR) RETURN NVARCHAR2;

Надо этот P_ITEMS получить.


 
Игорь Шевченко ©   (2008-09-01 12:57) [3]

А ADO умеет REFCURSOR ?


 
keymaster ©   (2008-09-01 13:23) [4]

Очевидно, что нет.
Придётся всё на запросах делать.


 
Игорь Шевченко ©   (2008-09-01 14:05) [5]


> PACKAGE_NAME.FUNCTIONNAME(P_ITEMS REF_CUR) RETURN NVARCHAR2;


Э...а где написано, что она возвращает курсор ?

Читай http://support.microsoft.com/kb/255043


 
keymaster ©   (2008-09-01 14:16) [6]


> Игорь Шевченко ©   (01.09.08 14:05) [5]
> > PACKAGE_NAME.FUNCTIONNAME(P_ITEMS REF_CUR) RETURN NVARCHAR2;
>

Неточно переписал...
Правильно так:
PACKAGE_NAME.FUNCTIONNAME(P_ITEMS  OUT REF_CUR) RETURN NVARCHAR2;


 
evvcom ©   (2008-09-01 15:10) [7]

Очень похоже на оракла. Не знаю, что такое REF_CUR, стандартный тип в нем есть SYS_REFCURSOR. Это и есть курсор. Думаю, ADO должен с ним справиться :)
Ну а вызов как делаешь?


 
evvcom ©   (2008-09-01 15:11) [8]

да, есть инфа, что это оракл :)


 
keymaster ©   (2008-09-01 15:14) [9]


> Не знаю, что такое REF_CUR

type ref_cur is ref cursor;

> Ну а вызов как делаешь?

По разному.
В начале было просто AdoStoredProc.Active := True;

Сейчас  -
ADOCommand.CommandText := "{call PACKAGE_NAME.FUNCTIONNAME(P_ITEMS)}"
и получаю "identifier P_ITEMS must be declared"


 
evvcom ©   (2008-09-01 15:32) [10]


> type ref_cur is ref cursor;

я уже писал, есть SYS_REFCURSOR. Убирай свою декларацию и соответственно лишнюю зависимость остальной части кода (хранимок, наверное) от своего пакета.

> AdoStoredProc

Какая StoredProc? У тебя же функция! Или меняй декларацию на create or replace procedure или вызывай как функцию.

> {call PACKAGE_NAME.FUNCTIONNAME(P_ITEMS)}

что такое {}? Я функции вызываю так "begin :Result := PACKAGE_NAME.FUNCTIONNAME(:P_ITEMS); end;" Обрати внимание на параметры с двоеточием!


 
sniknik ©   (2008-09-01 15:32) [11]

> и получаю "identifier P_ITEMS must be declared"
логично черт побери... в дельфи небось тоже var переменную нужно объявлять до вызова функции... раз уж это не результат функции, а именно переменная передаваемая в нее и в которой возвращается значение.


 
Игорь Шевченко ©   (2008-09-01 15:48) [12]

А как рекомендовано по ссылке в [5]

ADOCommand.CommandText := "{call PACKAGE_NAME.FUNCTIONNAME(?)}"

?


 
keymaster ©   (2008-09-01 17:16) [13]


> ADOCommand.CommandText := "{call PACKAGE_NAME.FUNCTIONNAME(?
> )}"

При попытке прочитать что-то из rs (resultset) вываливается сообщение: операция не допускается, если объект закрыт.


 
sniknik ©   (2008-09-01 17:38) [14]

> операция не допускается, если объект закрыт.
ну так оно пытается обрабатывать возвращаемое функцией значение... т.е. над NVARCHAR2 которое явно не рекордсет.
имхо, должно быть так (со ссылкой на безграмотность в оракле)

ADOCommand.CommandText :=
 "DECLARE @rs REF_CUR " +
 "{call PACKAGE_NAME.FUNCTIONNAME(@rs)} "+
 "SELECT @rs";

вот тогда, если поправить синтаксис под оракл конечно, можно будет читать чтото из возвращаемого reсordset-а (опять таки если REF_CUR по сути не чтото другое...)



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

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

Наверх




Память: 0.5 MB
Время: 0.013 c
15-1229941039
nnov
2008-12-22 13:17
2009.04.26
KWF и клиент-банк


2-1236703187
AlexDan
2009-03-10 19:39
2009.04.26
Реал и матем. функции.


6-1202258166
Alex603081
2008-02-06 03:36
2009.04.26
ClientSocket


15-1235658620
Dennis I. Komarov
2009-02-26 17:30
2009.04.26
SLQ


15-1235569007
Naturlih
2009-02-25 16:36
2009.04.26
TTimeVal