1. 程式人生 > >Oracle多表聯合更新

Oracle多表聯合更新

以下是在後臺更新易拓ERP資料庫時遇到的一個問題:

1.在DB14資料庫中將料件號P44開頭,並且品名為"塑料袋"的料件改為消耗性料件.
          這個簡單:  UPDATE DB14.ima_file SET ima70 = ‘Y’ WHERE ima01 like ‘P44%’ AND ima02 = ‘塑料袋’;

2.在以B021開頭的工單中,相應的下介料件的消耗性狀態也作相應變更. 這個麻煩涉及bmb表和ima表才能確定要更改的記錄(因為限定了品名).不能直接用UPDATE,最後寫了一個儲存過程如下:

DECLARE CURSOR my_table IS (SELECT bmb01,bmb03
  FROM DB14.bmb_file,DB14.ima_file
  WHERE bmb03 = ima01
  AND bmb01 LIKE 'B021%'
  AND bmb03 LIKE 'P44%' AND ima02 = '塑料袋'); 
  BEGIN 
    FOR tab IN my_table LOOP 
      UPDATE DB14.bmb_file 
             SET bmb15 = 'Y' 
             WHERE bmb01 = tab.bmb01 AND bmb03 = tab.bmb03; 
    END LOOP; 
  END;

這樣一來要是還有相同條件下的其他表要更新的話,可直接在FOR LOOP裡面加上.

最後,其實我也是傻了.單就解決現有問題而言完全可以:
  UPDATE DB14.bmb_file SET bmb15 = 'Y'
  WHERE bmb01 LIKE 'B021%'
                AND bmb03 IN (SELECT ima01
                                            FROM DB14.ima_file 
                                            WHERE ima01 LIKE 'P44%'  
                                                        AND ima02 = '塑料袋');