mysql用存儲(chǔ)過程循環(huán)截取用戶信息并插入到目標(biāo)表對(duì)應(yīng)的字段實(shí)例
以下實(shí)實(shí)例實(shí)現(xiàn)的功能是mysql創(chuàng)建一個(gè)存儲(chǔ)過程,然后循環(huán)環(huán)截取用戶信息并插入到目標(biāo)表對(duì)應(yīng)的字段,這個(gè)功能對(duì)網(wǎng)站改版用處比較大.
操作環(huán)境:有表game_list,字段:uid,score1,score2,seat_id,last_update;
傳入?yún)?shù)為i_player_detail,傳入的值為多個(gè)用戶的id、之前分?jǐn)?shù)、之后分?jǐn)?shù)、座位號(hào),每個(gè)用戶的數(shù)據(jù)用分號(hào)(;)隔開;
操作目的:將各個(gè)用戶對(duì)應(yīng)的屬性插入到目標(biāo)表對(duì)應(yīng)的字段中,last_update為數(shù)據(jù)更新日期;
傳入?yún)?shù)i_player_detail,里面存放多個(gè)用戶的信息,每個(gè)用戶的一組數(shù)據(jù)用分號(hào)隔開,每個(gè)用戶的信息多個(gè),比如.
“用戶id,score,desk,seat;
用戶id,score,desk,seat;……”
代碼如下:
- -- 使用存儲(chǔ)過程
- delimiter $$
- use `log_pdk`$$
- drop procedure if exists `game_c`$$
- create procedure `game_c` (in i_player_detail varchar(500))
- SQL SECURITY INVOKER
- BEGIN
- DROP TABLE IF EXISTS `temp_list`;
- --創(chuàng)建臨時(shí)表,將截取的數(shù)據(jù)先插入到臨時(shí)表
- CREATE TEMPORARY TABLE `temp_list`(
- `uid` INT(10) UNSIGNED NOT NULL,
- `score1` INT(10) UNSIGNED NOT NULL,
- `score2` INT(10) UNSIGNED NOT NULL,
- `seat_id` TINYINT(3) UNSIGNED NOT NULL
- );
- -- declare str varchar(500);-- 用來拼接sql動(dòng)態(tài)語句
- declare m_detail varchar(500);
- declare m_num tinyint;
- -- 當(dāng)傳入的用戶信息字符串中含有分號(hào)';',進(jìn)行截取
- set m_num = position(';' in str) -- 不存在分號(hào)的時(shí)候,返回0
- while m_num >= 1 do
- begin
- set @str = 'insert into temp_list values (' + substring(m_detail,1,m_num-1)+')' -- 截取第一個(gè)用戶的信息(第一個(gè)分號(hào)前面的字符),插入到臨時(shí)表
- prepare statement1 from @str;
- execute statement1;
- deallocate prepare statement1;
- set m_detail = substring(m_detail,m_num+1); -- 定義除去第一個(gè)用戶和分號(hào)那部分的字符串
- set set m_num = position(';' in str);
- end while; --Vevb.com
- -- 從臨時(shí)表抽出所有字段,添加時(shí)間字段,插入到表game_list
- INSERT INTO `game_list`(`uid`,`score1`,`score2`,`seat_id`, `last_update`)
- SELECT `uid`, `score1`, `score2`, `seat_id`, current_date()
- FROM `temp_list`;
- end$$
- delimiter;
新聞熱點(diǎn)
疑難解答
圖片精選