直接上例子:
注意定义变量时不能要的查询的字段一样,这个问题上我纠结了半小时才搞定,其它的参考就可以了
DROP PROCEDURE IF EXISTS test_cursor; -- 删除
DELIMITER $$
CREATE PROCEDURE test_cursor() -- 创建
BEGIN
/*定义变量*/
DECLARE tidno VARCHAR(255);-- 不能和查询字段名称一样
DECLARE tcname VARCHAR(255);
DECLARE tctel VARCHAR(255);
DECLARE tcorderid VARCHAR(255);
DECLARE cid VARCHAR(255);
-- 定义循环标识,默认值为 FALSE
DECLARE done INT DEFAULT FALSE;
-- 定义游标
DECLARE My_Cursor CURSOR FOR (SELECT ORDERID,CUSTOMER_ID FROM tb_repairorder);
-- 将结束标志绑定到游标,若没有数据返回,程序继续,并将变量done设为TRUE
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN My_Cursor;
myLoop : LOOP
-- 循环游标中的数据,并赋值到变量中
FETCH My_Cursor INTO tcorderid,cid;
IF done THEN
LEAVE myLoop;
ELSE
SELECT CNAME,CTEL,IDNO INTO tcname,tctel,tidno FROM tb_customer WHERE CUSTOMER_ID=cid;
UPDATE tb_repairorder SET CNAME=tcname,CTEL=tctel,IDNO=tidno WHERE ORDERID= tcorderid;
END IF;
COMMIT;
SELECT CONCAT(tcname);-- 输出变量值
END LOOP myLoop;
CLOSE My_Cursor;
END
$$
CALL test_cursor(); --调用