DB2(Procedure)儲存過程遍歷迴圈!
阿新 • • 發佈:2019-01-04
由於有時候一些複雜的業務邏輯將要通過儲存過程的迴圈語句進行處理;以下列出2種DB2儲存過程的迴圈語句,方便以後的檢視並使用!
本人推薦第一種方式的使用,最大的優點就是比較直觀;在需要操作很多欄位的情況下,不需要定義太多的欄位變數作為中間儲存媒介.
一.FOR方式(FOR .. AS [遊標名] CURSOR FOR [SELECT......])
BEGIN --語句塊,必須要加上,否則會出錯. FOR V AS MYCURSOR CURSOR FOR SELECT ID,NAME,AGE FROM PEOPLE DO BEGIN --這裡進行業務邏輯處理,每行迴圈的時候,每列的值將會存放於V變數中 --示例: 把資料插入到另外一張表 INSERT INTO PERSON(NAME,AGE) VALUES(V.NAME,V.AGE); END; END FOR; END;
二.WHILE方式(DECLARE [遊標名] CURSOR FOR [SELECT.....])
BEGIN --語句塊,必須要加上,否則會出錯. DECLARE NOTFOUND INT DEFAULT 0; DECLARE V_NAME VARCHAR(20); DECLARE V_AGE VARCHAR(20); DECLARE MYCURSOR CURSOR FOR SELECT NAME,AGE FROM PEOPLE; DECLARE CONTINUE HANDLER FOR NOT FOUND SET NOTFOUND = 1; WHILE NOTFOUND = 0 DO FETCH MYCURSOR INTO V_NAME,V_AGE --這裡的順序要與查詢結果欄位順序一致 --這裡會多迴圈一次,所以需要加一個判斷 IF(NOTFOUND = 0) THEN INSERT INTO PERSON(NAME,AGE) VALUES(V_NAME,V_AGE); END IF; END WHILE; END;