1. 程式人生 > >mysql-遊標及儲存過程遊標的使用--源自技術

mysql-遊標及儲存過程遊標的使用--源自技術

一個完整的mysql遊標使用例子:

定義本地變數

  1. DECLARE o varchar(128); 

定義遊標

  1. DECLARE ordernumbers CURSOR  
  2. FOR  
  3. SELECT callee_name FROM account_tbl where acct_timeduration=10800;  
  4. DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1;  
  5. SET no_more_departments=0;  

開啟遊標

  1. OPEN ordernumbers; 

迴圈所有的行

  1. REPEAT  
  2. -- Get order number  
  3. FETCH ordernumbers INTO o;  
  4. update account set allMoneyallMoney=allMoney+72,lastMonthConsumelastMonthConsume=lastMonthConsume-72 where NumTg[email protected];  

迴圈結束

  1. UNTIL no_more_departments  
  2. END REPEAT; 

關閉遊標

  1. CLOSE ordernumbers; 

現在簡單總結一下游標的知識。
(一),認識遊標(cursor)
就是一個可讀的標識,用來標識資料取到什麼地方了。
(二),遊標特性
1,只讀
2,不滾動
3,不敏感的
(三),使用遊標
需要強調的是,遊標必須在定義處理程式之前被定義,但變數必須在定義遊標之前被定義,順序就是變數定義-遊標定義-處理程式。
1.定義遊標
DECLARE cursor_name CURSOR FOR select_statement
這個語句宣告一個遊標。也可以在子程式中定義多個遊標,一個塊中的每一個遊標必須命名唯一。宣告遊標後也是單條操作的。
2. 遊標OPEN
OPEN cursor_name
這個語句開啟先前宣告的遊標。
3. 遊標FETCH
FETCH cursor_name INTO var_name [, var_name] ...
這個語句用指定的開啟遊標讀取下一行(如果有下一行的話),並且前進遊標指標至該行。
4. 遊標CLOSE
CLOSE cursor_name
這個語句關閉先前開啟的遊標,注意,用完後必須關閉。
(四)示例,下面是一個儲存過程,裡面用到遊標,逐條更新資料(批量更新資料)

BEGIN
 DECLARE  no_more_record INT DEFAULT 0;
 DECLARE  pID BIGINT(20);
 DECLARE  pValue DECIMAL(15,5);
 DECLARE  cur_record CURSOR FOR   SELECT colA, colB from tableABC;  /*首先這裡對遊標進行定義*/
 DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET  no_more_record = 1; /*這個是個條件處理,針對NOT FOUND的條件,當沒有記錄時賦值為1*/

 OPEN  cur_record; /*接著使用OPEN開啟遊標*/
 FETCH  cur_record INTO pID, pValue; /*把第一行資料寫入變數中,遊標也隨之指向了記錄的第一行*/

 WHILE no_more_record != 1 DO
 INSERT  INTO testTable(ID, Value)
 VALUES  (pID, pValue);
 FETCH  cur_record INTO pID, pValue;

 END WHILE;
 CLOSE  cur_record;  /*用完後記得用CLOSE把資源釋放掉*/
END

相關推薦

mysql-遊標儲存過程遊標的使用--源自技術

一個完整的mysql遊標使用例子:定義本地變數DECLARE o varchar(128); 定義遊標DECLARE ordernumbers CURSOR  FOR  SELECT callee_name FROM account_tbl where acct_time

mysql資料庫--mysql函式儲存過程

函式 函式:將一段程式碼封裝到一個結構中,在需要執行程式碼塊的時候,呼叫結構執行即可(程式碼複用) 函式分為兩類:系統函式和自定義函式 系統函式: 系統定義好的函式,直接呼叫即可。任何函式都有返回值,因此函式的呼叫是通過select呼叫。 mysql中字串基本操作單位(最常見的

資料庫系統(六)---MySQL語句儲存過程

一、DDL、DML、DCL常用語句  1、DDL(Data Definition Language)資料庫定義語言 (1)資料庫模式定義 #建立資料庫   create database if exsites db_name; #選定資料庫 use db_name; #刪除資料庫 drop d

mysql儲存過程遊標檢視select結果集

mysql中使用select(或者使用print未嘗試)檢視引數 DELIMITER $ create PROCEDURE myPro() BEGIN    DECLARE  id varchar(64);   -- id     DE

sqlserver儲存過程/遊標例項

--系統儲存過程exec sp_databases --檢視系統資料庫exec sp_tables --檢視系統表exec sp_rename 'aaa','bbb' --修改表明aaa為bbbexec sp_rename 'dbo.aaa','col1','col2' --修改表aaa的列col1為col2

Mysql儲存過程遊標使用

--在windows系統中寫儲存過程時,如果需要使用declare宣告變數,需要新增這個關鍵字,否則會報錯。 delimiter // drop procedure if exists StatisticStore; CREATE PROCEDURE StatisticSto

mysql儲存過程遊標遍歷之while篇

最近業務需要翻閱了很多關於遊標遍歷使用的帖子 總結一下 直接上程式碼吧 IN `bindid_in` char(36) --輸入引數 BEGIN /** 淨值=固定資產原值-累計折舊 累計折舊=月折舊額*已計提月份 月折舊額=(固定資產原價-(固定資產原價*3%的殘值率))/預計使

MySQL中的儲存過程遊標儲存函式

MySQL中的儲存過程 首先來看兩個問題: 1.什麼是儲存過程? 儲存過程(Stored Procedure)是在資料庫系統中,一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程有引數的話)來執行它。 2.為什麼要使用儲

mysql儲存過程 遊標使用

1.什麼是遊標需求:編寫儲存過程,使用遊標,把uid為偶數的記錄逐一更新使用者名稱。delimiter $$ create procedure testf(IN my_userId varchar(32)) begin declare stopflag int defau

mysql儲存過程 --遊標的使用 取每行記錄 (多欄位)

delimiter $ create PROCEDURE phoneDeal() BEGIN DECLARE id varchar(64); -- id DECLARE phone1 varchar(16); -- phone DECLARE password1

MySql 自定義函式,儲存過程,遊標的使用

首先整理一下mysql內建的一些函式 MySQL內建函式 一、字元函式 (1)CONCAT()//字元連線 (2)CONCAT_WS()//使用指定的分隔符進行字元連線 (3)FORMAT()//數字格式化 (4)LOWER()//轉化小寫 (

基於MySQL遊標儲存過程的迴圈插入

/*我們有時候會遇到需要對 從A表查詢的結果集S_S 的記錄 進行遍歷並做一些操作(如插入),且這些操作需要的資料或許部分來自S_S集合*/ /*臨時儲存過程,沒辦法,不能直接在查詢視窗做這些事。*/ drop procedure if exists proc_tmp; c

mysql儲存過程+遊標迴圈遍歷 判斷 賦值 等例項一

CREATE DEFINER=`admin`@`%` PROCEDURE `updateRecommended`() BEGIN DECLARE my_recommended INT; DECLARE my_id INT; DECLARE inviteRelationStr VARCHAR(10000)

MySQL儲存過程遊標(cursor)示例

Mysql建立儲存過程,使用遊標Cursor迴圈更新 使用遊標(cursor) 1.宣告遊標 DECLARE cursor_name CURSOR FOR select_statement 這個語句

mysql動態遊標學習(mysql儲存過程遊標)

-- 建立測試表和資料 create table webuser (username varchar(10)); insert into webuser values ('a1'),('a2'),('a3'),('b1'),('b2'),('b3'); commit; -- 建立儲存過程 drop pro

MySQL 儲存過程遊標巢狀,觸發器呼叫儲存過程

#儲存過程 drop procedure if exists update_pointer; CREATE PROCEDURE update_pointer(IN ckindId int) BEGIN #定義變數 DECLARE id int DEFAULT 0;

mysql儲存過程 遊標 迴圈使用 含SQLSTATE mysql異常程式碼彙總大全

錯誤:1201 SQLSTATE: HY000 (ER_MASTER_INFO) 訊息:無法初始化主伺服器資訊結構,在MySQL錯誤日誌中可找到更多錯誤訊息。·     錯誤:1202 SQLSTATE: HY000 (ER_SLAVE_THREAD) 訊息:無法建立從執行緒,請檢查系統資源。·     錯

Mysql儲存過程遊標加迴圈

Mysql的儲存過程是從版本5才開始支援的,所以目前一般使用的都可以用到儲存過程。今天分享下自己對於Mysql儲存過程的認識與瞭解。 一些簡單的呼叫以及語法規則這裡就不在贅述,網上有許多例子。這裡主要說說大家常用的遊標加迴圈的巢狀使用。 首先先介紹迴圈的分類: (1)WHI

SqlServer遊標儲存過程資料塊執行

資料塊遊標事例如下: begin declare @item_code varchar(32)--定義變數 declare @item_name varchar(32) declare @invest_money_sum float --定義遊標 declare

Mysql:存儲過程遊標不進循環的原因詳解

一個 -- 它的 過程 tin hand 朋友 作用 size ------------吾亦無他,唯手熟爾,謙卑若愚,好學若饑------------- 本篇博客給剛接觸存儲過程的朋友做個引導作用,目的是解決遊標不走循環 很多人發現他的遊標