powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / COUNT нетипизированной вложенной таблицы
10 сообщений из 10, страница 1 из 1
COUNT нетипизированной вложенной таблицы
    #39740865
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте
Код: 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
COUNT нетипизированной вложенной таблицы
    #39740895
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--
Код: plsql
1.
select collect(level) from

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

а как-нибудь CAST()-овать, там, то-сё..
не? :(
...
Рейтинг: 0 / 0
COUNT нетипизированной вложенной таблицы
    #39740912
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--без модификации курсораУ тебя исходный запрос некорректный. collect() должен использоваться в обертке cast.
...
Рейтинг: 0 / 0
COUNT нетипизированной вложенной таблицы
    #39740918
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--а как-нибудь CAST()-овать, там,К подходящему типу коллекции.
...
Рейтинг: 0 / 0
COUNT нетипизированной вложенной таблицы
    #39740998
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic--Eugene--а как-нибудь CAST()-овать, там,К подходящему типу коллекции.а как кастовать в PL-е?
...
Рейтинг: 0 / 0
COUNT нетипизированной вложенной таблицы
    #39741021
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--а как кастовать в PL-е?cast-овать надо в SQL-е.
...
Рейтинг: 0 / 0
COUNT нетипизированной вложенной таблицы
    #39741054
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eliccast-овать надо в SQL-е.но тогда нужен соответствующий объектный тип :(
...
Рейтинг: 0 / 0
COUNT нетипизированной вложенной таблицы
    #39741202
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--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
COUNT нетипизированной вложенной таблицы
    #39741325
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
Код: plsql
1.
select cast

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


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