簡簡單單儲存過程——循環一個select結果集

摘要:本文主要講解瞭存儲過程的創建、調用、以及遊標的使用 ,相信掌握瞭遊標      會對你有不錯的幫助,有不足之處還請指教
 
導航 : 一、存儲過程的創建及調用
            二 、遊標的使用
            三、  示例
            四、補充
 
說明:
        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

發佈留言