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

Вниз

Работа с ораклом через 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
15-1232561713
vuk
2009-01-21 21:15
2009.04.26
Ндааааа....


2-1237315821
Alral
2009-03-17 21:50
2009.04.26
очищение памяти, занимаемой переменной String


15-1235387694
@!!ex
2009-02-23 14:14
2009.04.26
Как записать происходящее на рабочем столе во Flash.


2-1236752941
dort12
2009-03-11 09:29
2009.04.26
!!!! Как разместить компоненты на форме программно


15-1235322554
ЭРИКА
2009-02-22 20:09
2009.04.26
С ДНЕМ ЗАЩИТНИКА ОТЕЧЕСТВА!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский