使用光标进行操作,以便逐步使用视图填充表格

时间:2018-09-04 05:28:04

标签: oracle plsql oracle11g

视图:

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 :(得分:4)

您不需要循环(甚至过程)。您可以使用一条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,1211,2连接起来,它们将是相同的。