日期:2014-05-16  浏览次数:20779 次

Mysql 存储过程 游标中使用变量的问题
最近学习存储过程,我想在其中使用游标并在游标中加入变量,我知道我下面的写法不对,请好心人帮忙看下
SQL code

create procedure getFilmInfo (in name varchar(100))
begin
    DECLARE done INT DEFAULT 0;
    declare filmName varchar(100);
    declare revenue double;
    declare directorInfoCur cursor for select film.filmName, film.revenue from film where film.directorName like '%name/%';
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
    
    open directorInfoCur;
    repeat
        fetch directorInfoCur into filmName, revenue;
        
        if not done then
            select filmName, revenue;
        end if;
    until done end repeat;
    close directorInfoCur;
end



------解决方案--------------------
declare directorInfoCur cursor for select film.filmName, film.revenue from film where film.directorName like concat('%',name,'/%');
------解决方案--------------------
declare directorInfoCur cursor for select film.filmName, film.revenue from film where film.directorName like concat('%',name,'/%');
------解决方案--------------------
没有用的,MySQL游标是不允许为动态的,而且你的查询条件为变量,导致整个游标成为动态SQL....

而MySQL游标是不支持动态游标的




推荐:
淘宝和阿里巴巴去Oracle化事件 引发数据库技术人员大讨论
MySQL数据库开源软件版本 生产环境GA版本如何选择
------解决方案--------------------
不能动态就把结果集放入有自增字段的临时表里


然后用自增字段循环处理就可以了