1 7 使用游標

2021-10-24 21:30:10 字數 2756 閱讀 4426

有時,需要在檢索出來的行中前進或後退一行或多行

游標是乙個儲存在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語句。因為游標需要遍歷結果集的每一行,增加了伺服器的負擔,導致游標的效率並不高效,如果使...