DELIMITER   $$ 
CREATE PROCEDURE `test`(IN bbyf varchar(8))
BEGIN
declare ksrq   varchar(8);      
declare jsrq   varchar(8);      
declare done int default 0;select ksrq=max(fbbrq) from bb_yyrb where left(fbbrq,6)<bbyf; 
select jsrq=max(fbbrq) from bb_yyrb where left(fbbrq,6)=bbyf; declare branch_cur cursor                
for                            
select ffzdm,fkhzs,fxhzs,fzjye,fccbzj,fzcze,fljyj,fljjyj,fljks,fljyl from bb_yyrb where fbbrq=jsrq;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
...
...END $$因为declare branch_cur cursor .... 声明在黑体字后面,所以导致一直出错。如何解决???

解决方案 »

  1.   

    不妨把 declare branch_cur cursor  前的处理语句想办法去掉。
    ---------
    declare   branch_cur   cursor                                 
    for                                                         
    select   ffzdm,fkhzs,fxhzs,fzjye,fccbzj,fzcze,fljyj,fljjyj,fljks,fljyl   from   bb_yyrb   where   fbbrq=jsrq;
    ---------
    这一句好像只与jsrq有关,那么就把两句融合了吧。
    DELIMITER       $$   
    CREATE   PROCEDURE   `test`(IN   bbyf   varchar(8)) 
    BEGIN 
    declare   ksrq       varchar(8);             
    declare   jsrq       varchar(8);             
    declare   done   int   default   0; declare   branch_cur   cursor                                 
    for                                                         
    select   ffzdm,fkhzs,fxhzs,fzjye,fccbzj,fzcze,fljyj,fljjyj,fljks,fljyl   from   bb_yyrb   
    where   fbbrq in (select jsrq=max(fbbrq) from   bb_yyrb   where   left(fbbrq,6)=bbyf); DECLARE   CONTINUE   HANDLER   FOR   SQLSTATE   '02000'   SET   done   =   1; select   ksrq=max(fbbrq)   from   bb_yyrb   where   left(fbbrq,6) <bbyf;   
    ... 
    ... 
    END   $$ 
    DELIMITER       ;
      

  2.   

    楼上的兄弟说的这个方法对这个过程是可行的。但是不是通用的方法。
    要是select   ksrq=max(fbbrq)   from   bb_yyrb   where   left(fbbrq,6) <bbyf;   
    select   jsrq=max(fbbrq)   from   bb_yyrb   where   left(fbbrq,6)=bbyf;   
    的结果都要使用到的话,那么游标的SQL语句将变的非常复杂。而且要是游标中嵌套游标的话,好象没办法实现。
    不知道有没有更好的方法?