本人寫的第一個PL/SQL過程

看到別人在論壇的提問:

一個表的效率問題

今天碰到2張表
1張 有字段
表A有
jtbh(家庭編號) hzxm(戶主姓名) hnbh(戶內最大編號) 
1000          張三            03
1001          趙六..........................

表B有
grbh(個人編號=家庭編號+2位戶內編號) xm(姓名) gz(工資)
100001                          張三      1000
100002                          李四      1000
100003                          王五      1000


2張表數據幾十W。。。。現在由於之前維護不好,表A的最大編號沒有更新,例如表B 1001這戶人有4個編號,100101,100102 ,100103,100105這樣,但是我表A戶內最大編號可能只到了04,而實際上要到05,請問各位大俠如何更新有效率,我自己寫了個效率太低了。。。。。

 

於是寫了下面的過程,第一次寫,記錄一下。

CREATE PROCEDURE update_for_csdner();
  CURSOR v_cursor IS SELECT MAX(substr(grbh, 4, 2)) hnbh, substr(grbh, 0, 4) jtbh FROM b GROUP BY substr(grbh, 0, 4);
  v_jtbh VARCHAR2(4);
  v_hnbh VARCHAR2(2);
BEGIN
  OPEN v_cursor;
  LOOP
    FETCH v_cursor INTO v_hnbh, v_jtbh;
    EXIT WHEN v_cursor%NOTFOUND;
    UPDATE A SET hnbh = v_hnbh WHERE jtbh = v_jtbh;
    COMMIT;
  END LOOP;
  CLOSE v_cursor;
END;

發佈了23 篇原創文章 · 獲贊 1 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章