Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как получить данные через DBLINK / 11 сообщений из 11, страница 1 из 1
28.09.2017, 07:18
    #39527407
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить данные через DBLINK
Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

Как получить данные через DBLINK ?

На одном сервере имеется процедура в пакете, которая возвращает курсор:
Код: sql
1.
2.
3.
4.
5.
...
CREATE OR REPLACE package body package1 is
procedure test_proc(p_inn varchar2,
                            p_cursor out sys_refcursor) is 
...


Если ее вызвать через dblink на другом сервере, то выдается ошибка:
Код: sql
1.
2.
3.
4.
5.
6.
DECLARE
    p_inn varchar2(50) := '771603983483';
BEGIN
    package1.test_proc@dblink(p_inn,:p_cursor);
END;
ORA-24338: указатель оператора не выполнен


поискал аналогичное в поиске
5706447
Tom Kyte
refcursors may not be returned over a dblink

Решил попробовать создать табличную функцию и вытащить ее тоже через dblink
(в надежде, что в табличную функцию впихну результаты курсора)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE OR REPLACE package EGRIP_IMPORT.p_test is
    type test_rowGet is record (fnum numeric, fvar varchar2(100 char), fdate date);
    type test_table is table of test_rowGet;
    function get_test_table RETURN test_table pipelined;
end;
CREATE OR REPLACE PACKAGE BODY EGRIP_IMPORT.p_test
AS
    function get_test_table RETURN test_table pipelined
    is
    begin
        for curr in
        (
            ---- fnum numeric, fvar varchar2(100 char), fdate date
            select 12 as fnum, 'qwerqwerqwer' as fvar, to_date('12.01.2017','dd.mm.yyyy') as fdate from dual
            union all
            select 4 as fnum, 'zxcvzxvzxv' as fvar, to_date('05.01.2014','dd.mm.yyyy') as fdate from dual
        )
            loop pipe row(curr);
        end loop;
    end;
end;


Если ее вызвать через dblink
Код: sql
1.
2.
SELECT * FROM TABLE(P_TEST.get_test_table@dblink);
ORA-06553: PLS-752: Табличная функция GET_TEST_TABLE находится в противоречивом состоянии.


Как вытащить данные ?
...
Рейтинг: 0 / 0
28.09.2017, 07:36
    #39527412
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить данные через DBLINK
Пробовал создать запрос, в котором join-ятся dblink-овские таблицы...
запрос выполняется очень долго... не дождался окончания выполнения, сбросил...
Ну тут понятно, план создастся не может... вытаскивание скорее всего всех данных из таблиц dblink-а... Ну и соответственно зависание.
...
Рейтинг: 0 / 0
28.09.2017, 09:15
    #39527443
проходил мимо...
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить данные через DBLINK
...
Рейтинг: 0 / 0
28.09.2017, 09:52
    #39527474
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить данные через DBLINK
проходил мимо...Владимир СА,

Restriction on Using User-Defined Types with a Remote Database
А пояснить можно ?
...
Рейтинг: 0 / 0
28.09.2017, 09:57
    #39527487
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить данные через DBLINK
Владимир САпроходил мимо...Владимир СА,

Restriction on Using User-Defined Types with a Remote Database
А пояснить можно ?
Там всего 3 абзаца, который непонятен?
...
Рейтинг: 0 / 0
28.09.2017, 10:05
    #39527492
MazoHist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить данные через DBLINK
Нужно получить именно набор данных курсора или одно значение из него? Если первое - то через XML. Второе можно провернуть через dbms_sql@remote, хотя велосипед выйдет знатный :)
...
Рейтинг: 0 / 0
28.09.2017, 10:05
    #39527494
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить данные через DBLINK
AlexFF__|Владимир САпропущено...

А пояснить можно ?
Там всего 3 абзаца, который непонятен?
авторYou can use the CREATE TYPE statement with the optional keyword OID to create a user-specified object identifier (OID) that allows an object type to be used in multiple databases. See the discussion on assigning an OID to an object type in the Oracle Database Data Cartridge Developer's Guide.Желательна идеология понимания, как это реализовать...
...
Рейтинг: 0 / 0
28.09.2017, 10:06
    #39527495
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить данные через DBLINK
MazoHistНужно получить именно набор данных курсора или одно значение из него? Если первое - то через XML . Второе можно провернуть через dbms_sql@remote, хотя велосипед выйдет знатный :)Я уже об этом думал.
Это охренеть... Потом распарсивать...
...
Рейтинг: 0 / 0
28.09.2017, 10:27
    #39527505
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить данные через DBLINK
Владимир САAlexFF__|пропущено...

Там всего 3 абзаца, который непонятен?
авторYou can use the CREATE TYPE statement with the optional keyword OID to create a user-specified object identifier (OID) that allows an object type to be used in multiple databases. See the discussion on assigning an OID to an object type in the Oracle Database Data Cartridge Developer's Guide.Желательна идеология понимания, как это реализовать...
CREATE OR REPLACE TYPE ... OID '90A1350CAC40434EE044001CC4B76823' IS TABLE of ...
...
Рейтинг: 0 / 0
28.09.2017, 10:34
    #39527509
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить данные через DBLINK
AlexFF__|Владимир САпропущено...

пропущено...
Желательна идеология понимания, как это реализовать...
CREATE OR REPLACE TYPE ... OID '90A1350CAC40434EE044001CC4B76823' IS TABLE of ...Я вообще то спросил про идеологию... Мне нужен результат курсор..
Один пользователь вызвал с одним параметром, другой с другим...
Как это будет согласовываться с :
авторCREATE OR REPLACE TYPE ... OID '90A1350CAC40434EE044001CC4B76823' IS TABLE of ... ?
Это создается 1 раз, я правильно понимаю ?
Как в нее будут записываться данные при разных вызовах ? Перекрывание ?
...
Рейтинг: 0 / 0
28.09.2017, 10:53
    #39527528
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить данные через DBLINK
Владимир САAlexFF__|пропущено...

CREATE OR REPLACE TYPE ... OID '90A1350CAC40434EE044001CC4B76823' IS TABLE of ...Я вообще то спросил про идеологию... Мне нужен результат курсор..
Один пользователь вызвал с одним параметром, другой с другим...
Как это будет согласовываться с :
авторCREATE OR REPLACE TYPE ... OID '90A1350CAC40434EE044001CC4B76823' IS TABLE of ... ?
Это создается 1 раз, я правильно понимаю ?
Как в нее будут записываться данные при разных вызовах ? Перекрывание ?
Действительно, чего я лезу ...
Сколько раз уже себе говорил, что умные сами разберутся, а остальные =(
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как получить данные через DBLINK / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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