1. 程式人生 > >MySQL 儲存過程迴圈遍歷

MySQL 儲存過程迴圈遍歷

WHILE, REPEAT, LOOP在MYSQL裡都是用來作為定型文抽出而使用的,都是利用迴圈方式提取資料。

在這三種方法中,WHILE是在迴圈的初回處理開始之前進行條件判斷,REPEAT是在迴圈結束時進行判斷,而

LOOP不具備判斷功能。這三種功能的使用一定要在MySQL5.05以上的版本下使用才可以。

使用方法如下:

===================================================================================
WHILE

[label:] WHILE 條件 DO
--迴圈處理
END WHILE [label];

使用例子
(CREATE FUNCTION,RETURN,BEGIN...END省略)

DECLARE result VARCHAR( 100 ) DEFAULT '';
DECLARE code   INT UNSIGNED   DEFAULT ASCII( 'A' ); -- A的編碼
DECLARE count INT UNSIGNED   DEFAULT 0;

test: WHILE count < 5 DO     -- 到第五個文字為止迴圈
SET result = CONCAT( result, CHAR( code + count ) );
SET count = count + 1;
END WHILE test;

執行結果
'ABCDE'

===================================================================================

REPEAT

[label:] REPEAT
--迴圈處理
UNTIL 條件
END REPEAT [label];

使用例子
(CREATE FUNCTION,RETURN,BEGIN...END省略)

DECLARE result VARCHAR( 100 ) DEFAULT '';
DECLARE code   INT UNSIGNED   DEFAULT ASCII( 'A' ); -- A的編碼
DECLARE count INT UNSIGNED   DEFAULT 0;

test: REPEAT
SET result = CONCAT( result, CHAR( code + count ) );
SET count = count + 1;
UNTIL count > 4   -- 到第五個文字為止迴圈
END REPEAT test;

執行結果
'ABCDE'

===================================================================================

LOOP

[label:] LOOP
--迴圈處理
END LOOP [label:];

使用例子
(CREATE FUNCTION,RETURN,BEGIN...END省略)

DECLARE result VARCHAR( 100 ) DEFAULT '';
DECLARE code   INT UNSIGNED   DEFAULT ASCII( 'A' ); -- A的編碼
DECLARE count INT UNSIGNED   DEFAULT 0;

test: LOOP
IF count > 4 THEN -- 判斷條件
LEAVE test;      -- 到第五個文字為止迴圈
END IF;
SET result = CONCAT( result, CHAR( code + count ) ); -- 文字結合
SET count = count + 1;
END LOOP test;

執行結果
'ABCDE'

=================================================================================

LOOP(ITERATE,LEAVE)

使用例子
(CREATE FUNCTION,RETURN,BEGIN...END省略)

DECLARE result VARCHAR( 100 ) DEFAULT '';
DECLARE count INT UNSIGNED   DEFAULT 0;

test: LOOP
SET count = count + 1;
-- 3倍數的時候跳到下一個係數後繼續迴圈
IF NOT MOD( count, 3 ) THEN ITERATE test; END IF;
SET result = CONCAT( result, IF( count > 1, ', ', '' ), count );-- 結合
-- count = 到10的時候迴圈結束
IF count > 9 THEN LEAVE test; END IF;
END LOOP test;

執行結果
'1, 2, 4, 5, 7, 8, 10'