Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Mickey
Зарегистрирован: 11.02.2005 Сообщения: 4
|
Добавлено: Пт Апр 29 2005 09:13 Заголовок сообщения: Oracle - когда какой тип коллекции использовать? |
|
|
Плиз, кто-нибудь может привести примеры тех случаев, когда вместо ассоциативных массивов, лучше использовать вложенные таблицы или VARRAY в PL/SQL коде?
Ну, конечно, те случаи, когда есть таблички с VARRAY или NESTED TABLE не рассматриваем  _________________ Get your hands up!!!
Make noise!!! Make noise!!! |
|
Вернуться к началу |
|
 |
Mickey
Зарегистрирован: 11.02.2005 Сообщения: 4
|
Добавлено: Пт Апр 29 2005 16:51 Заголовок сообщения: |
|
|
пока вижу тока пару достойный плюс их использования:
1 - к таким коллекциям можно применять SELECT'ы. Например можно их отсортировать или попробовать построить иерархический запрос (в этом случае типы коллекций надо объявлять в базе).
2 - задать ограничение на разреженность, ограниченность и т.п. - непосредственно вытекающие из их определения.
Но часто ли это используется? - вот в чем вопрос))) _________________ Get your hands up!!!
Make noise!!! Make noise!!! |
|
Вернуться к началу |
|
 |
Mickey
Зарегистрирован: 11.02.2005 Сообщения: 4
|
Добавлено: Сб Апр 30 2005 10:42 Заголовок сообщения: |
|
|
другой пример
если у вас в коллекции хранится список чего-нибудь, и вы хотите выдернуть из таблицы записи в которых значение поля принимает значение одного из элементов коллекции. мудрено звучит, но проблема достаточно часто встречается, а решение тривиально. а кое у кого я видел ее реализацию через Dynamic SQL
CREATE TABLE my_table(n NUMBER);
CREATE TYPE my_type IS TABLE OF NUMBER;
INSERT INTO my_table(n) VALUES (1);
INSERT INTO my_table(n) VALUES (2);
INSERT INTO my_table(n) VALUES (3);
DECLARE
arr my_table := my_table(1,3,5);
nums DBMS_SQL.NUMBER_TABLE;
BEGIN
-- Зафетчим данные из таблички
SELECT n BULK COLLECT INTO nums
FROM my_table
WHERE n IN (SELECT column_value
FROM TABLE(ar));
-- выведем на что получилось
FOR i IN nums.FIRST..nums.LAST LOOP
DBMS_OUTPUT.PUT_LINE(nums(i));
END LOOP;
END;
На экране будет:
1
3
 _________________ Get your hands up!!!
Make noise!!! Make noise!!! |
|
Вернуться к началу |
|
 |
|