MySql必知必會實戰練習(六)遊標

  遊標主要用於交互式應用,滾動屏幕上的數據,並對數據進行瀏覽或作出更改fetch

  看一下下面的例子:spa

drop procedure IF EXISTS processorders;
create procedure processorders(
    out ordernum int
)
begin
    select order_num from orders into ordernum;
end;

call processorders(@ordernum);
select ordernum;

  輸出:code

  

  因爲結果爲多行沒法顯示,這時咱們就須要使用遊標來操做blog

 1. 遊標基本方法

(1)建立遊標class

create procedure processorders()
begin
    declare ordernums cursor for     select order_num from orders;
end;

 (2)打開遊標select

open ordernums;

(3)關閉遊標循環

close ordernums;

  在一個遊標關閉後,若是沒有從新打開,則不能使用它。sso

  使用申明過的遊標不須要再次聲明,用open語句打開它就能夠了。方法

2.遊標使用示例

drop procedure IF EXISTS processorders;
create procedure processorders(
    out numbers int,
    out custid int
)
begin
    #聲明遊標
    declare ordernums cursor for
    select order_num,cust_id from orders;
    
    #打開遊標
    open ordernums;
    
    #用來檢索當前行的order_num(自動從第一行開始)
    fetch ordernums into numbers, custid;  
    
    #關閉遊標
    close ordernums;
end;

call processorders(@numbers,@custid);
select @numbers,@custid;

   會看到只輸出了第一行的order_num和cust_id:im

  繼續,接下來將循環檢索數據,從第一行到最後一行:

drop procedure IF EXISTS processorders;
create procedure processorders(
    out numbers int,
    out custid int
)
begin
    declare done boolean default 0;
    #聲明遊標
    declare ordernums cursor
    for
    select order_num,cust_id from orders;
    
    #聲明CONTINUE HANDLER
    declare CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;     
    #打開遊標
    open ordernums;
    
    #開始循環
    REPEAT
        #用來檢索當前行的order_num(自動從第一行開始)
        fetch ordernums into numbers, custid;  
        
 #.....這裏能夠對每次檢索出來的數據進行處理
        
    #結束循環
    UNTIL done END REPEAT;
    
    #關閉遊標
    close ordernums;
end;

call processorders(@numbers,@custid);
select @numbers,@custid;

   咱們會看出輸出最後一行的order_num和cust_id

  這樣就實現了數據的循環檢索,咱們能夠在 (#.....這裏能夠對每次檢索出來的數據進行處理)註釋處對每次檢索出來的數據進行處理

  注意:上面咱們定義了一個COUNtINUE HANDLEr,它是在條件出現時執行的代碼,它指出SQLSTATE '02000'出現時set done = 1,最開始SQLSTATE '02000'是一個未找到的條件,只有當repeat沒有更多的行供循環時纔會出現SQLSTATE '02000'

相關文章
相關標籤/搜索