nav*_*yal 2 mysql stored-procedures
我已经创建了一个mysql Procedure。这是它的代码
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE a , b, d TEXT;
DECLARE c INT Default 0;
DECLARE cur1 CURSOR FOR SELECT id, school_id FROM my_list;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO a, b;
IF done THEN
LEAVE read_loop;
END IF;
insertSchool: LOOP
SET c = c + 1;
d = SUBSTRING_INDEX(b, ',', c);
IF d = "" THEN
LEAVE insertSchool;
END IF;
INSERT INTO my_school (my_id, school_id) VALUES (a,b);
END LOOP insertSchool;
END LOOP;
CLOSE cur1;
END
Run Code Online (Sandbox Code Playgroud)
在此cur1中,school_id为字符串,其中包含以逗号分隔的学校ID。我想拆分这些ID并存储在其他表中。但是这行d = SUBSTRING_INDEX(b,',',c); 显示错误。谁能提供在程序中如何使用SUBSTRING_INDEX的解决方案?
您的直接问题不是,SUBSTRING_INDEX而是缺少SET
更改
d = SUBSTRING_INDEX(b, ',', c);
Run Code Online (Sandbox Code Playgroud)
至
SET d = SUBSTRING_INDEX(b, ',', c);
^^^
Run Code Online (Sandbox Code Playgroud)
要从列表中获取第n个元素,您需要应用SUBSTRING_INDEX()两次
SUBSTRING_INDEX(SUBSTRING_INDEX(list, ',', n), ',', -1)
Run Code Online (Sandbox Code Playgroud)
话虽如此,您的SP可能看起来像
DELIMITER $$
CREATE PROCEDURE my_sp()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE a, b, d VARCHAR(12);
DECLARE c, m INT DEFAULT 0;
DECLARE cur1 CURSOR FOR SELECT id, school_id FROM my_list;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO a, b;
IF done THEN LEAVE read_loop; END IF;
SET c = 0;
SET m = CHAR_LENGTH(b) - CHAR_LENGTH(REPLACE(b, ',', ''));
insertSchool: LOOP
SET c = c + 1;
IF c > m + 1 THEN LEAVE insertSchool; END IF;
SET d = SUBSTRING_INDEX(SUBSTRING_INDEX(b, ',', c), ',', -1);
INSERT INTO my_school (my_id, school_id) VALUES (a, d);
END LOOP insertSchool;
END LOOP;
CLOSE cur1;
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
这是SQLFiddle演示
| 归档时间: |
|
| 查看次数: |
2644 次 |
| 最近记录: |