powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-22905: невозможно получить доступ к вложенной таблице в Oracle 11g
8 сообщений из 8, страница 1 из 1
ORA-22905: невозможно получить доступ к вложенной таблице в Oracle 11g
    #39642858
Wisky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понимаю, что эта тема изъедена, но так и не смогла найти ответ.
В Oracle 11.2

Не получается воспользоваться коллекцией как таблицей.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
DECLARE 
    c NUMBER;
    TYPE t_ID_SUBJECT IS TABLE OF TABLE1.ID_SUBJECT%TYPE INDEX BY PLS_INTEGER;
    TYPE t_ID_DETECTION IS TABLE OF TABLE1.ID_DETECTION%TYPE INDEX BY PLS_INTEGER;
    v_ID_SUBJECT t_ID_SUBJECT ;
    v_ID_DETECTION t_ID_DETECTION;

BEGIN
        
        DECLARE 
          CURSOR c_TABLE IS
              SELECT  jd.ID_DETECTION,
                      jd.ID_SUBJECT
                FROM TABLE1 jd     ;
        
          BEGIN
          
                OPEN c_TABLE;
                FETCH c_TABLE BULK COLLECT
                  INTO  v_ID_DETECTION,
                        v_ID_SUBJECT;
                CLOSE c_TABLE;
    
------

                SELECT COUNT(*) INTO c
                    FROM  table(v_ID_DETECTION) t;

--получаю  ORA-22905: невозможно получить доступ к строкам элемента, не являющегося вложенной таблицей 

                 DBMS_OUTPUT.PUT_LINE(c);
               
          END;

END;
...
Рейтинг: 0 / 0
ORA-22905: невозможно получить доступ к вложенной таблице в Oracle 11g
    #39642859
brzl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wisky,

Код: plsql
1.
SELECT COUNT(*) INTO c  FROM  table(v_ID_DETECTION) t;



Такое доступно только с версии 12.2

Объявите типы как nested table, у вас associative array

Код: plsql
1.
2.
TYPE t_ID_SUBJECT IS TABLE OF TABLE1.ID_SUBJECT%TYPE
TYPE t_ID_DETECTION IS TABLE OF TABLE1.ID_DETECTION%TYPE
...
Рейтинг: 0 / 0
ORA-22905: невозможно получить доступ к вложенной таблице в Oracle 11g
    #39642862
brzl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хотя тут все равно не заработает, типы объявлены локально.
...
Рейтинг: 0 / 0
ORA-22905: невозможно получить доступ к вложенной таблице в Oracle 11g
    #39642880
Wisky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
brzlхотя тут все равно не заработает, типы объявлены локально.
Да, тогда PLS-00642: локальные типы коллекций не допускаются в операторах SQL.

То есть мне надо на каждое поле создавать тип как объект или какой то более простой тип?
Код: plsql
1.
CREATE TYPE t_ID_SUBJECT IS OBJECT (varchar2(36));
...
Рейтинг: 0 / 0
ORA-22905: невозможно получить доступ к вложенной таблице в Oracle 11g
    #39642893
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WiskyНе получается воспользоваться коллекцией как таблицей.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
DECLARE 
    c NUMBER;
    TYPE t_ID_SUBJECT IS TABLE OF TABLE1.ID_SUBJECT%TYPE INDEX BY PLS_INTEGER;
    TYPE t_ID_DETECTION IS TABLE OF TABLE1.ID_DETECTION%TYPE INDEX BY PLS_INTEGER;
    v_ID_SUBJECT t_ID_SUBJECT ;
    v_ID_DETECTION t_ID_DETECTION;

BEGIN
...
--                SELECT COUNT(*) INTO c
--                    FROM  table(v_ID_DETECTION) t;

                 DBMS_OUTPUT.PUT_LINE(v_ID_DETECTION.count);
...
END;



Правда в том, что Вам не нужно пользоваться ассоциативным массивом как таблицей.
Да и nested table тоже не нужен.
По крайней мере, на указанных примерах - уж точно.
А если изложите вменяемый кейс - то Вам подскажут как его правильно обыграть.
...
Рейтинг: 0 / 0
ORA-22905: невозможно получить доступ к вложенной таблице в Oracle 11g
    #39642899
Wisky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конечная моя задача перенести данные между схемами. Глубина вложения FK местами до семи уровней. Критерий выборки переноса накладывается на одну из дочерних таблиц. Мне требуется подняться до прородителя и перенести весь куст.
...
Рейтинг: 0 / 0
ORA-22905: невозможно получить доступ к вложенной таблице в Oracle 11g
    #39642910
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и при чем тут bulk collect?
Задача бьется на три части:
1. Подготовительная - вычисление "кустов", по необходимости - материализация духов (складывание PK "корня куста" во временную таблицу), подготовка схемы-приемника (по необходимости выделение технологического окна, отключение FK или откладывание проверки для deferrable ограничений, отключение лишних индексов).
2. Собственно перенос данных - тривиально, потабличный insert-select, merge, exchange partition - по показаниям.
3. Финализация - включение отключенных constraints, перестройка отключенных индексов, пересбор статистики - также по потребности.
...
Рейтинг: 0 / 0
ORA-22905: невозможно получить доступ к вложенной таблице в Oracle 11g
    #39642919
Wisky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы считаете, что коллекцию надо заменить временной таблицей, совершенно согласна. Во временную таблицу класть ключ или копию?
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-22905: невозможно получить доступ к вложенной таблице в Oracle 11g
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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