Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вызов хранимой функции из связанного сервера Oracle  [new]
Degun
Member

Откуда:
Сообщений: 205
Есть сервер с MS SQL 2005. На сервере прописан связанный Oracle 11g сервер на основе провайдера Oracle Provider for OLE DB. В Management Studio выполняется нормально следующий запрос:
select * FROM SIG..SIGNATORB.TEST_TABLE

Но при вызове хранимой функции с этого сервера:
declare @brok_comis numeric(18,5);
select @brok_comis = SIG..SIGNATORB.GET_BROK_COMIS('19-08-2013', 'C0007');
print @brok_comis

выдаётся ошибка

Msg 344, Level 16, State 1, Line 2
Ссылка на удаленную функцию "SIG..SIGNATORB.GET_BROK_COMIS" недопустима. Имя столбца "SIG" не найдено или является неоднозначным.

Как правильно вызвать удалённую функцию?
20 авг 13, 11:03    [14729443]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой функции из связанного сервера Oracle  [new]
ГуЗы
Guest
Degun,
Делаешь и подключаешь сборку - и полный вперед!
20 авг 13, 11:32    [14729618]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой функции из связанного сервера Oracle  [new]
o-o
Guest
exec ('select SIGNATORB.GET_BROK_COMIS(''19-08-2013'', ''C0007'')') at SIG 

?
20 авг 13, 11:54    [14729786]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой функции из связанного сервера Oracle  [new]
Degun
Member

Откуда:
Сообщений: 205
ГуЗы,
Я как раз из сборки и пытаюсь сделать запрос. При выполнении команды sqlCommand.ExecuteReader() вылетает таже самая ошибка.
    private static decimal GetBrokComis(SqlConnection sqlConnection, SqlDateTime LimitsDate, string ClientCode)
    {
      const string GetBrokerComisForClientScript =
        @"declare @brok_comis numeric(18,5);" + "\n" +
        @"select @brok_comis = SIG..SIGNATORB.GET_BROK_COMIS('{0}', '{1}');";

      decimal BrokComis = 0;

      string sCommandScript = String.Format(GetBrokerComisForClientScript,
        LimitsDate.IsNull ? "NULL" : LimitsDate.Value.ToString("dd-MM-yyyy"),
        ClientCode);
      using (SqlCommand sqlCommand = new SqlCommand(sCommandScript, sqlConnection))
      {
        sqlCommand.CommandTimeout = 600;
        using (SqlDataReader rd = sqlCommand.ExecuteReader())
        {
          if (rd.Read())
          {
            if (!rd.IsDBNull(0)) BrokComis = rd.GetDecimal(0);
          }
        }
      }

      return BrokComis;
    }
20 авг 13, 11:55    [14729795]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой функции из связанного сервера Oracle  [new]
Degun
Member

Откуда:
Сообщений: 205
o-o,
А как получить в Management Studio то значение, которое возвратила функция SIGNATORB.GET_BROK_COMIS?
20 авг 13, 12:03    [14729842]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой функции из связанного сервера Oracle  [new]
Гость333
Member

Откуда:
Сообщений: 3683
declare @brok_comis numeric(18,5);
select @brok_comis = x from openquery(SIG, 'select SIGNATORB.GET_BROK_COMIS(to_date(''19-08-2013'', ''dd-mm-yyyy''), ''C0007'') x from dual');
print @brok_comis;
20 авг 13, 12:05    [14729863]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой функции из связанного сервера Oracle  [new]
Degun
Member

Откуда:
Сообщений: 205
Гость333,
Большое спасибо.
20 авг 13, 12:14    [14729938]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить