Сохраняет ли вложенная таблица порядок, когда она не сохраняется?

У меня есть функция PLSQL, которая заполняет и возвращает вложенную таблицу:

select distinct id bulk collect into my_nested_table
from user
order by id;
return my_nested_table;

Согласно документам, вложенные таблицы представляют собой мультимножества и не имеют внутреннего порядка.

Могу ли я, тем не менее, предположить, что вложенная таблица, возвращаемая из приведенной выше функции, будет упорядочена по идентификатору (как следует из оператора select) и сохранит этот порядок, пока я не сохраню его в БД?

Предоставление ссылки на документацию является плюсом. :)


person Roland    schedule 17.06.2015    source источник


Ответы (2)


Прежде всего, вы должны знать, что такое NESTED TABLE

Согласно Документу Oracle

Внутри базы данных вложенные таблицы можно рассматривать как таблицы базы данных с одним столбцом. Oracle хранит строки вложенной таблицы без определенного порядка. Но когда вы извлекаете вложенную таблицу в переменную PL/SQL, строкам присваиваются последовательные индексы, начинающиеся с 1. Это дает вам доступ к отдельным строкам, подобный массиву.

Это таблица с одним столбцом, поведение которой равно array, но они не ограничены (размер может динамически увеличиваться). Более того, изначально NESTED TABLE плотны по своей природе, но позже они стали разреженными (как только вы удалите из нее какой-либо элемент).

введите здесь описание изображения

person Ravi    schedule 17.06.2015
comment
Могу ли я предположить, что оператор bulk collect into будет вставлять во вложенную таблицу последовательные индексы, начиная с 1? - person Roland; 17.06.2015
comment
да. Вот что произошло. Он начнет индекс с 1. Если он не был инициализирован - person Ravi; 17.06.2015
comment
‹nitpick›При заполнении коллекции с помощью BULK COLLECT индексы всегда будут начинаться с 1, и коллекция всегда будет плотной — независимо от того, была ли она инициализирована раньше или нет‹/nitpick› - person Frank Schmitt; 17.06.2015

вы можете полагаться на порядок сбора до тех пор, пока он не будет сохранен в pl/sql и не будет выполнять какие-либо добавления или удаления элементов в сборе.

person vishnu sable    schedule 18.06.2015