Форум: "Базы";
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];
ВнизЛюди, ну не оставляйте в беде... Найти похожие ветки
← →
tovSuhov (2002-03-29 14:36) [0]Из всех книг под рукой только и-нет. Уже не первый час бьюсь...
В ФАКах искал, в "Поиске"...
Как выполнить ФУНКЦИЮ с моим параметром и получить возвращаемое ею значение?
Ну хоть кусочек кода, други...
← →
Val (2002-03-29 14:41) [1]компонент TStoredProc поможет, параметы и передаются и принимаются :)
← →
tovSuhov (2002-03-29 14:48) [2]Так вот с ним, милым, и мучаюсь...
Есть функция
DBMS_PIPE.SEND_MESSAGE (pipename IN VARCHAR2, timeout IN INTEGER DEFAULT MAXWAIT, maxpipesize IN INTEGER DEFAULT 8192) RETURN INTEGER;
Как у нее вытащить результат?
← →
Val (2002-03-29 14:57) [3]ParamByName("Result") -должно помочь :))
← →
tovSuhov (2002-03-29 15:10) [4]Делаю:
Proced1.ProcedureName = "DBMS_PIPE.SEND_MESSAGE";
Proced1.Parameters.ParseSQL("Exec DBMS_PIPE.SEND_MESSAGE :Param1 :Param2 :Param3",True);
Proced1.Parameters.ParamByName("Param1").Value := "proba";
Proced1.Parameters.ParamByName("Param2").Value := 5000;
Proced1.Parameters.ParamByName("Param3").Value := 8192;
Proced1.Open;
ShowMessage(IntToStr(Proced1.Parameters.ParamByName("Result").Value));
Ругается:
"SEND_MESSAGE is a not procedure or is undefined"
Дело в том, что это функция, и я подозреваю, что с ней надо работать иначе, чем с обычными хранимыми процедурами...
← →
USAtyj (2002-03-29 15:16) [5]Поставь компонент DOA.
← →
USAtyj (2002-03-29 15:16) [6]Поставь компонент DOA.
(Direct Oracle Access кажись).
Там все проще.
← →
tovSuhov (2002-03-29 15:25) [7]>USAtyj :
Я, конечно, извиняюсь...Но, по моему, вопрос поставлен достаточно конкретно. Я уверен, что люди, работающие с БД не один год, не раз сталкивались с необходимостью выполнять на сервере БД различные функции и использовать возвращаемые ими значения. Это, так сказать, основа основ. Вот и я подошел к этому :-)). Вот и прошу уважаемых Мастеров и Зубров поделиться - как оно реализуется...
← →
Judith (2002-03-29 15:44) [8]Ну, во-первых, проверь правильно ли указано у Proced1 DataBaseName.
Во-вторых, ты опечаталься или у тебя действительно
Proced1.ProcedureName = "DBMS_PIPE.SEND_MESSAGE";
Надо бы так
Proced1.StoredProcedureName = "DBMS_PIPE.SEND_MESSAGE";
В-третьих, DBMS_PIPE это пакадж или схема?
И какой у тебя Оракл, какая версия БДЕ?
← →
tovSuhov (2002-03-29 15:50) [9]Опечатался:Proced1.ProcedureName := "DBMS_PIPE.SEND_MESSAGE";
С Proced1 все нормально. Я в нем несколько процедур уже выполнял.
Оракл 8.1.чего-то там...
Так как Proced1 это компонент TADOStoredProc, BDE на него никоим образом не влияет (насколько я знаю).DBMS_PIPE - это package.
← →
Val (2002-03-29 15:52) [10]почему Open, а не ExecProc? можно убрать ParseSQL
← →
Judith (2002-03-29 16:52) [11]А, так у тебя через ADO, тогда по-моему не получится.
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q176936
← →
{bas} (2002-03-29 17:06) [12]Попробуй в Query написать
select DBMS_PIPE.SEND_MESSAGE(:Param1, :Param2, :Param3) result from dual
делай Query1.Open
и потом MyRes := Query1.FieldByName("Result").AsInteger;
← →
ivv (2002-03-29 17:06) [13]попробуй TQuery, типа:
Query.SQL.Text := "select DBMS_PIPE.SEND_MESSAGE (pipename , timeout , maxpipesize ) from dual";
Query.Open;
result := Query.Fields[0].AsString;
← →
{bas} (2002-03-29 17:06) [14]Попробуй в Query написать
select DBMS_PIPE.SEND_MESSAGE(:Param1, :Param2, :Param3) result from dual
делай Query1.Open
и потом MyRes := Query1.FieldByName("Result").AsInteger;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c