1. 程式人生 > >Oracle儲存過程中多層巢狀遊標的用法

Oracle儲存過程中多層巢狀遊標的用法

Oracle sql指令碼程式碼   CREATE OR REPLACE   PROCEDURE P_DELETE_QK (pId in NUMBER, deep in NUMBER) AS   -- pId = 分類ID  deep = 深度,層級   one_val NUMBER;   two_val NUMBER;   three_val NUMBER;   cursor var_one is select "ID" from T_QK where PARENTID = pId;   cursor var_two is select "ID" from T_QK where PARENTID = one_val;   cursor var_three is  select "ID" from T_WZ where QKID = two_val;   BEGIN          IF deep = 0 THEN           for oneID in var_one LOOP                      one_val:= oneID."ID";           for twoID in var_two LOOP                  two_val:= twoID."ID";           --刪除與文章關聯表           for threeID in var_three LOOP               three_val:= threeID."ID";               delete from Q_BROWSE where WZID = three_val;--瀏覽量                  delete from Q_ATTENTION where WZID = three_val;--關注量               delete from T_COMMENT where WZID = three_val;--評論           END LOOP;               --刪除這個分類下的所有文章               delete from T_WZ where QKID = two_val;               --刪除三級分類               delete from T_QK where "ID" = two_val;           END LOOP;               --刪除二級分類               delete from T_QK where "ID" = one_val;             END LOOP;           --刪除期刊期數           delete from T_QKQS where QKID = pId;           --刪除下載量           delete from Q_DOWNLOAD where QKID = pId;               --刪除本身           delete from T_QK where "ID" = pId;       END IF;       IF deep = 1 THEN           for twoID in var_one LOOP                                  two_val:= twoID."ID";               for threeID in var_three LOOP                      three_val:= threeID."ID";                   delete from Q_BROWSE where WZID = three_val;--瀏覽量                      delete from Q_ATTENTION where WZID = three_val;--關注量                   delete from T_COMMENT where WZID = three_val;--評論               END LOOP;                  --刪除這個分類下的所有文章               delete from T_WZ where QKID = two_val;               --刪除三級分類               delete from T_QK where "ID" = two_val;                         END LOOP;           --刪除二級分類           delete from T_QK where "ID" = pId;             END IF;       IF deep = 2 THEN                   two_val:= pId;           --刪除與文章關聯表           for threeID in var_three LOOP               three_val:= threeID."ID";                  delete from Q_BROWSE where WZID = three_val;--瀏覽量                  delete from Q_ATTENTION where WZID = three_val;--關注量               delete from T_COMMENT where WZID = three_val;--評論           END LOOP;              --刪除這個分類下的所有文章           delete from T_WZ where QKID = pId;           --刪除三級分類           delete from T_QK where "ID" = pId;                 END IF;   END;