powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как получить данные через DBLINK
11 сообщений из 11, страница 1 из 1
Как получить данные через DBLINK
    #39527407
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как получить данные через DBLINK
    #39527412
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал создать запрос, в котором join-ятся dblink-овские таблицы...
запрос выполняется очень долго... не дождался окончания выполнения, сбросил...
Ну тут понятно, план создастся не может... вытаскивание скорее всего всех данных из таблиц dblink-а... Ну и соответственно зависание.
...
Рейтинг: 0 / 0
Как получить данные через DBLINK
    #39527443
проходил мимо...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как получить данные через DBLINK
    #39527474
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходил мимо...Владимир СА,

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

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

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

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


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