Я работаю в двух разных схемах Oracle на двух разных экземплярах Oracle. Я определил несколько типов и наборов типов для передачи данных между этими схемами. Проблема, с которой я сталкиваюсь, заключается в том, что, хотя тип имеет абсолютно одинаковые определения (одни и те же сценарии, используемые для создания обоих наборов в схемах), Oracle видит их как разные объекты, которые не являются взаимозаменяемыми.
Я думал о приведении входящего объекта удаленного типа к тому же локальному типу, но я получаю сообщение об ошибке при ссылке на типы через ссылки dblinks.
По сути, я делаю следующее:
DECLARE
MyType LocalType; -- note, same definition as the RemoteType (same script)
BEGIN
REMOTE_SCHEMA.PACKAGE.PROCEDURE@DBLINK( MyType ); -- MyType is an OUT param
LOCAL_SCHEMA.PACKAGE.PROCEDURE( MyType ); -- IN param
END;
Сбой, потому что вызов процедуры REMOTE не может понять MyType, поскольку он обрабатывает LocalType и RemoteType как разные типы объектов.
Я также попытался объявить MyType следующим образом:
MyType REMOTE_SCHEMA.RemoteType@DBLINK;
но я получаю еще одну ошибку при ссылке на типы через ссылки dblinks. CASTing между типами также не работает, потому что для приведения я должен ссылаться на удаленный тип через dblink - та же проблема, та же ошибка. Я также пытался использовать SYS.ANYDATA в качестве объекта, который пересекает два экземпляра, но он получает похожую ошибку.
Есть идеи?
UPDATE:
Попытка объявить тип объекта с обеих сторон DBLINK с использованием одного и того же OID (полученного вручную с помощью SYS_OP_GUID()
), но Oracle по-прежнему «видит» два объекта как разные и выдает ошибку «неправильное число или типы аргументов».