可以用在儲存過程的sql語句主要有以下型別:
1、 無返回結果語句,如:insert,update,drop, delete等
2、 select語句返回單行變數並可傳給本地變數(select ..into)
3、 返回多行結果集的select語句,並可使用游標迴圈處理
注意,儲存過程返回的多行結果集,可以被客戶端程式(如php)所接收,但要在乙個儲存過程中接收另乙個儲存過程的結果集是不可能的,一般解決辦法是存入臨時表供其它過程共用
4、 prepare語句
以下主要講述游標及prepare部分
游標
定義declare cursor_name cursor for select_statement;
游標操作
open開啟游標
open cursor_name;
fetch獲取游標當前指標的記錄,並傳給指定變數列表,注意變數數必須與游標返回的字段數一致,要獲得多行資料,使用迴圈語句去執行fetch
fetch cursor_name into variable list;
close關閉游標
close cursor_name ;
注意:mysql的游標是向前唯讀的,也就是說,你只能順序地從開始往後讀取結果集,不能從後往前,也不能直接跳到中間的記錄.
乙個完整的例子:
-- 定義本地變數
declare o varchar(128);
-- 定義游標
declare ordernumbers cursor
forselect callee_name from account_tbl where acct_timeduration=10800;
declare continue handler for not found set no_more_departments=1;
set no_more_departments=0;
-- 開啟游標
open ordernumbers;
-- 迴圈所有的行
repeat
-- get order number
fetch ordernumbers into o;
update account set allmoney=allmoney+72,lastmonthconsume=lastmonthconsume-72 where numtg=@o;
-- 迴圈結束
until no_more_departments
end repeat;
-- 關閉游標
close ordernumbers;
例子:請使用 mysql 5.1 或以上version;
測試表 level ;
create table
test.level (name varchar(20));
再 insert 些資料 ;
/*初始化
*/drop
procedure
ifexists
usecursor
///*
建立 儲存過程 create
*/create
procedure
usecursor()
begin
/*區域性變數的定義 declare
*/declare
tmpname
varchar(
20)
default'';
declare
allname
varchar(
255)
default'';
declare
cur1
cursor
forselect
name
from
test.level;
/*mysql 不知道為什麼用異常加入判斷 ?
* 此請參考官方文件
20.2.11. 游標
游標 * 這把 游標 異常後 捕捉
* 並設定 迴圈使用 變數 tmpname 為 null 跳出迴圈。
*/declare
continue
handler
forsqlstate
'02000
'set
tmpname
=null;/*
開游標*/
open
cur1;
/*游標向下走一步
*/fetch
cur1
into
tmpname;
/*迴圈體 這很明顯 把游標查詢出的 name 都加起並用 ; 號隔開
*/while
( tmpname
isnot
null
) do
settmpname
=concat(tmpname ,";") ;
setallname
=concat(allname ,tmpname) ;
/*游標向下走一步
*/fetch
cur1
into
tmpname;
endwhile
;close
cur1;
select
allname ;
end;
//call usecursor()
//
mysql游標的使用
這是乙個游標的使用例子.但是其中有幾點需要注意,就是為什麼要加入declare continue handler for sqlstate 02000 set tmpname null 這樣的一句話.如果不加的話將直接報錯.no data zero rows fetched,selected,or ...
MySQL游標的使用
以下的文章主要介紹的是mysql游標的使用筆記,其可以用在儲存過程的sql語句,其主要型別主要有以下幾種,以下就是對其詳細介紹,相信如果你掌握了這項技術,會在以後的學習或是工作中帶來很大的幫助。1 無返回結果語句,如 insert,update,drop,delete等 2 select語句返回單行...
MySQL游標的使用
在編寫儲存過程時,查詢可能返回多條記錄,如果,資料量非常大,則需要使用游標來逐條讀取查詢結果集中的記錄 游標,是一種用於輕鬆處理多行資料的機制 使用游標處理結果集中的資料,需要先宣告游標 游標,必須宣告在宣告變數 條件之後,宣告處理程式之前 mysql中,使用declare關鍵字來宣告游標 語法格式...