Процедура с курсором для заполнения таблицы с использованием представления постепенно - PullRequest
0 голосов
/ 04 сентября 2018

просмотр:

po     po_line month year amount          
41216    10    jan   2018  3000           
41216    20    feb   2018  4000           
41216    30    Aug   2018  6000
54321    10    march 2018  7000
32133    10    feb   2018  5000

Таблица:

po     po_line month year amount
41216    10    jan   2018  3000 
41216    20    feb   2018  4000

Мне нужна процедура с курсором для заполнения таблицы с использованием представления постепенно.

Идея состоит в том, что, когда представление обновляется, обновленные данные должны быть вставлены в таблицу.

код:

create or replace procedure prc as 
  cursor c1 is 
    select * 
    from vw_po_tab 
    where po||po_line not in(select po||po_line from po_tab1);
begin
  for i in c1 loop
    insert into po_tab1(po,po_line,month,year, amount)
    values(i.po,i.po_line,i.month,i.year, i.amount);
   end loop;
end;

1 Ответ

0 голосов
/ 04 сентября 2018

Вам не нужен цикл (или даже процедура). Вы можете сделать это одним оператором INSERT:

insert into po_tab1(po,po_line,month,year, amount)
select po, po_line, month, year, amount
from vw_po_tab 
where (po, po_line) not in (select po, po_line  
                            from po_tab1);

Для условия с несколькими столбцами IN не следует объединять два значения, а использовать два отдельных столбца. Потому что 1,12 и 11,2 будут одинаковыми, если вы их объедините.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...