Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.012 c
9-1179167410
StreG
2007-05-14 22:30
2009.04.26
помогите новичку


2-1236771470
dplz
2009-03-11 14:37
2009.04.26
Связанные переменные во всех формах


2-1236599989
KillaTank
2009-03-09 14:59
2009.04.26
Поиск по DBF


15-1235131897
dumka
2009-02-20 15:11
2009.04.26
Конференция


2-1236602499
игяи
2009-03-09 15:41
2009.04.26
Изменение размера формы




   Наверх