mysql - 在同一个mysql过程中使用循环和游标显示错误
问题描述
以下代码工作正常。但是当我启用注释区域(光标)时,代码显示错误。请帮助解决问题。
场景:代码允许一些参数。它将准备表中的数据,然后游标将从该表中获取数据并输出该数据。
相同的参数:调用 prGetInsuranceData_Multiple(2, 'Saroar,Ahmed', '20,30')
DELIMITER $$
USE `surokkha_db`$$
DROP PROCEDURE IF EXISTS `prGetInsuranceData_Multiple`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `prGetInsuranceData_Multiple`
(
PeopleToBeCovered INT,
IN NAME VARCHAR(4000),
IN AGE VARCHAR(200)
)
BEGIN
-- declare loop variables
DECLARE V_Name VARCHAR(255);
DECLARE V_AGE INT;
DECLARE X INT DEFAULT 0;
-- declare cursor variables
DECLARE Cur_Finished INTEGER DEFAULT 0;
DECLARE Cur_Name VARCHAR(255);
DECLARE Cur_Age INT;
-- create a table with comma separated values (Name with age in table format)
CREATE TEMPORARY TABLE TempCustomer
(
NAME VARCHAR(255),
AGE INT
);
CREATE TEMPORARY TABLE TempCustomer1
(
NAME VARCHAR(255),
AGE INT
);
SET X = 1;
BEGIN
WHILE X <= PeopleToBeCovered DO
SET V_Name = SUBSTRING_INDEX(SUBSTRING_INDEX(NAME,',',X),',',-1);
SET V_Age = SUBSTRING_INDEX(SUBSTRING_INDEX(AGE,',',X),',',-1);
SET X = X + 1;
INSERT INTO TempCustomer VALUES(V_Name, V_Age);
END WHILE;
END;
/*
-- declare cursor
DECLARE cur_NameWithAge
CURSOR FOR
SELECT NAME, AGE FROM TempCustomer;
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET finished = 1;
OPEN cur_NameWithAge;
GetNameWithAge: LOOP
FETCH cur_NameWithAge INTO Cur_Name, Cur_Age;
IF finished = 1 THEN
LEAVE GetNameWithAge;
END IF;
-- get data and insert into table
INSERT INTO TempCustomer1 VALUES(Cur_Name, Cur_Age);
END LOOP GetNameWithAge;
CLOSE cur_NameWithAge;
*/
SELECT * FROM TempCustomer;
-- as after setting cursor the data is not needed, thats why drop the tables
DROP TEMPORARY TABLE TempCustomer;
DROP TEMPORARY TABLE TempCustomer1;
END$$
DELIMITER ;
解决方案
您需要在 BEGIn ENd 中撅起循环及其声明
我仍然需要重新编程洞的东西,因为你的代码抛出错误,我找不到
create procedure prGetInsuranceData_Multiple( IN PeopleToBeCovered INT, IN _NAME VARCHAR(4000), IN _AGE VARCHAR(200)) begin DECLARE V_Name VARCHAR(255); DECLARE V_AGE INT; DECLARE X INT DEFAULT 0; drop temporary table if exists TempCustomer; drop temporary table if exists TempCustomer1; create temporary table TempCustomer( NAME VARCHAR(255),AGE int ); create temporary table TempCustomer1(NAME VARCHAR(255),AGE int); SET X = 1; BEGIN WHILE X <= PeopleToBeCovered DO SET V_Name = SUBSTRING_INDEX(SUBSTRING_INDEX(_NAME,',',X),',',-1); SET V_Age = SUBSTRING_INDEX(SUBSTRING_INDEX(_AGE,',',X),',',-1); SET X = X + 1; INSERT INTO TempCustomer VALUES(V_Name,V_Age); END WHILE; END; BEGIN DECLARE finished INTEGER DEFAULT 0; DECLARE v_id int ; DECLARE v_name varchar(255); declare cur_NameWithAge cursor for select NAME,AGE from TempCustomer; DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1; open cur_NameWithAge; GetNameWithAge: LOOP fetch cur_NameWithAge into v_name,v_id; IF finished = 1 THEN LEAVE GetNameWithAge; END IF; INSERT INTO TempCustomer1 VALUES (v_name,v_id); END LOOP GetNameWithAge; CLOSE cur_NameWithAge; END; select * FROM TempCustomer; DROP TEMPORARY TABLE TempCustomer1; DROP TEMPORARY TABLE TempCustomer1; end
call prGetInsuranceData_Multiple(2, 'Saroar,Ahmed', '20,30')
姓名 | 年龄 :----- | --: 萨罗 | 20 艾哈迈德 | 30
db<>在这里摆弄
推荐阅读
- arrays - 扩展 swift Array - 可变性问题
- java - 使用 sphinx 进行语音识别
- python - 用python re在波斯数字和字母之间添加空格
- javascript - 如何在另一个 html 页面中打开一个 html 页面作为弹出窗口
- php - 无法删除 codeigniter 中的 index.php
- sql - 我可以在没有 id 列的情况下遍历 sql 中的表吗?
- javascript - React.JS 组件的 onClick 函数,如何更具体地说明其结果
- ios - 获取 y 轴指向磁北的参考系
- html - CSS网格动态列数可能吗?
- linux - 移动和重命名 Xml 文件