P1: BEGIN
-- 外層游標:部門
DECLARE cursor1 CURSOR FOR SELECT did, dname FROM department;
-- 中層處理塊
P2: BEGIN
OPEN cursor1;
WHILE (at_endc1 = 0) DO
FETCH cursor1 INTO v_did, v_dname;
-- 內層游標:教師 (依部門過濾)
P3: BEGIN
DECLARE cursor2 CURSOR FOR
SELECT id, name FROM teacher WHERE did = v_did AND dname = v_dname;
OPEN cursor2;
WHILE (at_endc2 = 0) DO
FETCH cursor2 INTO v_tid, v_tname;
-- 業務邏輯:寫入學生表
INSERT INTO student (id, name, tid, tname, did, dname)
VALUES (i_seq, CHAR(i_seq), v_tid, v_tname, v_did, v_dname);
SET i_seq = i_seq + 1;
END WHILE;
CLOSE cursor2;
END P3;
END WHILE;
CLOSE cursor1;
END P2;
END P1
DECLARE CONTINUE HANDLER FOR NOT FOUND SET at_end = 1 替代傳統 SQLCODE 判斷,程式碼更清晰。i_seq 模擬遞增鍵值。此模式廣泛適用於報表產生、資料遷移、主從明細轉換等批次處理場景。