mysql基礎五 遊標

1、遊標的定義:java

create procedure p12()
beginide

declare row_name varchar(20);
declare row_num int;oop

declare myCursor cursor for select name,num from goods;//定義遊標myCursorfetch

open myCursor;//打開遊標myCursorit

fetch myCursor into row_name,row_num;//使用遊標myCursor獲取第一行class

select row_name, row_num;select

fetch myCursor into row_name,row_num;//使用遊標myCursor獲取第二行;每fetch一次遊標就自動往下游一次.循環

select row_name, row_num;遍歷

close myCursor;//關閉遊標myCursordi

end;

2、遊標+repeat循環-->實現遍歷行:
create procedure p13()
begin

declare row_gid int;
declare row_name varchar(20);
declare row_num int;

declare row_count int;
declare i int default 0;

declare myCursor cursor for select gid,name,num from goods;

select count(1) into row_count from goods;

open myCursor;

repeat

fetch myCursor into row_gid,row_name,row_num;

select row_gid,row_name,row_num;

set i=i+1;

until i>row_count end repeat;

close myCursor;

end;

3、遊標+continue handler實現遍歷行:

continue handler 當fetch觸發此handler後,後面的語句繼續執行。
因此會多執行一次select row_gid,row_name,row_num;
此handler經常使用。

create procedure p15()

begin

declare row_gid int;
declare row_name varchar(20);
declare row_num int;
declare you int default 1;

declare myCursor cursor for select gid,name,num from goods;

declare continue handler for NOT FOUND set you=0;

open myCursor;

repeat

fetch myCursor into row_gid,row_name,row_num;

select row_gid,row_name,row_num;

until you=0 end repeat;

close myCursor;

end;

4、遊標+exit handler實現遍歷行:

exit handler 當fetch觸發此handler後,觸發後後面的語句再也不執行。
因此select row_gid,row_name,row_num;不會再被執行。
此handler不經常使用。

create procedure p16()

begin

declare row_gid int;
declare row_name varchar(20);
declare row_num int;
declare you int default 1;

declare myCursor cursor for select gid,name,num from goods;

declare exit handler for NOT FOUND set you=0;

open myCursor;

repeat

fetch myCursor into row_gid,row_name,row_num;

select row_gid,row_name,row_num;

until you=0 end repeat;

close myCursor;

end;

5、遊標+while實現遍歷行:

create procedure p15()

begin

declare row_gid int;
declare row_name varchar(20);
declare row_num int;
declare over int default 1;

declare myCursor cursor for select gid,name,num from goods;

declare continue handler for NOT FOUND set over =0;

open myCursor;

fetch myCursor into row_gid,row_name,row_num;

while over do

select row_gid,row_name,row_num;

fetch myCursor into row_gid,row_name,row_num;

end while;

close myCursor;

end;

6、遊標+loop實現遍歷行:

-- loop 與 leave,iterate 實現循環
-- loop 標誌位無條件循環;leave 相似於Java break 語句,跳出循環,即跳出 begin end;
iterate 相似於java continue ,結束本次循環,繼續下一次循環。
--loop的優勢在於能夠根據條件結束本次循環或者根據條件跳出循環。

create procedure p17()

begin

declare row_gid int;
declare row_name varchar(20);
declare row_num int;
declare over int default 0;

declare myCursor cursor for select gid,name,num from goods;

declare continue handler for NOT FOUND set over=1;

open myCursor;

cursor_loop:loop

fetch myCursor into row_gid,row_name,row_num;

if over then

leave cursor_loop;

end if;

select row_gid,row_name,row_num;

end loop cursor_loop;

close myCursor;

end;

相關文章
相關標籤/搜索