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

Откуда:
Сообщений: 55
Добрый день!
Подскажите пожалуйста как решать задачу или хотя бы в каком направлении копать?
На моём компьютере установлен сервер Oracle 11g XE и MS SQL Server 2008.
В MS SQL Server 2008 я создал связанный сервер с БД Oracle. Всё отлично работает, select'ы выполняются и т.д.
В Oracle я создал GLOBAL TEMPORARY TABLE и процедуру, которая при помощи курсора заполняет эту табличку.
Процедура:
CREATE OR REPLACE
PROCEDURE sap_day(dt date, rc out sys_refcursor) is
  sap_id_       varchar2(100);
  er_           number;
begin
  delete from halfhour_sap;

  for c in (select gid, vparam from groups where vparam like '%SAP%') loop
    sap_id_ := substr(c.vparam, instr(c.vparam, 'SAP') + 3, 100);

    select sum(decode(g.inverted, 'y', -1, 1) * er) into er_
      from
        (select mid, inverted from groups where mid is not null
           connect by prior gid = parent start with gid = c.gid) g,
        halfhourold h
      where h.mid = g.mid
        and h.date_time <= trunc(dt) + 20/24
        and h.date_time >  trunc(dt) - 4/24;

    insert into halfhour_sap(date_time, gid, sap_id, er)
      values(dt, c.gid, sap_id_, er_);
  end loop;

  commit;

  open rc for
    select date_time, gid, sap_id, er from halfhour_sap;

end;
/ 


Затем я её в Oracle вызывал вот так:
declare ref_cur sys_refcursor;
begin
sap_day(to_date('28.08.2014', 'dd.mm.yyyy'),ref_cur);
end;


И эта функция положила в табличку GLOBAL TEMPORARY TABLE полученные значения.

Вопрос: Как сделать то же самое в SQL Server используя мой связанный сервер?
Т.е. нужно выполнить эту же функцию, получить курсор и как то при помощи этого курсора заполнить табличку, но уже в MS SQL Server.

Где то скопипастил в интернете такой способ, но я получаю пустые столбцы временной таблицы из Oracle...
Помогите пожалуйста, как правильно организовать такой трансфер данных?
Заранее спасибо!
24 ноя 14, 11:04    [16895065]     Ответить | Цитировать Сообщить модератору
 Re: Использовать sys_refcursor из Oracle в SQL Server  [new]
romasimeiz
Member

Откуда:
Сообщений: 55
Способ, в MS SQL Server, который возвращает пустые столбцы.

DECLARE 
ref_cur CURSOR FOR 
select date_time, gid, sap_id, er from [ORASERV]..[RYDA].[HALFHOUR_SAP];
OPEN ref_cur;
FETCH NEXT FROM ref_cur;
WHILE @@FETCH_STATUS = 0
   BEGIN
      FETCH NEXT FROM ref_cur;      
   END;   
CLOSE ref_cur;
DEALLOCATE ref_cur;
GO
24 ноя 14, 11:05    [16895078]     Ответить | Цитировать Сообщить модератору
 Re: Использовать sys_refcursor из Oracle в SQL Server  [new]
aleks2
Guest
romasimeiz
Вопрос: Как сделать то же самое в SQL Server используя мой связанный сервер?
Т.е. нужно выполнить эту же функцию, получить курсор и как то при помощи этого курсора заполнить табличку, но уже в MS SQL Server.


Вам "кровь из носу" курсор нужен?
Или ваши принципы допускают некоторый изгиб?
24 ноя 14, 11:10    [16895113]     Ответить | Цитировать Сообщить модератору
 Re: Использовать sys_refcursor из Oracle в SQL Server  [new]
romasimeiz
Member

Откуда:
Сообщений: 55
aleks2,
Задание было через курсор.
А как можно по другому, или попроще?
24 ноя 14, 11:13    [16895139]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить