有時,需要在檢索出來的行中前進或後退一行或多行
游標是乙個儲存在mysql伺服器上的資料庫查詢
是被select檢索出來的結果集
儲存了游標後,
應用可根據需要滾動或瀏覽其中的資料
mysql游標只能用於儲存過程[和函式]
- 在能使用游標前,需先宣告它
只是定義要使用的select語句
- 一旦宣告後,
必須開啟游標以供使用
過程用前面定義的select語句把資料實際檢索出來
- 對填有資料的游標,需取出[檢索]各行
- 結束游標使用時,需關閉游標
declare
create procedure processorders()
begin
declare ordernumbers cursor
forselect order_num from orders;
end;
declare用來定義和命名游標
儲存過程處理完後,游標消失
open ordernumbers;
close ordernumbers;// 釋放游標使用的所有內部記憶體和資源
乙個游標關閉後,需重新開啟
如不明確關閉游標,mysql將會在到達end時自動關閉它
create procedure processorders()
begin
declare ordernumbers cursor
for
select order_num from orders;
open ordernumbers;
close ordernumbers;
end;
儲存過程,
宣告開啟
關閉乙個游標
乙個游標被開啟後,
可使用fetch語句分別訪問它的每一行
fetch指定檢索什麼資料
檢索出的資料儲存在什麼地方
還向前移動游標中的內部行指標,使下一條fetch語句檢索下一行[不重讀讀取同一行]
- 從游標中檢索單個行
create procedure processorders()
begin
declare o int;
declare ordernumbers cursor
forselect order_num from orders;
open ordernumbers;
fetch ordernumbers into o;
close ordernumbers;
end;
fetch用來檢索當前行的order_num列到乙個名為o的區域性宣告的變數
- 迴圈檢索資料,從第一行到最後一行
create procedure processorders()
begin
declare done boolean default 0;
declare o int;
declare ordernumbers cursor
forselect order_num from orders;
declare continue handler for sqlstate '02000' set done=1;
open ordernumbers;
repeat
fetch ordernumbers into o;
until done end repeat;
close ordernumbers;
end;
反覆執行fetch,直到done為1
sqlstate '02000'是乙個未找到條件
當repeat由於沒有更多的行供迴圈而不能繼續時,
出現此條件
declare語句次序
declare語句的發布存在特定的次序
用declare語句定義的區域性變數必須在定義任意游標或控制代碼前定義
控制代碼必須在游標後定義
區域性變數
游標控制代碼
create procedure processorders()
begin
declare done boolean default 0;
declare o int;
declare t decimal(8, 2);
declare ordernumbers cursor
forselect order_num from orders;
declare continue handler for sqlstate '02000' set done = 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 done end repeat;
close ordernumbers;
end;
select *
from ordertotals;
使用游標 引數游標
參游標是指帶有引數的游標。在定義了引數游標之後,當使用不同引數值多次開啟游標時,可以生成不同的結果集。定義引數游標的語法如下 cursor cursor name parameter name datetype is select statement 注意,當定義引數游標時,游標引數只能指定資料型別...
使用游標 游標FOR迴圈
游標for迴圈是在pl sql塊中使用游標最簡單的方式,它簡化了對游標的處理。當使用游標for迴圈時,oracle會隱含的開啟游標,提取游標資料並關閉游標。例子 顯示emp表所有雇員名及其工資 declare cursor emp cursor isselect ename,sal from emp...
MYSQL使用游標
一 使用游標 一 宣告游標。delare cursor name cursor for select statement 解釋 cursor name是游標的名字 select statement表示select語句。因為游標需要遍歷結果集的每一行,增加了伺服器的負擔,導致游標的效率並不高效,如果使...