mysql-遊標及儲存過程遊標的使用--源自技術
一個完整的mysql遊標使用例子:
定義本地變數
- DECLARE o varchar(128);
定義遊標
- DECLARE ordernumbers CURSOR
- FOR
- SELECT callee_name FROM account_tbl where acct_timeduration=10800;
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1;
- SET no_more_departments=0;
開啟遊標
- OPEN ordernumbers;
迴圈所有的行
- REPEAT
- -- Get order number
- FETCH ordernumbers INTO o;
- update account set allMoneyallMoney=allMoney+72,lastMonthConsumelastMonthConsume=lastMonthConsume-72 where NumTg[email protected];
迴圈結束
- UNTIL no_more_departments
- END REPEAT;
關閉遊標
- 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 ------------吾亦無他,唯手熟爾,謙卑若愚,好學若饑------------- 本篇博客給剛接觸存儲過程的朋友做個引導作用,目的是解決遊標不走循環 很多人發現他的遊標