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

Откуда:
Сообщений: 15
Есть простой PL\SQL код:
for c2 in (select count(*) as v_count, r.dealer_num
                         from router_write_off r
                        where r.dealer_num = c0.dealer_num
                        group by r.dealer_num
                       having v_count = v_count_con_new - c0.v_count_con) loop
              update router_write_off rw
                 set rw.itemid     = (select t.xxifc_itemid
                                        from sn_length t
                                       where t.itemnumber = 'РОУТЕР/WIFI'),
                     rw.itemnumber = 'РОУТЕР/WIFI'
               where[b] rw.id = c2.id;// какое поле id можно использовать в этом случае?[/b]
            end loop;

Поле Id в даном случае это USE_DATE и ACCOUNT .
Теперь вопрос: как их получить из курсора с2?
Смысл в том, чтобы проапдейтить только такое количество записей, которое удовлетворяет условию v_count = v_count_con_new - c0.v_count_con и r.dealer_num = c0.dealer_num.

Заранее благодарен за ответ.
13 сен 13, 11:55    [14835771]     Ответить | Цитировать Сообщить модератору
 Re: Как ссылаться на записи из курсора?  [new]
Elic
Member

Откуда:
Сообщений: 29988
for c2 in (select count(*) as v_count, r.dealer_num
              , cast(collect(id) as schema_level_table_of_number) as ids
...
               where rw.id is member of c2.ids
13 сен 13, 12:23    [14836005]     Ответить | Цитировать Сообщить модератору
 Re: Как ссылаться на записи из курсора?  [new]
JoeNYC
Member

Откуда:
Сообщений: 15
Elic
for c2 in (select count(*) as v_count, r.dealer_num
              , cast(collect(id) as schema_level_table_of_number) as ids
...
               where rw.id is member of c2.ids

поля id в таблице нету.
можно ли написать cast(collect(use_date, account) as schema_level_table_of_number ) as ids?
чтобы потом использовать в апдейте
for c2 in (select count(*) as v_count,
                              r.dealer_num,
                              cast(collect(r.use_date,r.account) as schema_level_table_of_numbers) as ids
                         from router_write_off r
                        where r.dealer_num = c0.dealer_num
                        group by r.dealer_num
                       having v_count = v_count_con_new - c0.v_count_con) loop
              update router_write_off rw
                 set rw.itemid     = (select t.xxifc_itemid
                                        from sn_length t
                                       where t.itemnumber = 'РОУТЕР/WIFI'),
                     rw.itemnumber = 'РОУТЕР/WIFI'
               where rw.use_date = c2.ids.use_date
                 and rw.account = c2.ids.account;

И второй вопрос: как правильно определить schema_level_table_of_numbers?
Заранее благодарен за ответы.
13 сен 13, 12:47    [14836151]     Ответить | Цитировать Сообщить модератору
 Re: Как ссылаться на записи из курсора?  [new]
JoeNYC
Member

Откуда:
Сообщений: 15
JoeNYC,

Вопрос решен.
Окончательный вариант:
for c2 in (select * from (select count(*) over (partition by r.dealer_num) as v_count,
                              r.dealer_num,
                              r.use_date,r.account
                         from router_write_off r
                      
                       ) t where t.v_count= c1.v_count_con_new - c0.v_count_con )loop
              update router_write_off rw
                 set rw.itemid     = (select t.xxifc_itemid
                                        from sn_length t
                                       where t.itemnumber = 'РОУТЕР/WIFI'),
                     rw.itemnumber = 'РОУТЕР/WIFI'
               where rw.use_date = c2.use_date
                 and rw.account = c2.account;
            end loop;
13 сен 13, 13:40    [14836536]     Ответить | Цитировать Сообщить модератору
 Re: Как ссылаться на записи из курсора?  [new]
-2-
Member

Откуда:
Сообщений: 15330
JoeNYC
Вопрос решен.
Окончательный вариант
Снимите этого с_руля.
13 сен 13, 13:48    [14836620]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить