Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mysql中使用游标循环的结束循环_Mysql_Database - Fatal编程技术网

如何在mysql中使用游标循环的结束循环

如何在mysql中使用游标循环的结束循环,mysql,database,Mysql,Database,下面的代码用于从一个名为employee7的表中查找前五名薪酬最高的员工,并在mysql中使用cursor将详细信息添加到另一个名为temp的表中,但我得到了错误 您的mysql语法有错误,请检查对应于mysql服务器版本的mannual,以获取使用near'loop cursorloop的正确语法; 关闭c7; 结束;第17行 我不知道您是从哪里想到使用c7.rowcount的,但这在mysql中是无效的。在mysql中退出游标循环更常见的方法是使用示例中的处理程序 DELIMITER //

下面的代码用于从一个名为employee7的表中查找前五名薪酬最高的员工,并在mysql中使用cursor将详细信息添加到另一个名为temp的表中,但我得到了错误

您的mysql语法有错误,请检查对应于mysql服务器版本的mannual,以获取使用near'loop cursorloop的正确语法; 关闭c7; 结束;第17行


我不知道您是从哪里想到使用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非常不同。