程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 簡簡單單儲存過程——循環一個select結果集

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

編輯:MySQL綜合教程

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved