use st;
DELIMITER $$
CREATE PROCEDURE 2in1()
begin
declare bm char(8);
declare found2 boolean default true;
declare bm_ cursor for select table_name from information_schema.tables where table_schema='st' limit 1,15000;
declare continue handler for not found set found2=false;
open bm_;while found2 do
fetch bm_ into bm;
if found=true then
begin
declare rq_ date;
declare found boolean default true;# declare rq_bcf cursor for select distinct(rq) from bm;   SET @STMT=CONCAT('declare rq_bcf cursor for select distinct(rq) from ',bm,';');   
     
   PREPARE STMT FROM @STMT;   
   EXECUTE STMT;   
# DEALLOCATE PREPARE stmt;       open rq_bcf;
while found do
fetch rq_bcf into rq_;
end while;
close rq_bcf;
end;
end if;
end while;
close bm_;
end$$
delimiter ;
运行提示:
ERROR 1324 (42000): Undefined CURSOR: rq_bcf真是没有办法了,请教再请教。

解决方案 »

  1.   

    declare rq_bcf cursor for select * from newtt;
    ......
    set @asql=concat('create table newttt as select distinct(rq) from ',bm);
    PREPARE STMT FROM @asql;   
    EXECUTE STMT;  
    .....
      

  2.   

    至少目前版本的MYSQL不支持动态的CURSOR
      

  3.   

    悲催的很啊。
    上面的问题解决了,不过,对预处理还是没有掌握。在下面的运用中,总是提示错误,已试了ABCD四种方式。
    请高手救我。
    ........open rq_bcf;
    while found do
    fetch rq_bcf into rq_;
    select rq_;    /* 监测rq_值  */
    if found=true then
    begin
    declare bpld_ MEDIUMINT;
    declare spld_ MEDIUMINT;
    declare zxp_ MEDIUMINT;
    #select sum(ss) into bpld_ from bm where bs='b';
    #select sum(ss) into spld_ from bm where bs='s';
    #select sum(ss) into zxp_ from bm where bs='z';select bm,rq_;    /* 监测bm,rq_值 */#  A:
    #set @asql1=concat('select sum(ss) into ',bpld_,' from ',bm,' where bs=b and rq= ',rq_,';');
    # PREPARE STMT1 FROM @asql1;
     #  EXECUTE STMT1;
    #set @asql2=concat('select sum(ss) into ',spld_,' from ',bm,' where bs=s and rq= ',rq_,';');
     #PREPARE STMT2 FROM @asql2;
      # EXECUTE STMT2;
    #set @asql3=concat('select sum(ss) into ',zxp_,' from ',bm,' where bs=z and rq= ',rq_,';');
     #PREPARE STMT3 FROM @asql3;
      # EXECUTE STMT3;
    #  B:
    #set @asql1=concat('select sum(ss) into ? from ',bm,' where bs=b and rq=?;');
     #PREPARE STMT1 FROM @asql1;
    #set @bpld_=bpld_;
    #set @rq_=rq_;
     #  EXECUTE STMT1 using @bpld_, @rq_;
    #set @asql2=concat('select sum(ss) into ? from ',bm,' where bs=s and rq=?;');
     #PREPARE STMT2 FROM @asql2;
    #set @spld_=spld_;
    #set @rq_=rq_;
     #  EXECUTE STMT2 using @spld_, @rq_;
    #set @asql3=concat('select sum(ss) into ? from ',bm,' where bs=z and rq=?;');
     #PREPARE STMT3 FROM @asql3;
    #set @zxp_=zxp_;
    #set @rq_=rq_;
     #  EXECUTE STMT3 using @zxp_, @rq_;
    #  C:
    #set @asql1=concat('select sum(ss) into ',bpld_,' from ',bm,' where bs=b and rq=?;');
     #PREPARE STMT1 FROM @asql1;
    #set @rq_=rq_;
     #  EXECUTE STMT1 using @rq_;
    #set @asql2=concat('select sum(ss) into ',spld_,' from ',bm,' where bs=s and rq=?;');
    # PREPARE STMT2 FROM @asql2;
    #set @rq_=rq_;
     #  EXECUTE STMT2 using @rq_;
    #set @asql3=concat('select sum(ss) into ',zxp_,' from ',bm,' where bs=z and rq=?;');
    # PREPARE STMT3 FROM @asql3;
    #set @rq_=rq_;
     #  EXECUTE STMT3 using @rq_;
    #  D:
    set @asql1=concat('select sum(ss) into bpld_ from ',bm,' where bs=b and rq=?;');
     PREPARE STMT1 FROM @asql1;
    set @rq_=rq_;
       EXECUTE STMT1 using @rq_;
    set @asql2=concat('select sum(ss) into spld_ from ',bm,' where bs=s and rq=?;');
     PREPARE STMT2 FROM @asql2;
    set @rq_=rq_;
       EXECUTE STMT2 using @rq_;
    set @asql3=concat('select sum(ss) into zxp_ from ',bm,' where bs=z and rq=?;');
     PREPARE STMT3 FROM @asql3;
    set @rq_=rq_;
       EXECUTE STMT3 using @rq_;........