遍歷游標的方法,遍歷游標的方法

本文目錄一覽:

mysql里怎樣循環遍歷游標

–傳入id,輸出name和sex的存儲過程,這裡同個id有多條數據,所以需要用到游標。

DELIMITER //

CREATE PROCEDURE p5(IN v_id INT)

BEGIN

DECLARE nodata INT DEFAULT 0;#注意:這個變數聲明必須放在游標聲明前面

DECLARE v_name VARCHAR(30);

DECLARE v_sex CHAR(3);

DECLARE c_ns CURSOR FOR SELECT NAME,sex FROM t WHERE id = v_id;

DECLARE EXIT HANDLER FOR NOT FOUND SET nodata = 1;#當讀到數據的最後一條時,設置變數為1

OPEN c_ns;

WHILE nodata = 0 DO#判斷是不是到了最後一條數據

FETCH c_ns INTO v_name,v_sex;

SELECT v_name,v_sex,nodata;

END WHILE;  

CLOSE c_ns;

END

//

–執行該存儲過程

mysql call p5(2);

+——–+——-+——–+  

| v_name | v_sex | nodata |  

+——–+——-+——–+  

| song   | 女    |      0 |  

+——–+——-+——–+  

1 row in set (0.04 sec)  

  

+——–+——-+——–+  

| v_name | v_sex | nodata |  

+——–+——-+——–+  

| dan    | 男    |      0 |  

+——–+——-+——–+  

1 row in set (0.05 sec)  

  

Query OK, 0 rows affected, 1 warning (0.05 sec)

–注意:CONTINUE  會繼續當前的block 中的語句, 它在set done=1 後繼續執行下一個語句。EXIT  則在 set done=1 後離開當前的語句塊

所以這裡用了EXIT(黃色陰影部分).

如果是continue,結果如下:

mysql call p5(2);  

    – //  

+——–+——-+  

| v_name | v_sex |  

+——–+——-+  

| song   | 女    |  

+——–+——-+  

1 row in set (0.00 sec)  

  

+——–+——-+  

| v_name | v_sex |  

+——–+——-+  

| dan    | 男    |  

+——–+——-+  

1 row in set (0.01 sec)  

  

+——–+——-+  

| v_name | v_sex |  

+——–+——-+  

| dan    | 男    |  

+——–+——-+  

1 row in set (0.02 sec)  

  

Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql使用游標遍曆數據進行批量針對性更新數據,急求mysql大神解答

根據你的資料,正確的答案應該如下:望採納

CREATE DEFINER=`root`@`localhost` PROCEDURE `P_updateUd18`(`Param` int(11))

BEGIN

declare Rcount,i,j,k,Rparentid,myId int(11) default 0;

declare Robjname,Robjname23,Robjname45,Robjname67,Robjname89 varchar(9) default “”;

select count(id) into Rcount from ud18;

repeat

select id,objname into myId,Robjname from ud18 order by id limit i,1;

set Robjname23=SUBSTRING(Robjname,2,2);

set Robjname45=SUBSTRING(Robjname,4,2);

set Robjname67=SUBSTRING(Robjname,6,2);

set Robjname89=SUBSTRING(Robjname,8,2);

if Robjname890 then

set @sql=concat(“select id into @abc from ud18 where objname like ‘”,left(Robjname,7),”00″,”‘”);

prepare stmt from @sql;

EXECUTE stmt;

set Rparentid=@abc;

update ud18 set parentid=Rparentid where id=myId;

elseif Robjname670 then

set @sql=concat(“select id into @abc from ud18 where objname like ‘”,left(Robjname,5),”0000″,”‘”);

prepare stmt from @sql;

EXECUTE stmt;

set Rparentid=@abc;

update ud18 set parentid=Rparentid where id=myId;

elseif Robjname450 then

set @sql=concat(“select id into @abc from ud18 where objname like ‘”,left(Robjname,3),”000000″,”‘”);

prepare stmt from @sql;

EXECUTE stmt;

set Rparentid=@abc;

update ud18 set parentid=Rparentid where id=myId;

elseif Robjname230 then

— set @sql=concat(“select id into @abc from ud18 where objname like ‘”,left(Robjname,1),”00000000″,”‘”);

— prepare stmt from @sql;

— EXECUTE stmt;

— set Rparentid=@abc;

update ud18 set parentid=0 where id=myId;

else

set j=0;

end if;

set i=i+1;

until iRcount end repeat;

END;

MySQL 游標的定義與使用

從字面可以這麼理解什麼是游標,游標就像是水面上漂浮的一個標記,這個標記可以來回遊動,一會游到這裡一會游到那裡,這裡的河水可以理解為是數據的集合,這個標記就是在這些數據間來回遊動。

為什麼 MySQL 會有游標這個概念,由於 SQL 語言是面向集合的語句,它每次查詢出來都是一堆數據的集合,沒有辦法對其中一條記錄進行單獨的處理。如果要對每條記錄進行單獨處理就需要游標。

游標其實就像是編程語言中的 for/foreach 循環,把一個數組(數據的集合)中每條數據一條一條地循環出來,然後你在 for/foreach 循環中使用判斷語句對你感興趣的數據進行處理。

哪裡可以使用游標呢,函數,存儲過程,觸發器中都可以使用。

說完概念,就來看下游標的固定寫法。不管概念是否理解,記住下面的固定模式也可以完成搬磚任務。

1、聲明游標

SELECT 語句就是正常的查詢語句,例如:SELECT id,age FROM table;

2、打開游標

在打開游標之前,游標定義的 SQL 語句是不執行的。

3、取出記錄

將當前的記錄數據存入變數。

當 FETCH 沒有找到記錄時會拋出異常,異常的定義需要下面的 HANDLER FOR 語句。

聲明游標語句中的 SELECT 如果有多個欄位,INTO 後面需要多個變數進行接收。

4、設置結束條件

這個語句的作用是指定一個條件,告訴程序所有數據已經循環完畢,可以結束了。由於游標是使用 WHILE 循環進行每條數據的讀取,就需要給 WHILE 一個結束條件。

處理種類:可以是, EXIT 立即結束。CONTINUE 繼續下面的處理。

異常的類型:一般指定為 NOT FOUND ,意思是沒有找到任何數據。

異常發生時的處理:當異常發生時需要做的事情,這裡一般改變一個變數的值來記錄異常已經發生了,如如 SET flat = 1 詳細用法查看下面的例子。

5、關閉游標

實戰代碼:

完畢,看懂沒,如果沒看懂沒關係,游標處理是一套固定的格式,按照上面例子中固定的格式套入到你的程序就可以了。

原創文章,作者:IEQZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/140660.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
IEQZ的頭像IEQZ
上一篇 2024-10-04 00:24
下一篇 2024-10-04 00:24

相關推薦

  • 解決.net 6.0運行閃退的方法

    如果你正在使用.net 6.0開發應用程序,可能會遇到程序閃退的情況。這篇文章將從多個方面為你解決這個問題。 一、代碼問題 代碼問題是導致.net 6.0程序閃退的主要原因之一。首…

    編程 2025-04-29
  • ArcGIS更改標註位置為中心的方法

    本篇文章將從多個方面詳細闡述如何在ArcGIS中更改標註位置為中心。讓我們一步步來看。 一、禁止標註智能調整 在ArcMap中設置標註智能調整可以自動將標註位置調整到最佳顯示位置。…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • 使用Vue實現前端AES加密並輸出為十六進位的方法

    在前端開發中,數據傳輸的安全性問題十分重要,其中一種保護數據安全的方式是加密。本文將會介紹如何使用Vue框架實現前端AES加密並將加密結果輸出為十六進位。 一、AES加密介紹 AE…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • 用不同的方法求素數

    素數是指只能被1和自身整除的正整數,如2、3、5、7、11、13等。素數在密碼學、計算機科學、數學、物理等領域都有著廣泛的應用。本文將介紹幾種常見的求素數的方法,包括暴力枚舉法、埃…

    編程 2025-04-29
  • Python遍歷集合中的元素

    本文將從多個方面詳細闡述Python遍歷集合中的元素方法。 一、for循環遍歷集合 Python中,使用for循環可以遍歷集合中的每個元素,代碼如下: my_set = {1, 2…

    編程 2025-04-29
  • Python學習筆記:去除字元串最後一個字元的方法

    本文將從多個方面詳細闡述如何通過Python去除字元串最後一個字元,包括使用切片、pop()、刪除、替換等方法來實現。 一、字元串切片 在Python中,可以通過字元串切片的方式來…

    編程 2025-04-29
  • 用法介紹Python集合update方法

    Python集合(set)update()方法是Python的一種集合操作方法,用於將多個集合合併為一個集合。本篇文章將從以下幾個方面進行詳細闡述: 一、參數的含義和用法 Pyth…

    編程 2025-04-29

發表回復

登錄後才能評論