Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 COUNT нетипизированной вложенной таблицы  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2075
Здравствуйте
+
create table tmp$tab1(a number)
/
create table tmp$tab2(a number, b number)
/
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;
/
ORA-06550: Строка 17, столбец 26:
PLS-00302: компонента 'COUNT' должна быть объявлена
ORA-06550: Строка 17, столбец 16:
PL/SQL: Statement ignored
Возможно ли решить проблему без модификации курсора / создания объектных типов?
30 ноя 18, 13:58    [21749959]     Ответить | Цитировать Сообщить модератору
 Re: COUNT нетипизированной вложенной таблицы  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28467
--Eugene--
select collect(level) from
В момент компиляции динамически создаваемый временный тип ещё не существует. Поэтому PL/SQL-ю невдомёк, что это коллекция.
30 ноя 18, 14:16    [21750005]     Ответить | Цитировать Сообщить модератору
 Re: COUNT нетипизированной вложенной таблицы  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2075
Elic,

а как-нибудь CAST()-овать, там, то-сё..
не? :(
30 ноя 18, 14:22    [21750019]     Ответить | Цитировать Сообщить модератору
 Re: COUNT нетипизированной вложенной таблицы  [new]
-2-
Member

Откуда:
Сообщений: 14079
--Eugene--
без модификации курсора
У тебя исходный запрос некорректный. collect() должен использоваться в обертке cast.
30 ноя 18, 14:25    [21750024]     Ответить | Цитировать Сообщить модератору
 Re: COUNT нетипизированной вложенной таблицы  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28467
--Eugene--
а как-нибудь CAST()-овать, там,
К подходящему типу коллекции.
30 ноя 18, 14:37    [21750036]     Ответить | Цитировать Сообщить модератору
 Re: COUNT нетипизированной вложенной таблицы  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2075
Elic
--Eugene--
а как-нибудь CAST()-овать, там,
К подходящему типу коллекции.
а как кастовать в PL-е?
30 ноя 18, 15:30    [21750168]     Ответить | Цитировать Сообщить модератору
 Re: COUNT нетипизированной вложенной таблицы  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28467
--Eugene--
а как кастовать в PL-е?
cast-овать надо в SQL-е.
30 ноя 18, 15:46    [21750205]     Ответить | Цитировать Сообщить модератору
 Re: COUNT нетипизированной вложенной таблицы  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2075
Elic
cast-овать надо в SQL-е.
но тогда нужен соответствующий объектный тип :(
30 ноя 18, 16:04    [21750271]     Ответить | Цитировать Сообщить модератору
 Re: COUNT нетипизированной вложенной таблицы  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1413
--Eugene--
Elic
пропущено...
К подходящему типу коллекции.
а как кастовать в PL-е?

  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
30 ноя 18, 18:07    [21750571]     Ответить | Цитировать Сообщить модератору
 Re: COUNT нетипизированной вложенной таблицы  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28467
Stax
select cast
Станислав, снимись с ручника и закастуй всё-таки "в PL-е".
30 ноя 18, 22:56    [21750817]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить