![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Люди, ну не оставляйте в беде... [D5, Oracle]
tovSuhov © (2002-03-29 14:36:00)Из всех книг под рукой только и-нет. Уже не первый час бьюсь...
В ФАКах искал, в "Поиске"...
Как выполнить ФУНКЦИЮ с моим параметром и получить возвращаемое ею значение?
Ну хоть кусочек кода, други...
{bas} (2002-03-29 17:06:00) [1]Попробуй в 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:00) [2]попробуй 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:00) [3]Попробуй в Query написать
select DBMS_PIPE.SEND_MESSAGE(:Param1, :Param2, :Param3) result from dual
делай Query1.Open
и потом MyRes := Query1.FieldByName("Result").AsInteger;
Judith (2002-03-29 16:52:00) [4]А, так у тебя через ADO, тогда по-моему не получится.
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q176936
Val (2002-03-29 15:52:00) [5]почему Open, а не ExecProc? можно убрать ParseSQL
tovSuhov (2002-03-29 15:50:00) [6]Опечатался:Proced1.ProcedureName := "DBMS_PIPE.SEND_MESSAGE";
С Proced1 все нормально. Я в нем несколько процедур уже выполнял.
Оракл 8.1.чего-то там...
Так как Proced1 это компонент TADOStoredProc, BDE на него никоим образом не влияет (насколько я знаю).DBMS_PIPE - это package.
Judith (2002-03-29 15:44:00) [7]Ну, во-первых, проверь правильно ли указано у Proced1 DataBaseName.
Во-вторых, ты опечаталься или у тебя действительно
Proced1.ProcedureName = "DBMS_PIPE.SEND_MESSAGE";
Надо бы так
Proced1.StoredProcedureName = "DBMS_PIPE.SEND_MESSAGE";
В-третьих, DBMS_PIPE это пакадж или схема?
И какой у тебя Оракл, какая версия БДЕ?
tovSuhov (2002-03-29 15:25:00) [8]>USAtyj :
Я, конечно, извиняюсь...Но, по моему, вопрос поставлен достаточно конкретно. Я уверен, что люди, работающие с БД не один год, не раз сталкивались с необходимостью выполнять на сервере БД различные функции и использовать возвращаемые ими значения. Это, так сказать, основа основ. Вот и я подошел к этому :-)). Вот и прошу уважаемых Мастеров и Зубров поделиться - как оно реализуется...
USAtyj (2002-03-29 15:16:00) [9]Поставь компонент DOA.
USAtyj (2002-03-29 15:16:00) [10]Поставь компонент DOA.
(Direct Oracle Access кажись).
Там все проще.
tovSuhov (2002-03-29 15:10:00) [11]Делаю:
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"
Дело в том, что это функция, и я подозреваю, что с ней надо работать иначе, чем с обычными хранимыми процедурами...
Val (2002-03-29 14:57:00) [12]ParamByName("Result") -должно помочь :))
tovSuhov (2002-03-29 14:48:00) [13]Так вот с ним, милым, и мучаюсь...
Есть функция
DBMS_PIPE.SEND_MESSAGE (pipename IN VARCHAR2, timeout IN INTEGER DEFAULT MAXWAIT, maxpipesize IN INTEGER DEFAULT 8192) RETURN INTEGER;
Как у нее вытащить результат?
Val (2002-03-29 14:41:00) [14]компонент TStoredProc поможет, параметы и передаются и принимаются :)