CREATE DEFINER=`root`@`localhost` PROCEDURE `p4`()
BEGIN
  declare done int default 0;
  declare a int;
  declare b varchar(20);
    create temporary table tmp_test
  ( s1 varchar(50) null,
    s2 varchar(50) null
  );
  declare cur1 cursor for select s1,s2 from db5.t2;
  declare continue handler for sqlstate '02000' set done = 1;
  open cur1;
   repeat
        fetch cur1 into a ,b;
        if(not done )then
               update t2 set s2 = '1';
        end if;
  until done end repeat;
  close cur1;
END以上 脚本语法不通过
但把创建临时表放到光标后面,语法检测就可以通过,请教原因CREATE DEFINER=`root`@`localhost` PROCEDURE `p4`()
BEGIN
  declare done int default 0;
  declare a int;
  declare b varchar(20);  declare cur1 cursor for select s1,s2 from db5.t2;
  declare continue handler for sqlstate '02000' set done = 1;
  open cur1;
   repeat
        fetch cur1 into a ,b;
        if(not done )then
               update t2 set s2 = '1';
        end if;
  until done end repeat;  close cur1;
  create temporary table tmp_test
  ( s1 varchar(50) null,
    s2 varchar(50) null
  );
END

解决方案 »

  1.   

    好像mysql的存储过程,变量都是要先声明才能用的,在这本书OReilly.MySQL.Stored.Procedure.Programming中有提到
      

  2.   

    变量我都有申明的啊,这里语法检测
    我把
    创建临时表放到前面就语法报错,放到后面就通过了
      create temporary table tmp_test
      ( s1 varchar(50) null,
        s2 varchar(50) null
      );