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結果集,並執行動態sql
/* 將其他幾張表資料複製到一張總表中 */ DROP PROCEDURE IF EXISTS sp_customer; CREATE PROCEDURE sp_customer() BEGIN -- 需要執行的SQL語句 DECLARE v_sql_1 VARCH
MySQL 儲存過程迴圈遍歷
WHILE, REPEAT, LOOP在MYSQL裡都是用來作為定型文抽出而使用的,都是利用迴圈方式提取資料。在這三種方法中,WHILE是在迴圈的初回處理開始之前進行條件判斷,REPEAT是在迴圈結束時進行判斷,而LOOP不具備判斷功能。這三種功能的使用一定要在MySQL5.
MYSQL儲存過程迴圈遍歷插入資料
本示例通過 while...end while 迴圈控制遊標來實現插入表記錄。 DROP PROCEDURE IF exists pro_initCategoryForTradingEntity; create procedure pro_initCategoryForTr
儲存過程呼叫 遍歷返回結果集
//java呼叫儲存過程 使用遊標遍歷結果集 public void getCallableStatement(){ CallableStatement cs=null; Connection
mysql儲存過程之迴圈遍歷查詢結果集
-- 建立儲存過程之前需判斷該儲存過程是否已存在,若存在則刪除 DROP PROCEDURE IF EXISTS init_reportUrl; -- 建立儲存過程 CREATE PROCEDURE init_reportUrl() BEGIN -- 定義變數 DECLARE s int
mysql儲存過程遊標遍歷之while篇
最近業務需要翻閱了很多關於遊標遍歷使用的帖子 總結一下 直接上程式碼吧 IN `bindid_in` char(36) --輸入引數 BEGIN /** 淨值=固定資產原值-累計折舊 累計折舊=月折舊額*已計提月份 月折舊額=(固定資產原價-(固定資產原價*3%的殘值率))/預計使
遍歷查詢結果集,update數據
cas code view sed closed clas alt upd begin 1 set rowcount 0 2 select NULL mykey, * into #mytemp from dbo.DIM_DISTRIBUTOR 3 4 s
mysql儲存過程迴圈 while/repeat/loop
先把語句結束符設定成// mysql> DELIMITER // while 條件 do … end while mysql> create procedure proce_while() -> begin -> de
mybaties呼叫mysql儲存過程。儲存過程返回多個select結果集。
先看需求,直接上圖 從圖中看出,需要12條普通的SELECT語句,所以就放到儲存過程中 儲存過程如下: DROP PROCEDURE IF EXISTS proc_report; DELIMITER $ CREATE PROCEDURE proc_report( OUT d_norma
mysql儲存過程迴圈事務插入資料
DROP PROCEDURE IF EXISTS insertTUserStatement; create procedure insertTUserStatement(IN num int) begin declare i int; start transac
MYSQL儲存過程迴圈CURSOR(遊標)使用
遊標概述 概括來說,遊標是一種臨時的資料庫物件,即用來存放一個表中所有資訊或者表中的一部分資料資訊(副本)。遊標也可以用來指向資料的某一行,可以充當資料庫中的行指標。 最常見用途就是儲存查詢結果,便於後面使用,遊標中的結果集都是有select語句產生的(臨時的資料庫物件)。
mysql儲存過程迴圈修改每一條資料
DELIMITER $$ USE `health`$$ DROP PROCEDURE IF EXISTS `repairDiseaseData`$$ CREATE DEFINER=`root`@`%` PROCEDURE `repairDiseaseData`() BEGI
mysql儲存過程和計劃任務【叢集下,計劃任務的執行控制】
DROP PROCEDURE IF EXISTS `p_test_cluster`; DELIMITER ;; CREATE PROCEDURE `p_test_cluster`() BEGIN DECLARE iState INTEGER DEFAULT 0;
迴圈遍歷相同名class,限制文字字數,多餘的文字以省略號顯示
<script> $(function(){ var $arr=$('.word_count'); for(v
遍歷ResultSet結果集的列資訊
現在的SSH開發框架非常流行,使得大家都有點忘記了JDBC的用法。筆者在工作中剛好遇到一個場景,由於對效能有較高要求,並且儘可能採用輕量級的技術方案,最終選擇了最原始的JDBC技術。 在功能模組開發的過程中,由於SQL是動態生成的,在獲取結果集後要通過遍歷Re
Java獲取儲存過程返回的多個結果集
第一步:寫你的儲存過程 delimiter // create procedure test_proc () begin select * from test_table1 where id=1; select * from test_table
在彈框中獲取foreach中遍歷的id值,並傳遞給地址欄(方法2)
ges 應該 我們 png 地址欄 each 獲取 賦值 有時 1.php有時候我們需要再彈框中獲取foreach中遍歷的數據(例如id),在彈框中點擊按鈕並傳遞給地址欄跳轉。那麽應該怎麽做呢。第二種方法。 2. 可以在彈框中給出一個input hidden 點擊按鈕彈窗時
C++遍歷日誌log目錄,並提取資料進行分析
1 前言 我們經常在編寫軟體的時候,需要載入log檔案來記錄程式執行過程中可能會出現的bug,或者記錄一些重要的執行資訊。一旦一個目錄下生成很多log檔案後,實際上我們管理與分析還是需要費一些時間
mysql儲存過程查詢結果迴圈遍歷 判斷 賦值 遊標等基本操作
一、首先說下本篇部落格所實現功能的背景和功能是怎樣的: 背景:因為公司專案開始遷移新平臺專案,所以以前的平臺老資料以及訂單資訊需要拆分表,而且需要業務邏輯來分析以前的訂單表,來拆分成另外的幾個新表,包括增加新的流水分析,以及更新其他使用者或者商家的餘額以及對賬
mysql儲存過程+遊標迴圈遍歷 判斷 賦值 等例項一
CREATE DEFINER=`admin`@`%` PROCEDURE `updateRecommended`() BEGIN DECLARE my_recommended INT; DECLARE my_id INT; DECLARE inviteRelationStr VARCHAR(10000)