powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вызов функции которая возвращает таблицу (MSSQL)
8 сообщений из 8, страница 1 из 1
Вызов функции которая возвращает таблицу (MSSQL)
    #39746708
Фотография maxandsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас встала задача, необходимо по DBLINK вызвать функцию из MS/SQL которая возвращает таблицу и получить данные в Oracle

Пример функции
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE FUNCTION dbo.TestIsAm (@DT datetime)
RETURNS TABLE
AS
RETURN
SELECT TOP (100) DT, DT_Seazon, Week_Day, DayType
       FROM dbo.Calendar_Hours
       WHERE DT > @DT
ORDER BY DT


Вызов для примера

SELECT DT, DT_Seazon, Week_Day, DayType
       FROM dbo.TestIsAm ('20180101')



Пример вызова
Код: sql
1.
2.
SELECT DT, DT_Seazon, Week_Day, DayType
       FROM dbo.TestIsAm ('20180101')



Пока не подходит не один вариант((((

Может кто то сталкивался????
...
Рейтинг: 0 / 0
Вызов функции которая возвращает таблицу (MSSQL)
    #39746714
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxandsoftМожет кто то сталкивался?Тут на форуме кто-то каждые пару лет сталкивается.
...
Рейтинг: 0 / 0
Вызов функции которая возвращает таблицу (MSSQL)
    #39746720
Фотография maxandsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

Находил ветки, но там возврат описывался когда одна строка с одним значением, и это решение не подходит(
...
Рейтинг: 0 / 0
Вызов функции которая возвращает таблицу (MSSQL)
    #39746914
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxandsoftфункцию из MS/SQL которая возвращает таблицуодна из вещей, которая понравилась в MSSQL
...
Рейтинг: 0 / 0
Вызов функции которая возвращает таблицу (MSSQL)
    #39746929
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxandsoftНаходил веткиЕсли не умеешь пользоваться интернетом, пользуйся документацией.
...
Рейтинг: 0 / 0
Вызов функции которая возвращает таблицу (MSSQL)
    #39747030
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxandsoft
Находил ветки, но там возврат описывался когда одна строка с одним значением, и это решение не подходит(

Oracle табличная/pipelined фукнкция внутри которой DBMS_HS_PASSTHROUGH.

SY.
...
Рейтинг: 0 / 0
Вызов функции которая возвращает таблицу (MSSQL)
    #39747126
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxandsoft,

Немного изменил пример из доки
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
--mssqlserver
CREATE FUNCTION MY_TESTFUNC (@DT datetime)
RETURNS TABLE
AS
RETURN
SELECT TOP (100) id,n,s,dt
       FROM my_test
       WHERE DT > @DT
ORDER BY DT

--ora
DECLARE
  l_c	binary_integer;
  l_ret	binary_integer;
  l_id 	number;
  l_num	number;
  l_s	varchar2(200);
  l_dt 	date;

BEGIN
  l_c := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@mssqllink;
  DBMS_HS_PASSTHROUGH.PARSE@mssqllink(l_c,'SELECT id,n,s,dt FROM MY_TESTFUNC(getdate()-2)');

  l_ret := 0;
  WHILE (TRUE)
  LOOP
    l_ret := DBMS_HS_PASSTHROUGH.FETCH_ROW@mssqllink(l_c,FALSE);
    DBMS_HS_PASSTHROUGH.GET_VALUE@mssqllink(l_c,1,l_id);
    DBMS_HS_PASSTHROUGH.GET_VALUE@mssqllink(l_c,2,l_num);
    DBMS_HS_PASSTHROUGH.GET_VALUE@mssqllink(l_c,3,l_s);
    DBMS_HS_PASSTHROUGH.GET_VALUE@mssqllink(l_c,4,l_dt);

    DBMS_OUTPUT.PUT_LINE('id='||l_id||' num='||l_num||' s='||l_s||' dt='||to_char(l_dt,'yyyymmdd hh24:mi:ss') );

    -- INSERT INTO TABLE_LOCAL VALUES(l_id,l_num,l_s,l_dt);
  END LOOP;
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      BEGIN
        DBMS_OUTPUT.PUT_LINE('END OF FETCH');
        DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@mssqllink(l_c);
      END;
END;
/

id=4 num=12 s=тест2 dt=20181212 15:48:30
id=5 num=13 s=тест3 dt=20181212 15:49:02
END OF FETCH
...
Рейтинг: 0 / 0
Вызов функции которая возвращает таблицу (MSSQL)
    #39747407
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужна выборка в SQL, то:

MSSQL ф-ция:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE FUNCTION GetAgeGroups()  
  RETURNS TABLE  
    AS  
      RETURN  
        SELECT  [AgeGroupID],
                [StartAge],
                [EndAge]
          FROM  [AgeGroup]



Oracle типы+ф-ция:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
create or replace
  type AgeGroupObjType
    as object(
	      AgeGroupID varchar2(5),
	      StartAge   integer,
	      EndAge     integer
             )
/
create or replace
  type AgeGroupTblType
    as table of AgeGroupObjType
/
create or replace
  function GetAgeGroups
    return AgeGroupTblType
    pipelined
    is
        v_cursor binary_integer;
        v_obj    AgeGroupObjType := AgeGroupObjType(null,null,null);
    begin
        v_cursor := dbms_hs_passthrough.open_cursor@LINK_TO_MSSQL;
        dbms_hs_passthrough.parse@LINK_TO_MSSQL(v_cursor,'select * from [dbo].[GetAgeGroups]()');
        while dbms_hs_passthrough.fetch_row@LINK_TO_MSSQL(v_cursor) > 0 loop
          dbms_hs_passthrough.get_value@LINK_TO_MSSQL(v_cursor,1,v_obj.AgeGroupID);
          dbms_hs_passthrough.get_value@LINK_TO_MSSQL(v_cursor,2,v_obj.StartAge);
          dbms_hs_passthrough.get_value@LINK_TO_MSSQL(v_cursor,3,v_obj.EndAge);
          pipe row(v_obj);
        end loop;
        dbms_hs_passthrough.close_cursor@LINK_TO_MSSQL(v_cursor);
end;
/



Выполнение:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SQL> select  *
  2    from  table(GetAgeGroups)
  3  /

AGEGR   STARTAGE     ENDAGE
----- ---------- ----------
<30            0         29
30-39         30         39
40-49         40         49
50-59         50         59
60-69         60         69
70+           70        999

6 rows selected.

SQL> select  *
  2    from  table(GetAgeGroups)
  3    where startage = 40
  4  /

AGEGR   STARTAGE     ENDAGE
----- ---------- ----------
40-49         40         49

SQL> 



SY.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вызов функции которая возвращает таблицу (MSSQL)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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