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

求助,mysql存储过程
接触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$$

------解决方案--------------------
楼主自己先描述一下问题所在,你碰到的问题是什么? 语法出错?无法运行?运行结果不对?

问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧)
------解决方案--------------------
没用过存储,不过看你结果是没有更新数据库。

在外面执行一下

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 变量名
看看结果

检查游标是否循环