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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql动态sql循环语句_mysql存储过程循环遍历sql结果集,并执行动态sql

發布時間:2025/3/19 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql动态sql循环语句_mysql存储过程循环遍历sql结果集,并执行动态sql 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*

將其他幾張表數據復制到一張總表中

*/

DROP PROCEDURE IF EXISTS sp_customer;

CREATE PROCEDURE sp_customer()

BEGIN

-- 需要執行的SQL語句

DECLARE v_sql_1 VARCHAR(500);

DECLARE v_sql_2 VARCHAR(500);

DECLARE v_sql_3 VARCHAR(500);

-- 定義變量

DECLARE companyId INT;

DECLARE maxId1 INT;

DECLARE maxId2 INT;

-- 定義游標遍歷時,作為判斷是否遍歷完全部記錄的標記

DECLARE num INT DEFAULT 0;

-- 定義游標,并將sql結果集賦值到游標中

DECLARE company_list CURSOR FOR SELECT company_id,max_id FROM customer_job WHERE id>1;

-- 聲明當游標遍歷完全部記錄后將標志變量置成某個值

DECLARE CONTINUE HANDLER FOR NOT FOUND SET num=1;

-- DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET num = 1;

-- 打開游標

OPEN company_list;

-- 將游標中的值賦值給變量,要注意sql結果列的順序

FETCH company_list INTO companyId,maxId1;

-- while循環

WHILE num <> 1 DO

-- 動態拼接sql并賦值v_sql_1

SET v_sql_1 = CONCAT('select max(id) into @param1 from customer',companyId);

-- 需要用@轉換下,直接v_sql_1執行不了

SET @sql_1 = v_sql_1;

-- 預處理需要執行的動態SQL,其中stmt是一個變量

PREPARE stmt1 FROM @sql_1;

-- 執行SQL語句

EXECUTE stmt1;

-- 釋放掉預處理段

DEALLOCATE PREPARE stmt1;

-- @param1賦值給maxId2

SET maxId2 = @param1;

-- 動態拼接sql并賦值v_sql_2

SET v_sql_2 = CONCAT('insert into customer(name,sex,age,card_id,phone,email,addr,company,group,tag,stage,phone_state,loan_type,loan_amount,company_id,data_from) ',

' select name,sex,age,card_id,phone,email,addr,company,group,tag,stage,phone_state,loan_type,loan_amount,company_id,data_from from customer',companyId,

' where id>',maxId1,' and id<=',maxId2);

SET @sql_2 = v_sql_2;

-- 預處理需要執行的動態SQL,其中stmt是一個變量

PREPARE stmt2 FROM @sql_2;

-- 執行SQL語句

EXECUTE stmt2;

-- 釋放掉預處理段

DEALLOCATE PREPARE stmt2;

-- 動態拼接sql并賦值v_sql_3

SET v_sql_3 = CONCAT('update customer_job set update_num=update_num,max_id=',maxId2,' where company_id=',companyId);

SET @sql_3 = v_sql_3;

-- 預處理需要執行的動態SQL,其中stmt是一個變量

PREPARE stmt3 FROM @sql_3;

-- 執行SQL語句

EXECUTE stmt3;

-- 釋放掉預處理段

DEALLOCATE PREPARE stmt3;

-- 將游標中的值賦值給變量,要注意sql結果列的順序

FETCH company_list INTO companyId;

END WHILE;

-- 關閉游標

CLOSE company_list;

END;

總結

以上是生活随笔為你收集整理的mysql动态sql循环语句_mysql存储过程循环遍历sql结果集,并执行动态sql的全部內容,希望文章能夠幫你解決所遇到的問題。

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