摘要:本文主要講解了存儲過程的創建、調用、以及游標的使用 ,相信掌握了游標 會對你有不錯的幫助,有不足之處還請指教
導航 : 一、存儲過程的創建及調用
二 、游標的使用
三、 示例
四、補充
說明:
1、用到的兩個數據表:
from_data
to_data
2、示例需求 : 將表from_data 的select結果集循環插入到表 to_data;
偽代碼: while 循環 select id ,name from_data
insert into to_data(id,name) value(from_data.id,from_data.name)
end
3、環境: mysql
一、存儲過程的創建及調用
我們創建一個名叫 add_test的存儲過程
1 、檢查是否有 add_test
Sql代碼
drop procedure if exists add_test;
2、創建
Sql代碼
create procedure add_test()
(
#[in|out|inout] 參數 datatype
a int;
b int;
)
begin
#SQL 語句;
end;
3、調用
Sql代碼
call add_test(1,2
);
以上就是基本的創建方法,注意已下幾點:
1 、在建立和調用時,add_test後面的“()”是必須的
2、MySQL 存儲過程參數如果不顯式指定“in”、“out”、“inout”,則默認為“in”,並且參數不能指定默認值 。
3、包含多條 SQL 語句時,需要 begin end 關鍵字,在begin end裡面的每條語句的末尾,都要加上分號 “;”
4、在begin end裡面聲明變量,使用關鍵字 DECLARE ,如:
Sql代碼
begin
#聲明一個name變量,類型是varchar(記得分號)
name varchar(32);
end;
二 、游標的使用
1、定義游標
Sql代碼
/*
定義游標的關鍵字:CURSOR。
定義游標cursor_name,
游標cursor_name當前指針的記錄
是一個表from_data的多行結果集
*/
DECLARE cursor_name CURSOR FOR select id,name
from from_data;
2、打開游標
Sql代碼
#關鍵字:OPEN
OPEN cursor_name;
3、 獲取游標
Sql代碼
#聲明兩個變量
DECLARE a int
;
DECLARE b varchar(32)
;
/*
FETCH 獲取游標當前指針的記錄,並傳給指定變量 a 、b
*/
FETCH cursor_name INTO a,b;
注意:(1、此處很重要,我們在後面的循環例子中會詳細講解如何用,
(2、注意變量數必須與MySQL游標返回的字段數以及類型一致,請看2,3步的標紅處,
a的類型對應 id,b類型對應name
4、關閉游標
Sql代碼
CLOSE cursor_name ;
以上就是游標的常見使用方法,關鍵的部分我已在每一步中說明,就不在多說了,現在我們看下例子:
三、示例
Sql代碼
drop procedure if exists add_test;
# 創建存儲過程 add_test
CREATE PROCEDURE add_test()
BEGIN
#定義 變量
DECLARE a int;
DECLARE b VARCHAR(30);
#此變可有可無,為了給個該存儲函數執行成功後給個提示,運行下便知道
DECLARE str VARCHAR(300);
DECLARE x int;
#這個用於處理游標到達最後一行的情況
DECLARE