Типы Oracle sql через dblink
-
22-07-2019 - |
Вопрос
У меня есть две схемы:A и B (Oracle 9).В A есть dblink на B.В B есть пакет, который я вызываю из A.Процедуры в пакете B могут возвращать различные результаты подсчета, и я думаю, что возврат коллекции - лучший способ по этой причине.
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 невозможно.
Я думаю использовать временные таблицы.Но, во-первых, это не так хорошо (после того, как удаленная функция вернет значение, вызывающая сторона должна выбрать коллекцию из удаленной таблицы).И есть опасения по поводу замедления работы с временными таблицами.
Может быть, кто знает альтернативное взаимодействие?
Решение
У меня были подобные проблемы в прошлом. Затем я пришел к выводу, что по сути ссылки на базы данных Oracle "неработающие" для всех, кроме простых типов SQL (особенно UDT, CLOBS может иметь проблемы, XMLType также может иметь). Если вы можете заставить работать решение OID, тогда удачи вам.
Решение, к которому я прибегнул, состояло в том, чтобы использовать хранимую процедуру Java вместо ссылки на БД. Р>
Характеристики хранимой процедуры Java:
<Ол>Это немного работы, но если у вас есть немного Java, вы сможете "вырезать и вставлять" решение вместе из документации Oracle и образца.
Надеюсь, это поможет.
Другие советы
Посмотреть это существующее обсуждение
Альтернативное взаимодействие - иметь одну базу данных со схемами A и B вместо двух баз данных со ссылкой на базу данных. Р>
Мое решение.На боковой стороне B я создаю временную таблицу, подобную записи коллекции.В самом A сбоку у меня есть оболочка DBMS_SQL, которая вызывает процедуру через dblink.Эта процедура записывает коллекцию результатов во временную таблицу.После успешного завершения удаленной процедуры я выбираю результаты из удаленной временной таблицы и преобразую ее в тип локальной коллекции.
Ограничения 1.необходимость постоянной синхронизации объектов.2.невозможность использования сторонней процедуры (вызывающей удаленную процедуру) в SQL-запросе.3.сложность использования.