ตอนที่ 6 : การสร้าง Loop ข้อมูลบน Stored Procedure (MySQL : Stored Procedure)

พฤษภาคม 17, 2018 1:29 am โดย admin
0
65

ตอนที่ 6 : การสร้าง Loop ข้อมูลบน Stored Procedure (MySQL : Stored Procedure) การใช้งาน Loop บน Stored Procedure มีรูปแบบง่าย ๆ อยู่ 2-3 ชนิด เช่น WHILE Loop และ REPEAT Loop โดยใช้คำสั่ง WHILE Loop จะพิจารณาเงื่อนไขแล้วค่อยทำ ถ้าเงื่อนไขเป็นจริงจะทำใน Statement ถ้าเท็จ จะกระโดดออกจากลูปทันที ส่วน REPEAT Loop จะทำใน Loop แล้วค่อยพิจารณาเงื่อนไข ถ้าเป็นจริงจะออกจาก Loop ทันที ซึ่งทั้ง 2 มีรูปแบบ Syntax การใช้งานที่ง่าย ๆ สามารถประยุคนำไปใช้งานบน Stored Procedure ค่า Variable หรือ Parametersได้ทั้งจาก Loop เช่น เงื่อนไขที่เป็นตัวเลข, เงื่อนไขบูลลิน, เงื่อนไขที่มาจาก Cursor และอื่น ๆ

โครงสร้างของตาราง customer และ country

Table : customer

Stored Procedure บน MySQL

Table : country

Stored Procedure บน MySQL

  • 1. WHILE Loop จะพิจารณาเงื่อนไขแล้วค่อยทำ ถ้าเงื่อนไขเป็นจริงจะทำใน Statement ถ้าเท็จ จะกระโดดออกจากลูปทันที

WHILE Loop : Syntax

1.WHILE expression DO
2.#Statements
3.END WHILE

Example 1 : การวน Loop ของ WHILE และแสดงผลลที่ได้แบบง่าย ๆ

01.DROP PROCEDURE IF EXISTS getDataLoop;
02. 
03.DELIMITER //
04.CREATE PROCEDURE getDataLoop()
05.BEGIN
06. 
07.DECLARE i  INT DEFAULT 0;
08.DECLARE strTemp VARCHAR(255);
09. 
10.SET strTemp =  '';
11.WHILE i  <= 10 DO
12.SET  strTemp = CONCAT(strTemp,i,'=>');
13.SET  i = i + 1;
14.END WHILE;
15.SELECT strTemp;
16. 
17.END //
18. 
19.DELIMITER ;

ตัวอย่างนี้จะรัวค่าตัวเลข และ Loop แสดงรายการตามจำนวนตัวเลขที่รับมาจาก Parameters 

1.CALL getDataLoop();

Result

Loop MySQL : Stored Procedure

Example 2 : การสร้าง Insert Table การนับ Row และการแสดงข้อมูลในรูปแบบ Loop แสดงผล

01.DROP PROCEDURE IF EXISTS getDataLoop;
02. 
03.DELIMITER //
04.CREATE PROCEDURE getDataLoop()
05.BEGIN
06. 
07.DECLARE i  INT DEFAULT 1;
08. 
09.Create Temp Table
10.CREATE TEMPORARY TABLE IF NOT EXISTS temp(
11.RowID INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
12.ItemDetail VARCHAR(50)) ENGINE = MEMORY;
13. 
14.WHILE i  <= 15 DO
15.Insert Table
16.INSERT INTO temp (ItemDetail) VALUES(CONCAT('Item No : ',i));
17.SET  i = i + 1;
18.END WHILE;
19. 
20.Return Rows
21.SELECT FROM temp;
22. 
23.Drop Table
24.DROP TABLE temp;   
25. 
26.END //
27. 
28.DELIMITER ;

ตัวอย่างนี้จะเป็นการสร้าง Insert Table และการนับจำนวนแถว พร้อมกับ Loop เพื่อแสดงรายการของข้อมูล

1.CALL getDataLoop()

Result

Loop MySQL : Stored Procedure

  • 2. REPEAT Loop จะทำใน Loop แล้วค่อยพิจารณาเงื่อนไข ถ้าเป็นจริงจะออกจาก Loop ทันที

REPEAT Loop : Syntax

1.REPEAT
2.#Statements;
3.UNTIL expression
4.END REPEAT

 

Example 3 : การวน Loop ของ REPEAT และแสดงผลลที่ได้แบบง่าย ๆ

01.DROP PROCEDURE IF EXISTS getDataLoop;
02. 
03.DELIMITER //
04.CREATE PROCEDURE getDataLoop()
05.BEGIN
06. 
07.DECLARE i  INT DEFAULT 0;
08.DECLARE strTemp VARCHAR(255);
09. 
10.SET strTemp =  '';
11.REPEAT
12.SET  strTemp = CONCAT(strTemp,i,'=>');
13.SET  i = i + 1;
14.UNTIL i  >= 10
15.END REPEAT;
16. 
17.SELECT strTemp;
18. 
19.END //
20. 
21.DELIMITER ;

ตัวอย่างนี้จะรัวค่าตัวเลข และ Loop แสดงรายการตามจำนวนตัวเลขที่รับมาจาก Parameters 

1.CALL getDataLoop();

Result

Loop MySQL : Stored Procedure

Example 4 : การสร้าง Insert Table การนับ Row และการแสดงข้อมูลในรูปแบบ Loop แสดงผล

01.DROP PROCEDURE IF EXISTS getDataLoop;
02. 
03.DELIMITER //
04.CREATE PROCEDURE getDataLoop()
05.BEGIN
06. 
07.DECLARE i  INT DEFAULT 1;
08. 
09.Create Temp Table
10.CREATE TEMPORARY TABLE IF NOT EXISTS temp(
11.RowID INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
12.ItemDetail VARCHAR(50)) ENGINE = MEMORY;
13. 
14.# Repeat Loop
15.REPEAT
16.Insert Table
17.INSERT INTO temp (ItemDetail) VALUES(CONCAT('Item No : ',i));
18.SET  i = i + 1;
19.UNTIL i  >= 10
20.END REPEAT;
21. 
22.Return Rows
23.SELECT FROM temp;
24. 
25.Drop Table
26.DROP TABLE temp;   
27. 
28.END //
29. 
30.DELIMITER ;

ตัวอย่างนี้จะเป็นการสร้าง Insert Table และการนับจำนวนแถว พร้อมกับ Loop เพื่อแสดงรายการของข้อมูล

1.CALL getDataLoop()

Result

Loop MySQL : Stored Procedure

แหล่งที่มา : thaicreate.com/tutorial