先来个伪需求:
将表a的id和value加到一起组成一个新的值,然后在把这个值填入B表中;
表A
表B
要进行这样的操作必须的使用for循环,但是在mysql中的不是这样写,的需要游标这个东西;
delimiter //
create procedure p9()
begin -- 声明变量
declare a_id int;
declare a_value int ;
declare num int ;
declare done int default false;
declare my_cursor cursor for select id,value1 from a;-- 建立游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 开始循环
open my_cursor;
lhy:loop
fetch my_cursor into a_id,a_value;
if done=True then
leave lhy;-- 离开循环
end if ;
set num = a_id + a_value;
insert into B(num) values(num);
end loop lhy; -- 结束循环
close my_cursor;
commit;
end //
delimiter;
call p9();
上面的代码就实现了这些。自己看看。
值得注意的是,标点符号一定要是英文的,不然报错你查半天也查不出来是哪里错了,我就因为写了个中文的符号查了一个半小时的错误,终于查出来了。
下面是美化之后的代码公式,你自己看一下。
delimiter //
CREATE PROCEDURE p9 ( )
BEGIN -- 声明变量
DECLARE a_id INT;
DECLARE a_value INT;
DECLARE num INT;
DECLARE done INT DEFAULT FALSE;
DECLARE my_cursor CURSOR FOR SELECT id,value1 FROM a;-- 建立游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 开始循环
OPEN my_cursor;
lhy:LOOP
FETCH my_cursor INTO a_id,a_value;
IF done = TRUE THEN -- 这里没有;否者会报错
LEAVE lhy;-- 离开循环
END IF;
SET num = a_id + a_value;
INSERT INTO B ( num )VALUES( num );
END LOOP lhy;-- 结束循环
CLOSE my_cursor;
COMMIT; -- 不提交也会保存数据的
END //
delimiter;
.