2015-04-12 4 views
0

Я пытаюсь обновить таблицу, которая немного сложна. Позвольте мне объяснить .. например здесь данные таблицыOracle Update statement

enter image description here

вот как я хочу, чтобы обновить col5. Для каждой записи проверьте, имеет ли значение col3 значение, если да, проверьте это значение в col2. если оба условия выполнены, получите max col1, поскольку col2 будет иметь дубликаты. Если col3 не имеет значения, нам нужно проверить col4 и сравнить с col2 и получить col1.

Например: для строки 5, я сначала проверю кол3, он будет иметь значение '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