MySQL之使用游標

2021-08-16 21:48:36 字數 1977 閱讀 7560

mysql檢索操作返回一組成為結果集的行。使用簡單的select語句,例如,沒有辦法得到第一行、下一行或前10行,也不存在每次一行的處理所有行的簡單辦法。有時,需要再檢索出來的行中前進或後退一行或多行。這就是使用游標的原因。

mysql游標只能用於儲存過程(和函式)。

建立游標

delimiter //

create procedure processorders()

begin

declare ordernumbders cursor

forselect ordernum from orders;

end//

delimiter ;

這個儲存過程並沒有做很多事情,declare語句用來定義和命名游標,這裡為(二聲)ordernumbers。儲存過程處理完成後,游標就消失,因為它只能用於儲存過程(或函式)。

開啟和關閉游標

開啟之前定義的游標:

open ordernumbers;
在處理open語句時,執行查詢,儲存檢索除的資料以供瀏覽和滾動。

游標處理完成後,應當使用如下語句關閉游標:

close ordernumbers;
close釋放游標使用的所有內部記憶體和資源,因此在每個游標不再需要時都應該關閉。但是,當再次需要使用該游標的時候,無需重新定義,只需要使用open語句就可以重新開啟游標。

隱含關閉:如果你不明確關閉游標,mysql將會在到達end語句時自動關閉它。

使用游標資料

在乙個游標被開啟後,可以使用fetche語句分別訪問它的每一行。fetch指定檢索什麼資料(所需的列),檢索出來的資料儲存在什麼地方。它還可以向前移動游標中的內部指標,使嚇一跳fetch語句檢索下一行(不重複讀取同一行)。

mysql> create procedure processorders()

-> begin

-> declare o int;

-> declare t decimal(8,2);

-> declare down boolean default 0;

-> declare ordernumbers cursor

-> for

-> select order_num from orders;

-> declare continue handler for sqlstate "02000" set down=1;

-> create table if not exists ordertotals(order_num int,total decimal(8,2));

-> open ordernumbers;

-> repeat

-> fetch ordernumbers into o;

-> call ordertotal(o,1,t);

-> insert into ordertotals(order_num,total) values (o,t);

-> until down end repeat;

-> close ordernumbers;

-> end//

mysql> select * from ordertotals//

+-----------+---------+

| order_num | total |

+-----------+---------+

| 20005 | 158.86 |

| 20009 | 40.78 |

| 20006 | 58.30 |

| 20007 | 1060.00 |

| 20008 | 132.50 |

+-----------+---------+

這裡面需要用到之前儲存過程那個章節中講到的ordertotal()函式。

MYSQL使用游標

一 使用游標 一 宣告游標。delare cursor name cursor for select statement 解釋 cursor name是游標的名字 select statement表示select語句。因為游標需要遍歷結果集的每一行,增加了伺服器的負擔,導致游標的效率並不高效,如果使...

mysql中使用游標

sql view plain copy set max sp recursion depth 100 下面是mysql遞迴呼叫的源 sql view plain copy dropdelimiter createin uidvarchar 225 in ncountint begin declare...

使用游標 引數游標

參游標是指帶有引數的游標。在定義了引數游標之後,當使用不同引數值多次開啟游標時,可以生成不同的結果集。定義引數游標的語法如下 cursor cursor name parameter name datetype is select statement 注意,當定義引數游標時,游標引數只能指定資料型別...