您好,登錄后才能下訂單哦!
Oracle 游標用For循環比較簡單,MySQL也是最近才開始用,感覺稍微麻煩一點,下邊直接上代碼:
-----------------------------------------------------------
-- Oracle
-- 內嵌游標為帶參游標,參數為外游標值
-----------------------------------------------------------
DECLARE
cursor cur_outer is select dept_id from tbl_test_dept;
cursor cur_inner(deptid varchar2) is (SELECT user_id FROM tbl_test_user WHERE dept_id=deptid);
BEGIN
FOR DEPT_ITEM IN cur_outer LOOP
--
--
FOR KEY_ITEM IN cur_process(DEPT_ITEM.DEPT_ID) LOOP --開始內循環
--
--
END LOOP;
END LOOP;
commit;
END;
------------------------------
-- Mysql
-- HANDLER 只能申明一個
-- 內循環結束后需要重置done
-- 發現mysql不能直接執行begin..end,需要創建存儲過程后調用執行;
------------------------------
CREATE PROCEDURE `PROC_CURSOR_TEST`()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE item_outer VARCHAR(50);outer
DECLARE item_inner VARCHAR(50);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 定義內外游標
DECLARE cur_outer cursor for select dept_id from tbl_test_dept;
DECLARE cur_inner cursor for (SELECT user_id FROM tbl_test_user WHERE dept_id=item_outer);-- 查詢條件可直接用外游標變量值
OPEN cur_outer;
out_loop: LOOP
fetch cur_outer into item_outer;
IF done THEN -- 判斷是否繼續循環
LEAVE out_loop;
END IF;
--
--
OPEN cur_process; -- 打開內嵌游標
inner_loop: LOOP
fetch cur_inner into item_inner;
IF done THEN
LEAVE inner_loop;
END IF;
--
--
end loop;
CLOSE cur_inner;
SET done = 0; -- 關閉內游標,重置done
end loop;
CLOSE cur_outer;
commit;
END;
call PROC_CURSOR_TEST(); -- 調用存儲過程
drop procedure PROC_CURSOR_TEST; --刪除
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。