powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объединение коллекций без цикла
10 сообщений из 10, страница 1 из 1
Объединение коллекций без цикла
    #40009752
wolfio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Пожалуйста, подскажите, возможно ли без цикла объединить 2 коллекции?
Не нашел в документации подходящую конструкцию Forall

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
declare
    type T$UPDREC is record (REC_ID	number, OLD_VALUE number);
    type T$TBUPDRECS is table of T$UPDREC index by binary_integer;
		coll_main	T$TBUPDRECS;
		coll_temp	T$TBUPDRECS;
begin
    coll_main(1).REC_ID := 11;
    coll_main(1).OLD_VALUE := 1;
    
    coll_main(2).REC_ID := 22;
    coll_main(2).OLD_VALUE := 2;
    -----
    coll_temp(1).REC_ID := 33;
    coll_temp(1).OLD_VALUE := 3;
    
    
    forall i in coll_temp.FIRST..coll_temp.LAST
      insert into coll_main values(coll_temp(i)); 
		
end;



Код: plaintext
1.
2.
3.
ORA-06550: Строка 18, столбец 19:
PL/SQL: ORA-00942: таблица или представление пользователя не существует
ORA-06550: Строка 18, столбец 7:
PL/SQL: SQL Statement ignored
...
Рейтинг: 0 / 0
Объединение коллекций без цикла
    #40009757
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolfio,

Типа такого что ли?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
set serverout on
declare
    type t_xyz is table of number;
    col1 t_xyz;
    col2 t_xyz;
begin
    select level bulk collect into col1 from dual connect by level<=10;
    select level+10 bulk collect into col2 from dual connect by level<=10;
    
    col1 := col1 multiset union col2;
    
    for i in col1.first .. col1.last loop
        dbms_output.put_line(col1(i));
    end loop;
end;
/
...
Рейтинг: 0 / 0
Объединение коллекций без цикла
    #40009758
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RTFM multiset union all
...
Рейтинг: 0 / 0
Объединение коллекций без цикла
    #40009767
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolfio,

С record не пройдет фокус SET/MULTISET. Нужно делать TYPE уровня схемы и пилить методы MAP/ORDER
...
Рейтинг: 0 / 0
Объединение коллекций без цикла
    #40009769
wolfio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oragraf,
спасибо.
...
Рейтинг: 0 / 0
Объединение коллекций без цикла
    #40009776
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oragraf,

У ТС проблема будет скорее в index by binary_integer для multiset.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
set serverout on
declare
    type r_xyz is record (n1 number, n2 number);
    type t_xyz is table of r_xyz; --index by binary_integer;
    col1 t_xyz;
    col2 t_xyz;
begin
    select level, 10-level bulk collect into col1 from dual connect by level<=10;
    select level+10, 20-level bulk collect into col2 from dual connect by level<=10;
    
    col1 := col1 multiset union all col2;
    
    for i in col1.first .. col1.last loop
        dbms_output.put_line(col1(i).n1||':'||col1(i).n2);
    end loop;
end;
/
...
Рейтинг: 0 / 0
Объединение коллекций без цикла
    #40009778
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oragraf
и пилить методы MAP/ORDER
Они нужны только тогда, когда требуется сравнение элементов. Для multiset union all оно не нужно.
...
Рейтинг: 0 / 0
Объединение коллекций без цикла
    #40009786
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

Ну, могу только предположить, что они ему понадобятся, если вдруг union except или еще чего. Union all стоит в примерах первым, и в свое время я долго изумлялся почему Union all работает, а другие виды объединений ни в какую.
...
Рейтинг: 0 / 0
Объединение коллекций без цикла
    #40009787
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

Числовой индекс, по-моему, допускается. Главное, чтобы не строковый.
...
Рейтинг: 0 / 0
Объединение коллекций без цикла
    #40009793
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oragraf
Числовой индекс, по-моему, допускается.
Нет. Multiset operators применяются только к nested tables.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объединение коллекций без цикла
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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