如何在mysql中使用游标循环的结束循环
下面的代码用于从一个名为employee7的表中查找前五名薪酬最高的员工,并在mysql中使用cursor将详细信息添加到另一个名为temp的表中,但我得到了错误 您的mysql语法有错误,请检查对应于mysql服务器版本的mannual,以获取使用near'loop cursorloop的正确语法; 关闭c7; 结束;第17行如何在mysql中使用游标循环的结束循环,mysql,database,Mysql,Database,下面的代码用于从一个名为employee7的表中查找前五名薪酬最高的员工,并在mysql中使用cursor将详细信息添加到另一个名为temp的表中,但我得到了错误 您的mysql语法有错误,请检查对应于mysql服务器版本的mannual,以获取使用near'loop cursorloop的正确语法; 关闭c7; 结束;第17行 我不知道您是从哪里想到使用c7.rowcount的,但这在mysql中是无效的。在mysql中退出游标循环更常见的方法是使用示例中的处理程序 DELIMITER //
我不知道您是从哪里想到使用c7.rowcount的,但这在mysql中是无效的。在mysql中退出游标循环更常见的方法是使用示例中的处理程序
DELIMITER //
create procedure cursordemo()
begin
declare eno int(8);
declare ename varchar(15);
declare esal int(10);
declare done int default 0;
declare c7 cursor for select emp_no,last_name,salary from employees order by salary desc;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
open c7;
cursorloop:loop
if done = true then
leave cursorloop;
end if;
fetch c7 into eno,ename,esal;
insert into temp values (esal,eno,ename);
end loop cursorloop;
close c7;
end //
delimiter ;
我不知道您是从哪里想到使用c7.rowcount的,但这在mysql中是无效的。在mysql中退出游标循环更常见的方法是使用示例中的处理程序
DELIMITER //
create procedure cursordemo()
begin
declare eno int(8);
declare ename varchar(15);
declare esal int(10);
declare done int default 0;
declare c7 cursor for select emp_no,last_name,salary from employees order by salary desc;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
open c7;
cursorloop:loop
if done = true then
leave cursorloop;
end if;
fetch c7 into eno,ename,esal;
insert into temp values (esal,eno,ename);
end loop cursorloop;
close c7;
end //
delimiter ;
你不需要游标,甚至不需要存储过程,你可以用一个简单的查询来替换所有的
插入临时值([columns])从employee7 order by empsal desc中选择[columns],但是我用于游标的任何代码都显示了相同的错误;感谢您,这是错误,但在使用命令select*from temp运行程序后,即使表格employee7有8行数据,也会将空集显示为输出。您提到了rowcount>5的条件,然后退出循环,那么为什么数据会被插入到临时表中呢?你没有一个游标,甚至没有一个存储过程,你可以用一个简单的查询来替换所有的插入临时值([columns])从employee7 order by empsal desc选择[columns],但是我用于游标的任何代码都显示了相同的错误。如果;感谢您,这是错误,但在使用命令select*from temp运行程序后,即使表格employee7有8行数据,也会将空集显示为输出。您提到了rowcount>5的条件,然后退出循环,那么为什么数据会被插入到临时表中呢?但我只想选择前五行。要么在select语句中添加一个limit子句,要么声明一个计数器,每次通过循环将其递增1,然后在if条件中添加一个测试。在sql中,我们使用cursor%rowcount命令。MySQL中是否有我不知道的类似命令。我假设您已经习惯了plsql,它与mysql非常不同。但是我只想选择前五行。要么在select语句中添加limit子句,要么声明计数器,在sql中,我们使用cursor%rowcount命令。mysqlNot中有没有类似的命令我不知道。我假设您已经习惯了plsql,这与mysql非常不同。