CREATE PROCEDURE `test`.`new_procedure` () BEGIN DECLARE done INT DEFAULT FALSE; -- 需要定義接收游標(biāo)數(shù)據(jù)的變量 DECLARE a CHAR(16); -- 游標(biāo) DECLARE cur CURSOR FOR SELECT i FROM test.t; -- 遍歷數(shù)據(jù)結(jié)束標(biāo)志 DECLARE done INT DEFAULT FALSE; -- 將結(jié)束標(biāo)志綁定到游標(biāo) DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 打開(kāi)游標(biāo) OPEN cur1; -- 開(kāi)始循環(huán) read_loop: LOOP -- 提取游標(biāo)里的數(shù)據(jù),,這里只有一個(gè),多個(gè)的話也一樣,; FETCH cur INTO a; -- 聲明結(jié)束的時(shí)候 IF done THEN LEAVE read_loop; END IF; -- 這里做你想做的循環(huán)的事件 INSERT INTO test.t VALUES (a); END LOOP; -- 關(guān)閉游標(biāo) CLOSE cur1; END 這里有一個(gè)比較坑的地方,,注意,變量的定義不要和你的select的列的鍵同名,!不然,,fetch into 會(huì)失敗! 另外 : 如果沒(méi)有則插入數(shù)據(jù),,如果有則更新的方法: insert into `test` values (a,b) ON DUPLICATE KEY UPDATE `a`=c;
|
|
來(lái)自: 天海544 > 《數(shù)據(jù)庫(kù)》