接触mysql存储过程不久,用的不熟,看看啥问题啊(测试阶段)
3张表,t1(cardno,flag),t2(cardno,cardno2),tt(cardno,tip),根据t1中的flag,更新tt中的tip值
CREATE DEFINER=`mposp`@`%` PROCEDURE `p_test`()
BEGIN
top:BEGIN
   DECLARE c_cardno INT(16);
   DECLARE c_flag INT(1);
   DECLARE n_exist INT DEFAULT 0;
DECLARE cur_act CURSOR FOR
/*将两张表中数据合并*/
 SELECT cardno,flag
 FROM t1
 WHERE   flag IS NOT NULL AND flag!=0
 UNION 
 SELECT t2.cardno2,t1.flag/*cardno2和cardno1数据类型一至*/
 FROM t1,t2
 WHERE t1.vardno=t2.cardno and flag IS NOT NULL AND flag!=0;
 
SELECT COUNT(*) 
     INTO n_exist 
     FROM t1; 
 
  IF n_exist = 0 THEN
     LEAVE top;
   END IF;
     OPEN cur_act;
FETCH cur_act INTO c_cardno, c_flag;
IF c_flag=1 THEN
UPDATE tt SET tip=1  WHERE cardno =c_cardno ;
LEAVE top;
END IF;
IF c_flag=2 THEN
UPDATE tt SET tip=2 WHERE cardno =c_cardno ;
LEAVE top;
END IF;
    CLOSE cur_act;
END top;
END$$

解决方案 »

  1.   

    可以把t2看成t1的子表,tt含有两个表中cardno,cardno2的信息
      

  2.   

    完全没必要用leave top这种逻辑
      

  3.   

    没用过存储,不过看你结果是没有更新数据库。在外面执行一下SELECT cardno,flag
     FROM t1
     WHERE flag IS NOT NULL AND flag!=0
     UNION  
     SELECT t2.cardno2,t1.flag/*cardno2和cardno1数据类型一至*/
     FROM t1,t2
     WHERE t1.vardno=t2.cardno and flag IS NOT NULL AND flag!=0;这个语句看结果是多少吧。
      

  4.   

    只有分步调试,检查结果SELECT 变量名
    看看结果检查游标是否循环