日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql游标事例_Mysql 游标示例

發布時間:2024/9/30 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql游标事例_Mysql 游标示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CREATE? PROCEDURE `gk_test`()

COMMENT '測試數據'? -- 函數注釋

BEGIN

DECLARE done INT DEFAULT FALSE;?-- 定義遍歷數據結束標志。非游標變量,需要定義在游標變量前

DECLARE m_id CHAR(32);?-- 定義接收游標數據中id變量

DECLARE m_or VARCHAR(255);?--?定義接收游標數據中orderno變量

DECLARE m_c INT(11);??--?定義接收游標數據中count變量

DECLARE m_soult CURSOR FOR SELECT `id`, `orderno`, count(*) t FROM hb_shipper_order GROUP BY orderno HAVING t >1;???-- 定義游標變量,即接收查詢結果集

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;??-- 將結束標志綁定到游標

OPEN m_soult;? ??-- 打開游標

read_loop:LOOP? ?-- 開始循環。這個是mysql 3種循環中的1種。

FETCH m_soult INTO m_id,m_or,m_c;???-- 提取游標數據

IF done THEN? ?-- 判斷,當為true時

LEAVE read_loop;? ?-- 跳出循環

END IF;

-- 處理事 自己想處理的事

UPDATE `hb_shipper_waybill` SET

ordernos = REPLACE (`ordernos`, m_or, CONCAT(m_or,'-2')),

goodsname = REPLACE (`goodsname`, m_or, CONCAT(m_or,'-2'))

WHERE `id` IN ( SELECT `waybillid` FROM `hb_shipper_order_waybill_relation` WHERE orderid = m_id);

UPDATE `hb_shipper_order` SET orderno = CONCAT(m_or,'-2') WHERE id = m_id;

END LOOP;? -- 結束循環

-- 關閉游標

CLOSE m_soult;

END

上圖:

DEMO: 2? ? // 通過 存儲過程,處理? copy 數據并處理對應數據關系

delimiter $$

DROP PROCEDURE IF EXISTS gk;

CREATE DEFINER =? PROCEDURE `gk`(IN pname varchar(255))

COMMENT '測試'

BEGIN

DECLARE new_id CHAR(32);

DECLARE m_id CHAR(32);

DECLARE new_noids VARCHAR(255);

DECLARE done INT DEFAULT 0;

DECLARE m_result CURSOR FOR select id from `xxx`;

DECLARE m_result2 CURSOR FOR select id from `xxx`;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

DROP TABLE IF EXISTS `xxx`;

CREATE TABLE `xxx` (

`id` char(32) NOT NULL COMMENT 'ID',

`subsystem` char(32) NOT NULL COMMENT '',

`name` varchar(20) NOT NULL COMMENT '',

`type` varchar(15) NOT NULL COMMENT '',

`url` varchar(200) DEFAULT NULL COMMENT '',

`icon` varchar(20) DEFAULT NULL COMMENT '',

`target` varchar(10) NOT NULL DEFAULT '_self' COMMENT '',

`method` mediumtext COMMENT '',

`orderby` smallint(3) NOT NULL DEFAULT '0' COMMENT '',

`parentid` char(32) NOT NULL DEFAULT '0' COMMENT '',

`relateid` char(32) NOT NULL COMMENT '',

`isopen` tinyint(1) NOT NULL DEFAULT '1' COMMENT '',

`nodeids` varchar(255) DEFAULT NULL COMMENT '',

`nodenum` smallint(3) NOT NULL DEFAULT '0' COMMENT '',

`createtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '',

`createuser` char(32) NOT NULL DEFAULT '0' COMMENT '',

`updatetime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '',

`udateuser` char(32) NOT NULL DEFAULT '0' COMMENT '',

`deleted` tinyint(1) DEFAULT '0' COMMENT '',

`status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '',

`isdefault` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '',

`isdisable` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '',

`projecttype` varchar(255) NOT NULL COMMENT '',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

INSERT INTO `xxxx` SELECT * FROM `aaa` WHERE `projecttype` = 'T';

UPDATE `xxx` SET `projecttype` = pname;

OPEN m_result;

REPEAT

FETCH m_result INTO m_id;

SET new_id = UPPER(REPLACE(UUID(),'-',''));

UPDATE `xxx` SET `id` = new_id WHERE `id` = m_id;

UPDATE `xxx` SET `parentid` = new_id WHERE `parentid` = m_id;

UNTIL done END REPEAT;

CLOSE m_result;

SET done = 0;

OPEN m_result2;

REPEAT

FETCH m_result2 INTO m_id;

SELECT CONCAT(',', GROUP_CONCAT(`id`)) INTO new_noids FROM `xxx` WHERE `parentid` = m_id;

UPDATE `xxx` SET `nodeids` = new_noids WHERE `id` = m_id;

UNTIL done END REPEAT;

CLOSE m_result2;

INSERT INTO `aaa` SELECT * FROM `xxx`;

DROP TABLE IF EXISTS xxx;

END $$

delimiter ;

總結

以上是生活随笔為你收集整理的mysql游标事例_Mysql 游标示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。