เพื่อแยกสตริงและวนลูปค่าทั้งหมดใน MySQL Procedure ไม่ต้องใช้ REPLACE() สร้าง Stored Procedure แล้วสร้างตารางเก็บค่า และเรียก Procedure พร้อมส่งค่าเข้าไป
สร้าง Stored Procedure
mysql> DELIMITER // mysql> CREATE PROCEDURE SP_SplitString(Value LONGTEXT) BEGIN DECLARE front TEXT DEFAULT NULL; DECLARE frontlen INT DEFAULT NULL; DECLARE TempValue TEXT DEFAULT NULL; iterator: LOOP IF LENGTH(TRIM(Value)) = 0 OR Value IS NULL THEN LEAVE iterator; END IF; SET front = SUBSTRING_INDEX(Value, ',', 1); SET frontlen = LENGTH(front); SET TempValue = TRIM(front); INSERT INTO store (allValues) VALUES (TempValue); SET Value = INSERT(Value, 1, frontlen + 1, ''); END LOOP; END // Query OK, 0 rows affected (0.22 sec) mysql> DELIMITER ;
สร้างตารางเก็บค่า
mysql> CREATE TABLE store ( Id INT NOT NULL AUTO_INCREMENT, allValues VARCHAR(30), PRIMARY KEY(Id) ); Query OK, 0 rows affected (0.63 sec)
เรียก Stored Procedure พร้อมสตริงคั่นด้วยคอมม่า:
mysql> CALL SP_SplitString('Hi,Hello,Good Morning,Bye'); Query OK, 1 row affected (1.02 sec)
ตรวจสอบตาราง store:
mysql> SELECT * FROM store;
ผลลัพธ์:
+----+--------------+ | Id | allValues | +----+--------------+ | 1 | Hi | | 2 | Hello | | 3 | Good Morning | | 4 | Bye | +----+--------------+ 4 rows in set (0.00 sec)
Procedure จะแยกสตริงด้วยคอมม่า วนลูป INSERT แต่ละส่วนเข้าตาราง จนกว่าสตริงจะหมด