2010-12-09 56 views
0

我一直在搜索書籍和網絡幾個小時,我找不到任何真正的運氣。由於Oracle或PL/SQL在生活中並不是我最大的禮物,所以我嘗試這樣做。用作數組執行其他查詢的Oracle數據庫表

我想要實現的是選擇像表A中的所有記錄,並在循環中使用「每個」記錄。

在僞代碼中,它會是這樣的。

x =來自TABLE_A的SELECT * for each x UPDATE TABLE_B where kitten = x; end for loop

幫助?

回答

2

使用光標:

DECLARE 
cursor c1 is 
    select monthly_income 
    from employees 
    where name = v_name_in; 
BEGIN 
    FOR employee_rec in c1 
    LOOP 
     update tableB set incom_val = employee_rec.monthly_income where ...; 
    END LOOP; 
END; 

或:

DECLARE 
    BEGIN 
     FOR employee_rec in (select monthly_income 
           from employees 
           where name = v_name_in) 
     LOOP 
      update tableB set incom_val = employee_rec.monthly_income where ...; 
     END LOOP; 
    END; 
4

如果可能的話,儘量把它寫成一個UPDATE語句。

update table_b b 
    set (b.col1, b.col2) = (
      select a.colx + 10, a.coly/18 
      from table_a a 
      where b.id = a.id); 

它比程序對手更快,代碼行也更少,使得它更易於理解和遷移到其他數據庫。