Передача Oracle UDT в пакеты / процедуры с использованием DBLink - PullRequest
0 голосов
/ 04 февраля 2020

Я вполне уверен, что этот вопрос был опубликован несколько раз на разных форумах, но я все еще пытаюсь найти альтернативу моей проблеме, которая включает использование UDT с DBLinks. Из-за ограничений dblink некоторые говорят, что это невозможно, а в документации Oracle говорится, что это возможно с использованием 'oid', но в некоторой степени. Сможет ли кто-нибудь помочь мне понять, будет ли эта моя попытка плодотворной? Ниже приведен пример реализации, которого я пытаюсь достичь.

Исходная база данных:

create type testlinktype oid '9D5A9AFA0928AF64E0531DEEF50AF099' as object
( v1 varchar2(10) , v2 varchar2(20) );
/

create table testlink 
( name testlinktype);

CREATE OR REPLACE package src_to_target
is
    PROCEDURE test_proc (op_record in testlinktype);
end;
/


create or replace package src_to_target
is
    PROCEDURE test_proc (op_record in testlinktype) AS
    begin
        insert into testlink values(op_record);
    end;
end;
/

exec src_to_target.test_proc(testlinktype ('RC','AB'));-- works

grant all on testlink to TARGET_ROLE;
grant all on src_to_target to TARGET_ROLE;

Целевая база данных:

create type testlinktype oid '9D5A9AFA0928AF64E0531DEEF50AF099' as object
( v1 varchar2(10) , v2 varchar2(20) );
/

select * from src.testlink@dblink; --able to seclect the table

Create or replace synonym syn_src_to_target for src.src_to_target@dblink;

exec syn_src_to_target.test_proc(testlinktype ('RC','AB'));--unable to execute this

ORA-06550: line 0, column 0:
PLS-00907: cannot load library unit SRC.TESTLINKTYPE@dblink
(referenced by SRC.SRC_TO_TARGET@dblink)

Сначала я получил PLS-00306: неправильное число или типы аргументов , но это прошло после предоставления грантов на выполнение, но я думаю, что это также проблема, которая не решена полностью.

Imp Примечание: Исходная база данных находится на 12 c, а цель на 11g. Цель состоит в том, чтобы импортировать некоторый код в 12 c, который использовал UDT, и затем поддерживать эту связь, используя dblink для 11g.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...