Я вполне уверен, что этот вопрос был опубликован несколько раз на разных форумах, но я все еще пытаюсь найти альтернативу моей проблеме, которая включает использование 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.