Oracle儲存過程中多層巢狀遊標的用法
阿新 • • 發佈:2019-01-23
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;