Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Help!!!ADO.Command & Oracle. "Затирается" первый параметр / 4 сообщений из 4, страница 1 из 1
13.06.2003, 15:47
    #32182329
Finder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Help!!!ADO.Command & Oracle. "Затирается" первый параметр
при вызове из Command ХП (не возвращающей выборку), игнорируется первый параметр.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE  "TDBParams"  (
F_PARAMID number NULL,
F_NAME varchar ( 256 ) NULL
)
CREATE OR REPLACE PROCEDURE UpdDBParams (Name IN varchar,ParamId IN number)
IS BEGIN  -- Кстати, не заметил разницы "AS"/"IS"
 
    INSERT INTO  "TDBParams"  (F_PARAMID,F_NAME)
    VALUES (ParamId,Name);
END;

Т.е. в F_NAME вместо переданного текста пишется то 0 (при последующих вызовах 1). При вызове этой же ХП из SQL+ все работает прекрасно. Ради интереса поменял местами два параметра в ХП - теперь в F_PARAMID пишется 0 или 1.
Когда разибрался в MSSQL, сталкивался с аналогичной проблемой, она была вызвана необходимостью поддержки неявного параметра - кода возврата ХП, решалось это просто:
Код: plaintext
1.
2.
3.
// дополнительно при задании параметров вызываем:
pCommand->CreateParameter(_bstr_t( "RetVal" ),adInteger,adParamReturnValue,- 1 ,COleVariant((long)  0 ));
pCommand->Parameters->Append(pParameter);

В случае с Oracle попробовал справиться тем же способом - не получилось, ругается что не находит процедуру (видимо не нравится число параметров).
Код: plaintext
1.
2.
pCommand->CreateParameter(_bstr_t( "result" ),adVarNumeric,adParamReturnValue,- 1 ,COleVariant((long)  0 ));
pCommand->Parameters->Append(pParameter);


На форуме уже был как-то подобный топик, но никто на него не ответил. Может, в Oracle надо как-то явно указывать возвращаемый параметр? Что делато???!!!
...
Рейтинг: 0 / 0
13.06.2003, 16:31
    #32182349
hDrummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Help!!!ADO.Command & Oracle. "Затирается" первый параметр
это скорее у ораклистов надо спросить, они должны знать.
...
Рейтинг: 0 / 0
13.06.2003, 17:11
    #32182374
Finder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Help!!!ADO.Command & Oracle. "Затирается" первый параметр
... ораклисты отошлют к программерам, т.к. ADO & OLEDB не их интересы...

Это становится уже традицией - сам себе отвечаю. Поскольку в Oracle ХП не умеют возвращать значение с оператором RETURN, а в Command (не получающем recordset) первым параметром напрашивается RetVal, придется во всех ХП первым параметром явно указывать код возврата следующим образом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE OR REPLACE PROCEDURE UpdDBParams (p_errorcode OUT number,Name IN varchar,ParamId IN number)
AS BEGIN
    INSERT INTO  "TDBParams"  (F_PARAMID,F_NAME)
    VALUES (ParamId,Name);
  EXCEPTION      
    WHEN OTHERS THEN  
      p_errorcode:= SQLCODE;    
END;
...
В Command самым первым параметром добавляем возвращаемое значение:
_ParameterPtr pParameter;
pParameter = pCommand->m_pCommand->CreateParameter(_bstr_t( "P_ERRORCODE" ),adSmallInt,\
             adParamOutput,- 1 ,COleVariant((long)  0 ));
pCommand->m_pCommand->Parameters->Append(pParameter);


ЗЫ: Если кто-то знает, как сделать лучше (правильней)?
...
Рейтинг: 0 / 0
16.06.2003, 06:05
    #32182800
ArchiMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Help!!!ADO.Command & Oracle. "Затирается" первый параметр
Правильней написать функцию вместо процедуры :)
Или вызывай блок кода типа:

begin
Процедура(а,б);
end;

Тогда все получится правильно, но медленно.

А вообще лучше все хранить в пакетах и если уж тебе ну так уж сильно надо вызывать процедуру вместо функции, придется делать так, как ты сам накопал.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Help!!!ADO.Command & Oracle. "Затирается" первый параметр / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]