powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вернуть массив sys.ODCIObjectList по dblink. Можно?
9 сообщений из 9, страница 1 из 1
Вернуть массив sys.ODCIObjectList по dblink. Можно?
    #40119183
stil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть процедура в одной базе:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
    PROCEDURE CLEANUP_TABLES(p_results OUT sys.ODCIObjectList)
    IS
      BEGIN
        --некая очистка

        --логирование
        p_results.EXTEND;
        p_results(p_results.COUNT) := sys.ODCIObject (r_list_report_dates.report_date, 'Успешно очищено');
      END;



Есть ее вызов по dblink в другой

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
   DECLARE
      v_results sys.ODCIObjectList;
    BEGIN
       PG_CLEANUP.CLEANUP_TABLES@DBLINK(v_results);
       FOR r_results IN (SELECT cast(objectschema AS DATE) AS DT,
                                 objectname AS RETURN_MESSAGE
                        FROM TABLE(v_results)
                        ORDER BY DT
                        )
        LOOP        
          dbms_output.put_line('Дата: '||to_char(r_results.DT,'DD.MM.YYYY') || '. Результат: ' || r_results.RETURN_MESSAGE);
        END LOOP;
     END;



Без DBLINK процедура прекрасно работает. Массив результатов выводится, а вот

при запуске с другой базы - получаю

Код: plsql
1.
2.
3.
4.
ORA-06550: line 4, column 8:
PLS-00306: wrong number or types of arguments in call to 'CLEANUP_TABLE'
ORA-06550: line 4, column 8:
PL/SQL: Statement ignored



Если убрать v_results из процедуры (не передавать в OUT параметре) процедура тоже прекрасно отрабатывает и по dblink

То есть проблема именно в этом параметре. Варианты, что я чтото не туда комплилирую я исключил. Похоже удаленная база почему то не хочет понимать такой параметр - массив

Это ограничение оракла? Или я чтото не так сделал?



v12
...
Рейтинг: 0 / 0
Вернуть массив sys.ODCIObjectList по dblink. Можно?
    #40119257
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stil

Это ограничение оракла? Или я что то не так сделал?


Restriction on Using User-Defined Types with a Remote Database

User-defined types (specifically, types declared with a SQL CREATE TYPE statement, as opposed to types declared within a PL/SQL package) are currently useful only within a single database. You cannot use a database link to do any of the following*:

Connect to a remote database to query, insert, or update a user-defined type or an object REF on a remote table
Use database links within PL/SQL code to declare a local variable of a remote user-defined type
Convey a user-defined type argument or return value in a PL/SQL remote procedure call.

SY.
...
Рейтинг: 0 / 0
Вернуть массив sys.ODCIObjectList по dblink. Можно?
    #40119386
stil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

Чегото я запутался. Как сделать в процедуре cleanup заполнение переменной коллекционного типа, а с вызывающей стороны ее прочитать по dblink? Не передавая в параметрах?
...
Рейтинг: 0 / 0
Вернуть массив sys.ODCIObjectList по dblink. Можно?
    #40119427
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stil

а с вызывающей стороны ее прочитать по dblink? Не передавая в параметрах?


Только через ж... с использованием типов с одинаковым OID, двух таблиц (local и remote) и двух db links (db1 --> db2 и db2 --> db1)

SY.
...
Рейтинг: 0 / 0
Вернуть массив sys.ODCIObjectList по dblink. Можно?
    #40119439
stil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

Похоже проще не заморачиваться коллекцией, а просто передать длинную строку в варчаре с разделителями
...
Рейтинг: 0 / 0
Вернуть массив sys.ODCIObjectList по dblink. Можно?
    #40119462
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stil
Код: plsql
1.
2.
3.
4.
5.
6.
   v_results sys.ODCIObjectList;
    BEGIN
       PG_CLEANUP.CLEANUP_TABLES@DBLINK(v_results);
       FOR r_results IN (SELECT cast(objectschema AS DATE) AS DT,
                                 objectname AS RETURN_MESSAGE
                        FROM TABLE(v_results)

Поскольку объектный тип извращённо и nls-зависимо притянут за уши, то проще будет передать несколько ассоциативных массивов, которые прекрасно пролазят через link.
...
Рейтинг: 0 / 0
Вернуть массив sys.ODCIObjectList по dblink. Можно?
    #40119561
stil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
stil
Код: plsql
1.
2.
3.
4.
5.
6.
   v_results sys.ODCIObjectList;
    BEGIN
       PG_CLEANUP.CLEANUP_TABLES@DBLINK(v_results);
       FOR r_results IN (SELECT cast(objectschema AS DATE) AS DT,
                                 objectname AS RETURN_MESSAGE
                        FROM TABLE(v_results)

Поскольку объектный тип извращённо и nls-зависимо притянут за уши, то проще будет передать несколько ассоциативных массивов, которые прекрасно пролазят через link.


Ну мне не обязательно притягивать чтото за уши. Просто надо вернуть список почищеных сейций таблицы, секционированной по дате с результатом по каждой

Но стационарные типы сделать нет возможности. Поэтому попытался прикрутить sys.ODCIObjectList (раньше его не использовал). Понятно что он не для этого, но вроде многие используют в качестве двумерного массива (в интернетах попадаются примеры)

Можно попытаться сделать хеш INDEX BY DATE. Попробую сейчас

Но в идеале конечно и трехмерную бы конструкцию - чтобы например еще передать кол-во строк (ну и ждля понимания что можно, а что нельзя)
...
Рейтинг: 0 / 0
Вернуть массив sys.ODCIObjectList по dblink. Можно?
    #40119720
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stil
Ну мне не обязательно притягивать чтото за уши.
Но зачем-то притянул.
stil
Можно попытаться сделать хеш INDEX BY DATE. Попробую сейчас
Ты не читаешь, что написано, или не в состоянии понять, что такое "несколько ассоциативных массивов".
...
Рейтинг: 0 / 0
Вернуть массив sys.ODCIObjectList по dblink. Можно?
    #40119730
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stil,

Elic намекает коллекция объектов = набор ассоциативных массивов на атрибуты объекта связанных по индексу.

SY.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вернуть массив sys.ODCIObjectList по dblink. Можно?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]