我试图通过存储过程提取一个字段,我使用了以下查询。我的目标是取出多个行,但只有在存在单个行时,它才能成功地执行结果。否则,它将返回一个错误,正如我在下面提到的。
MySQL查询
DELIMITER ;;
DROP PROCEDURE IF EXISTS Sample1;;
CREATE PROCEDURE Sample1(IN lft1 INT, IN rgt1 INT, OUT emp1 VARCHAR(20))
BEGIN
SELECT p.emp INTO emp1
FROM personnel p
WHERE p.lft > lft1
AND p.rgt < rgt1
LIMIT 10;
END;;
CALL Sample1(1, 10, @emp);;
SELECT @emp;错误消息
MySQL said: Documentation
#1172 - Result consisted of more than one row 备注
Sample1-过程名称emp-从表人员中选择字段lft-用于检查状态,也是表人员领域之一。personnel-表名
发布于 2011-11-29 08:58:37
该错误不在您的过程中。错误在查询中--它返回多行,但不能将多个结果设置为标量值“emp1 1”。
您应该限制查询,使其返回一行。
如何从mysql中的存储过程中提取多行?
发布于 2014-08-20 10:02:51
只是有同样的问题。经过一番研究,我在官方的MySQL文档中找到了一个解决方案:
它需要MySQL 5.5.3或更高版本。
与@Bala.C中的inital存储过程不同,它不使用out参数。
CREATE PROCEDURE get_data ()
BEGIN
SELECT Code, Name, Population, Continent
FROM Country
WHERE Continent = 'Oceania'
AND Population < 10000;
SELECT Code, Name, Population, Continent
FROM Country
WHERE Continent = 'Europe'
AND Population < 10000;
SELECT Code, Name, Population, Continent
FROM Country
WHERE Continent = 'North America'
AND Population < 10000;
END;发布于 2013-07-25 07:12:00
您可以在游标中使用MySQL。
CREATE PROCEDURE Sample1(IN lft1 INT,IN rgt1 INT, OUT emp1 VARCHAR(20))
BEGIN
DECLARE p_emp INT;
DECLARE cur_emp CURSOR FOR
SELECT p.emp
FROM personnell p
WHERE p.lft > lft1
and p.rgt < rgt1
LIMIT 10;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET noMoreRow = 0;
OPEN cur_emp;
LOOPROWS: LOOP
IF noMoreRow = 0 THEN
CLOSE cur_emp;
LEAVE LOOPROWS;
END IF;
FETCH cur_emp INTO p_emp;
SELECT p_emp;
END LOOP;
END;;https://stackoverflow.com/questions/8307939
复制相似问题