Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / COUNT нетипизированной вложенной таблицы / 10 сообщений из 10, страница 1 из 1
30.11.2018, 13:58
    #39740865
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COUNT нетипизированной вложенной таблицы
Здравствуйте
Код: sql
1.
2.
3.
4.
create table tmp$tab1(a number)
/
create table tmp$tab2(a number, b number)
/

Код: 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
     cursor c is
          select level a,
                     case mod(level,2) when 0 then (select collect(level) from dual connect by level <= 3) end b
                from dual
                connect by level <= 6;
     type t is table of c%rowtype;
     v t;
begin
     open c;
     fetch c bulk collect into v;
     forall i in 1..v.count
          insert into tmp$tab1(a)
                values(v(i).a);
     for i in 1..v.count loop
          if v(i).b is not null then
                forall j in 1..v(i).b.count
                     insert into tmp$tab2(a, b)
                          values (v(i).a, v(i).b(j));
          end if;
     end loop;
end;
/

Код: plaintext
1.
2.
3.
4.
ORA-06550: Строка 17, столбец 26:
PLS-00302: компонента 'COUNT' должна быть объявлена
ORA-06550: Строка 17, столбец 16:
PL/SQL: Statement ignored
Возможно ли решить проблему без модификации курсора / создания объектных типов?
...
Рейтинг: 0 / 0
30.11.2018, 14:16
    #39740895
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COUNT нетипизированной вложенной таблицы
--Eugene--
Код: plsql
1.
select collect(level) from

В момент компиляции динамически создаваемый временный тип ещё не существует. Поэтому PL/SQL-ю невдомёк, что это коллекция.
...
Рейтинг: 0 / 0
30.11.2018, 14:22
    #39740907
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COUNT нетипизированной вложенной таблицы
Elic,

а как-нибудь CAST()-овать, там, то-сё..
не? :(
...
Рейтинг: 0 / 0
30.11.2018, 14:25
    #39740912
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COUNT нетипизированной вложенной таблицы
--Eugene--без модификации курсораУ тебя исходный запрос некорректный. collect() должен использоваться в обертке cast.
...
Рейтинг: 0 / 0
30.11.2018, 14:37
    #39740918
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COUNT нетипизированной вложенной таблицы
--Eugene--а как-нибудь CAST()-овать, там,К подходящему типу коллекции.
...
Рейтинг: 0 / 0
30.11.2018, 15:30
    #39740998
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COUNT нетипизированной вложенной таблицы
Elic--Eugene--а как-нибудь CAST()-овать, там,К подходящему типу коллекции.а как кастовать в PL-е?
...
Рейтинг: 0 / 0
30.11.2018, 15:46
    #39741021
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COUNT нетипизированной вложенной таблицы
--Eugene--а как кастовать в PL-е?cast-овать надо в SQL-е.
...
Рейтинг: 0 / 0
30.11.2018, 16:04
    #39741054
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COUNT нетипизированной вложенной таблицы
Eliccast-овать надо в SQL-е.но тогда нужен соответствующий объектный тип :(
...
Рейтинг: 0 / 0
30.11.2018, 18:07
    #39741202
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COUNT нетипизированной вложенной таблицы
--Eugene--Elicпропущено...
К подходящему типу коллекции.а как кастовать в PL-е?
Код: 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.
  1  declare
  2       cursor c is
  3            select level a,
  4                       case mod(level,2) when 0 then (
  5  select cast(collect(level) as sys.odcinumberlist)  from dual connect by level <= 3) end b
  6                  from dual
  7                  connect by level <= 6;
  8       type t is table of c%rowtype;
  9       v t;
 10  begin
 11       open c;
 12       fetch c bulk collect into v;
 13  /*
 14       forall i in 1..v.count
 15            insert into tmp$tab1(a)
 16                  values(v(i).a);
 17  */
 18       for i in 1..v.count loop
 19            if v(i).b is not null then
 20                  forall j in 1..v(i).b.count
 21                       insert into tmp$tab2(a, b)
 22                            values (v(i).a, v(i).b(j));
 23            end if;
 24       end loop;
 25* end;
SQL> /

PL/SQL procedure successfully completed.

SQL> select * from tmp$tab2;

         A          B
---------- ----------
         2          1
         2          2
         2          3
         4          1
         4          2
         4          3
         6          1
         6          2
         6          3

9 rows selected.



.....
stax
...
Рейтинг: 0 / 0
30.11.2018, 22:56
    #39741325
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COUNT нетипизированной вложенной таблицы
Stax
Код: plsql
1.
select cast

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


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