powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как через цикл добавить к коллекции все элементы
5 сообщений из 5, страница 1 из 1
как через цикл добавить к коллекции все элементы
    #40125054
Rus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Подскажите, пожалуйста, возможно ли в рамках цикла добавить данные к коллекции, чтобы потом их разом вернуть через out?
т.е. в данной реализации коллекция перезаписывается (наверное), возвращаются только последние элементы, т.е.
4
4
4,
а хочется видеть
2
2
3
4
4
4

Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
create type p_tab_type is table of number;

create or replace procedure test_in_out
(
v_num_tab out p_tab_type
)
is
v_num_tab_1 p_tab_type;

    begin

            for i in
            (
                select 1 num
                from dual
                union all
                select 2 from dual
                union all
                select 3 from dual
                 union all
                select 4 from dual
                order by 1 
            )
            loop
                
                  select num
                   bulk collect 
                   into v_num_tab_1
                  from   
                 (
                    select 4 num
                    from dual
                    union all
                    select 4 num
                    from dual
                    union all
                    select 2 from dual
                    union all
                    select 2 from dual
                    union all
                    select 3 from dual
                    union all
                    select 4 from dual
                    union all
                    select 5 from dual
                    )
                    where num = i.num;
                                    
                    
                    
                            if v_num_tab_1.count > 0 then 
                            
                                for i in v_num_tab_1.first..v_num_tab_1.last
                                
                                    loop
                                            v_num_tab := p_tab_type();
                                            v_num_tab.extend(v_num_tab_1.count);
                                            v_num_tab := v_num_tab_1;
                                            
                                    end loop;
                                    
                           end if;
                           
                 
                                
            end loop;
            
    end test_in_out;



    declare
        v_num_tab p_tab_type;
    begin
        test_in_out(v_num_tab);
        if v_num_tab.count > 0 then
            for i in v_num_tab.first..v_num_tab.last 
                loop
                    dbms_output.put_line(v_num_tab(i));  
                end loop;
            end if;
            
        end;

--
4
4
4
--
   
   
...
Рейтинг: 0 / 0
как через цикл добавить к коллекции все элементы
    #40125060
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rus23
в данной реализации коллекция перезаписывается (наверное)
Rus23
Код: plsql
1.
2.
   loop
        v_num_tab := p_tab_type();


https://docs.oracle.com/cd/B12037_01/appdev.101/b10807/10_objs.htm Every object type has a constructor method, a function with the same name as the object type that initializes and returns a new instance of that object type.
...
Рейтинг: 0 / 0
как через цикл добавить к коллекции все элементы
    #40125061
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем loop если bulk collect?

Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
create or replace
  type p_tab_type
    is table of number;
/
create or replace
  procedure test_in_out(
                        v_num_tab out p_tab_type
                       )
    is
    begin
        select  num
          bulk  collect 
          into  v_num_tab
          from  (
                 select 4 num from dual union all
                 select 4 num from dual union all
                 select 2 num from dual union all
                 select 2 num from dual union all
                 select 3 num from dual union all
                 select 4 num from dual union all
                 select 5 num from dual
                )
          order by num;
end test_in_out;
/
set serveroutput on
declare
    v_num_tab p_tab_type;
begin
    test_in_out(v_num_tab);
    if v_num_tab.count > 0
      then
        for i in 1..v_num_tab.count loop
          dbms_output.put_line(v_num_tab(i));  
        end loop;
    end if;
end;
/
2
2
3
4
4
4
5

PL/SQL procedure successfully completed.

SQL>



SY.
...
Рейтинг: 0 / 0
как через цикл добавить к коллекции все элементы
    #40125081
Rus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

тут именно цикл нужен, т.к. в запрос будут подставляться различные комбинации в where из курсора.
...
Рейтинг: 0 / 0
как через цикл добавить к коллекции все элементы
    #40125099
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rus23,

Код: 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.
                  select num
                   bulk collect 
                   into v_num_tab_1
                  from   
                 (
                    select 4 num
                    from dual
                    union all
                    select 4 num
                    from dual
                    union all
                    select 2 from dual
                    union all
                    select 2 from dual
                    union all
                    select 3 from dual
                    union all
                    select 4 from dual
                    union all
                    select 5 from dual
                    )
                    where num in 
            (
                select 1 num
                from dual
                union all
                select 2 from dual
                union all
                select 3 from dual
                 union all
                select 4 from dual
--                order by 1 
            )
           


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


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