У меня есть две схемы: A и B (Oracle 9). На A есть dblink B. В B есть пакет, который я вызываю из A. Процедуры в B-пакете могут возвращать разные результаты подсчета, и я думаю, что возвращение коллекции является лучшим способом по этой причине.Oracle sql types over dblink
create type B.tr_rad as object (
name varchar2(64)
,code number
,vendor number
,val varchar2(255)
,num number
);
create type B.tt_rad as varray(256) of B.tr_rad;
Но из схемы я не могу использовать тип tt_rad, потому что с помощью SQL-типов по DBLink не поддерживается. DBMS_SQL не поддерживается курсорами. Создать типы с одинаковым OID невозможно.
Я думаю использовать временные таблицы. Но, во-первых, это не так хорошо (после того, как удаленная функция вернет значение, вызывающая сторона должна выбрать коллекцию из удаленной таблицы). И есть опасения замедлить работу с временными таблицами.
Возможно, кто знает об альтернативном взаимодействии?
Решение OID работает на моей машине. Какую версию Oracle вы использовали? – tuinstoel
Это было довольно много лет назад (вероятно, 8, возможно, 9i). Моя особая проблема заключалась в раздувании CLOBS или VARCHAR2 (4000). Путь java позволяет обойти ограничения DBLinks. –
8 и 9 немного старые. Он работает на моей машине с OID, я сделал ссылку с Oracle 11.1 на Oracle 10.2. – tuinstoel