2015-04-12 108 views
0

我试图更新一个有点棘手的表。让我试着解释..这里 E.g是表数据Oracle更新声明

enter image description here

这里是我想更新COL5。 对于每条记录,检查col3是否有值,如果是,请检查该值是否为col2。如果两个条件均满足,则获得col1的最大值,因为col2将具有重复项。 如果col3没有值,我们需要检查col4并与col2比较并获取col1。例如:对于第5行,我将首先检查col3,它的值为'b',我将检查col2的值'b',我有3个匹配的(col1 - id 2,7,9)将需要采取从9 col1和更新COL5在第5行

请提出您的宝贵思想的/想法..

回答

0

我已经编写你的第一个条件,你匹配COL3(现有和不存在的条件),你可以类似地在程序中写入代码来匹配col4。

create or replace procedure proc_cal is 
    d_col1 varchar2(3); 
    d_col2 varchar2(3); 
    maxcol varchar2(3):= '0'; 
begin 
    for i in (select * from coldata) loop 
    dbms_output.put_line('in here '|| i.col3); 
    if (i.col3 is not null) then 
     dbms_output.put_line('value exists for col3 and is ' || i.col3); 
     for j in (select * from coldata) loop 

     if (j.col2 = i.col3) then 
      dbms_output.put_line('value exists for col2 and col1 value is ' || 
           j.col1); 
     dbms_output.put_line('the prev maxcol is '|| maxcol); 
      if (maxcol < j.col1) then 
      dbms_output.put_line('checking'); 
      maxcol := j.col1; 

      dbms_output.put_line('current maxcol is ' || maxcol); 

      end if; 
     end if; 

     end loop; 
     update coldata set col5 = maxcol where col3=i.col3; 
     dbms_output.put_line('max value update and is ' || maxcol); 
     maxcol:=0; 

    else 
     update coldata set col5 = null where col3=i.col3; 
     end if; 
    end loop; 
end; 



[email protected] 13-APR-15> select * from coldata; 

COL COL COL COL COL 
--- --- --- --- --- 
1 a  a 
2 b  c 
3 a a  8 
4 c  c 
5 a b  9 
6 c  b 
7 b c e 10 
8 a  a 
9 b  b 
10 c  c