Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Копирование коллекций / 12 сообщений из 12, страница 1 из 1
05.10.2018, 09:00
    #39713332
IMNO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование коллекций
Здравствуйте.

Возник вопрос по поводу копирования коллекций.
Для примера, есть коллекция вида:
Код: plsql
1.
2.
3.
TYPE tab_collect IS RECORD(a NUMBER(10), b VARCHAR2(100));
TYPE t_collect IS TABLE OF tab_collect;
r_collect t_collect := t_collect();



Пусть в коллекции r_collect 100000 элементов.
Делаю вторую точно такую же коллекцию r_collect2, и пишу следующее:
Код: plsql
1.
r_collect2 := r_collect;



Так во вопрос. Первая коллекция копируется во вторую полностью? Все 100000 элементов?
Или копируется только ссылка на область памяти? То есть фактически это будут не две разные области памяти, а одна область памяти с двумя ссылками на неё?
...
Рейтинг: 0 / 0
05.10.2018, 09:41
    #39713361
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование коллекций
IMNOТак во вопрос.Ты не умеешь поставить эксперимент?
...
Рейтинг: 0 / 0
05.10.2018, 09:47
    #39713366
IMNO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование коллекций
Я уже.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
DECLARE 
  TYPE t_test IS RECORD(a NUMBER(10), b VARCHAR2(250));
  TYPE tab_test IS TABLE OF t_test;
  r_test1 tab_test := tab_test();
  r_test2 tab_test := tab_test();
BEGIN  
  r_test1.EXTEND(1);
  r_test1(1).a := 1;
  r_test1(1).b := '1';
  
  r_test2 := r_test1;
  
  dbms_output.put_line('r_test2 = ' || r_test2(1).a);
  dbms_output.put_line('r_test2 = ' || r_test2(1).b);
  
  r_test2(1).a := 2;
  r_test2(1).b := '2';
  
  dbms_output.put_line('r_test1 = ' || r_test1(1).a);
  dbms_output.put_line('r_test1 = ' || r_test1(1).b);
  dbms_output.put_line('r_test2 = ' || r_test2(1).a);
  dbms_output.put_line('r_test2 = ' || r_test2(1).b);
END;


Ну то есть коллекция полностью копируется.
Хотел получить подтверждение от более опытных людей.

Это же получается, что на очень больших коллекциях, пока оракл будет копировать коллекцию, система и подвиснуть может. Опасно.
...
Рейтинг: 0 / 0
05.10.2018, 10:03
    #39713380
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование коллекций
IMNOЯ уже.И что ж ты узнал из своего нетленного теста?
IMNOна очень больших коллекциях, пока оракл будет копировать коллекцию, система и подвиснуть может.А ты зря не копируй. Или работай пачками.
...
Рейтинг: 0 / 0
05.10.2018, 10:11
    #39713385
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование коллекций
IMNOподвиснутьКопирование гигабайта память-память занимает доли секунды. Читать гигабайт данных с диска несколько дольше, но это же не тебя не беспокоит.
...
Рейтинг: 0 / 0
05.10.2018, 10:16
    #39713389
IMNO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование коллекций
ElicИ что ж ты узнал из своего нетленного теста?.

Если бы вторая коллекция указывал на ту же область памти, что и первая, то запись:
Код: plsql
1.
2.
r_test2(1).a := 2;
r_test2(1).b := '2';



перезаписала бы значения и из первой коллекции.
Во втором выводе тогда не выводились бы "1", только "2".

-2-Копирование гигабайта память-память занимает доли секунды.

Ну честно говоря, я даже не представляю сколько по времени будет копироваться 1 гигабайт. Сам факт обработки гигабайтов информации в памяти не кажется мне хорошей идеей.
...
Рейтинг: 0 / 0
05.10.2018, 10:26
    #39713396
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование коллекций
IMNOЕсли бы вторая коллекция указывал на ту же область памти, что и перваяУ тебе серьёзные проблемы в основах, раз даже такую очевидность тебе приходится проверять.
Про технологии "копирование при изменении" вообще бессмысленно говорить.
...
Рейтинг: 0 / 0
05.10.2018, 10:31
    #39713397
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование коллекций
IMNOElicИ что ж ты узнал из своего нетленного теста?.

Если бы вторая коллекция указывал на ту же область памти, что и первая, то запись:


проверте в етот момент
сразу после r_test2 := r_test1; и до r_test2(1).a := 2;

.....
stax
...
Рейтинг: 0 / 0
05.10.2018, 10:37
    #39713401
IMNO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование коллекций
StaxIMNOпропущено...


Если бы вторая коллекция указывал на ту же область памти, что и первая, то запись:


проверте в етот момент
сразу после r_test2 := r_test1; и до r_test2(1).a := 2;

.....
stax

Ничего не понял. Что проверить?
...
Рейтинг: 0 / 0
05.10.2018, 10:38
    #39713402
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование коллекций
Достаточно проверить занимаемую память
...
Рейтинг: 0 / 0
05.10.2018, 11:02
    #39713413
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование коллекций
IMNOСам факт обработки гигабайтов информации в памяти не кажется мне хорошей идеей.Это не к форуму, а тому, кто тебя заставляет помещать в коллекцию миллионы элементов.
...
Рейтинг: 0 / 0
05.10.2018, 11:11
    #39713421
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование коллекций
IMNOStaxпропущено...


проверте в етот момент
сразу после r_test2 := r_test1; и до r_test2(1).a := 2;

.....
stax

Ничего не понял. Что проверить?

будут ли две разные области памяти, или одна область памяти с двумя ссылками на неё
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Копирование коллекций / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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