MySQL:存儲過程和函數


存儲過程和函數

一、創建存儲過程和函數

1、創建存儲過程

  • 語法:

 

CREATE
    PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

 

  • create procedure:存儲的關鍵字
  • sp_name:存儲過程的名字 
  • proc_parameter:存儲過程的參數列表characteristic存儲過程的特性
    • 格式:
      • [ IN | OUT | INOUT ] param_name type
    • 介紹:
      • in----輸入,out----輸出,inout----可以輸入也可以輸出
      • param_name:參數名稱
      • type:參數的類型(MySQL的任意類型)
  • routine_body sql的代碼

【例】

mysql> delimiter //
mysql> create procedure guocheng() show databases;
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;

delimiter語句將結束符設置為//。
注意:
create procedure關鍵字
guocheng()過程名
show databases;函數hangshu()的作用:顯示所有的數據庫;
使用delimiter語句時,不要使用“/”;因為“/”是MySQL的轉移符;

2、創建存儲函數

  • 語法:
CREATE
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
[characteristic ...] routine_body
  • create function 存儲函數的關鍵字
  • sp_name存儲函數的名稱
  • func_parameter存儲過程的參數列表type-----函數返回的數據類型
    • 格式:
      • [ IN | OUT | INOUT ] param_name type
    • 介紹:
      • in----輸入,out----輸出,inout----可以輸入也可以輸出
      • param_name 參數名稱
      • type 參數的類型(MySQL的任意類型)
  • routine_body sql的代碼
  • characteristic存儲過程的特性

【例】

mysql> delimiter //
mysql> create
    -> function hangshu()
    -> returns char(50)
    -> return (select * from guke);
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;

3、變量

  • 介紹變量

變量可以在子程序中聲明並使用,這些變量的使用范圍是begin……end程序中

  • 定義變量語法:
DECLARE var_name [, var_name] ... type [DEFAULT value]
  • 介紹賦值變量語法:
    • var_name 局部變量名稱
    • type變量類型
    • DEFAULT value給變量提供一個默認值,默認值可以是常數,也可以是表達式,系統默認為空值
SET var_name=expr[,var_name=expr]……;

注意:不同的變量類型(局域聲明變量及全局變量)可以被混合;
4、定義條件和處理程序

  • 定義條件
    • 語法:

 

DECLARE condition_name CONDITION FOR condition_value
  condition_value:
  SQLSTATE [VALUE] sqlstate_value| mysql_error_code
  • 介紹
    • condition_name 條件名字
    • condition_value 條件類型
    • sqlstate_value和 mysql_error_code表示MySQL的錯誤,使用這個語句需要它將一個名字和指定的錯誤條件 想關聯起來
  • 定義處理程序
    • 語法
DECLARE handler_action HANDLER
    FOR condition_value [, condition_value] ...
    statement
  • 介紹
    • Statement:表示程序語句塊
    • handler_action:表示錯誤處理方式
    •     CONTINUE| EXIT| UNDO
    • CONTINUE:表示遇到錯誤不處理,繼續執行
    • EXIT:表示遇到錯誤馬上退出
    • UNDO:遇到錯誤回到前一次的操作,MySQL暫時不支持
    • condition_value:表示錯誤類型

5、光標的使用------光標只能在存儲過程和函數中使用

  • 聲明光標
    • 語法:declare 光標名 cursor for select語句內容
  • 打開光標
    • 語法:open 光標名
  • 使用光標
    • 語法:
    • fetch cursor_name into var_name[,var_name]……{參數名稱}
      • 說明
      • cursor_name 光標名
      • var_name 表示將光標中的select語句查詢出來的信息存入該參數中。
      • 【注意】
      • 必須在聲明光標之前就定義好
  • 關閉光標
    • 語法:
    • close 光標名
      • 【注意】
      • 如果沒有被明確地關閉,光標在它被聲明的復合語句的末尾被關閉

6、流程控制的使用

  • if語句
    • 介紹:
      • 包含多個條件判斷,根據判斷結果為true或false執行相應的語句,與Java語句類似
    • 語法:
IF search_condition THEN statement_list
    [ELSEIF search_condition THEN statement_list] ...
    [ELSE statement_list]
END IF
  • case語句
    • 語法:
CASE case_value
    WHEN when_value THEN statement_list
    [WHEN when_value THEN statement_list] ...
    [ELSE statement_list]
END CASE
    • 參數說明
      • case_value 表示條件判斷的表達式,決定那個when語句執行
      • when_value表示表達式可能的值,如果when_value與case_value相等,則執行在then后 面的statement_list語句;
      • statement_list表示不同條件的執行語句,
  • loop語句
    • 介紹:
      • 循環語句重復執行語句
    • 語法:
[begin_label:] LOOP
    statement_list
END LOOP [end_label]
    • 參數說明
      • begin_label:表示標注名稱
      • statement_list:要循環的語句
  • leave語句
    • 介紹:
      • 退出循環
    • 語法:
      • LEAVE label
    • 參數說明:
      • Label:退出循環的要求
  • iterate語句
    • 介紹:
      • 將執行順序轉到語句段開頭處
    • 語法:
      • ITERATE label
    • 參數說明
      • Label:開始循環的要求
    • 注意:
      • 只能用於LOOP、REPEAT和WHILE語句中
  • while語句
  • 介紹:
  • 帶條件判斷的循環過程,與repeat語句不同,先對指定的表達式進行判斷,如果符合, 則開始循環,否則退出循環;
  • 語法:
[begin_label:] WHILE search_condition DO
    statement_list
END WHILE [end_label]
  • 參數說明
    • begin_label:表示標注名稱
    • search_condition條件表達式

二、調用存儲過程和函數

1、調用存儲過程

語法:

call 存儲過程名字([存儲過程的參數[,……]])

2、調用存儲函數

語法:

 

select 存儲函數名字([存儲過程的參數[,……]])

三、查看存儲過程和函數

1、使用show status語句查看存儲過程和函數的狀態

語法:

show {procedure|function}status[like’存儲過程或存儲函數的名稱’]

注意:

顯示:數據庫、名字、類型、創建者、創建和修改日期

2、使用show create語句查看存儲過程和函數的定義

語法:

 

show create{procedure|function}存儲過程或存儲函數的名稱

3、從information_schema.Routines表查看存儲過程和函數的信息

語法:

 

select * from information_schema.Routines 
where routine_name=’存儲過程或存儲函數的名稱’;

四、修改存儲過程和函數

語法:

ALTER {procedure|function} 存儲過程或存儲函數的名稱 [characteristic ...]
characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

五、刪除存儲過程和函數

語法:

DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM