1. 存儲過程
1.1. 基本語法
1
2
3
|
create procedure name ([params]) UNSIGNED [characteristics] routine_body |
params : in|out|inout 指定參數列表 代表輸入與輸出
routine_body: SQL代碼內容,以begin ........ end
characteristics: 指定存儲過程特性,包含5種
1 DETERMINISTIC 不確定的
2 NO SQL 沒有SQl語句,當然也不會修改數據
3 READS SQL DATA 只是讀取數據,當然也不會修改數據
4 MODIFIES SQL DATA 要修改數據
5 CONTAINS SQL 包含了SQL語句
1.2 創建一個指定執行權限的存儲過程
1
2
3
|
create DEFINER=`root`@`%` procedure name ([params]) UNSIGNED [characteristics] routine_body |
DEFINER:指明誰有權力來執行。
1.3 DELIMITER 的使用
”DELIMITER //“ 表示設置“//”符號為結束語,因為mysql中默認語句結束為分號‘;',為了避免存儲過程與mysql語句符號沖突,所以有時使用DELIMITER來改變結束語符號,要配合end //來使用;
示例:創建一個root賬戶執行的存儲過程,輸出給定字符串的長度
1
2
3
4
5
6
7
|
DELIMITER // CREATE definer=`root`@`%` PROCEDURE `avgFruitPrice`( in f_string VARCHAR (200) ) BEGIN select length(f_string); END // |
2. 創建函數
函數的創建與存儲過程相同
示例
1
2
3
4
5
6
7
8
9
|
DELIMITER // CREATE definer=`root`@`%` FUNCTION `my_length`( f_string VARCHAR (200) ) RETURNS INT (11) UNSIGNED NO SQL BEGIN return length(f_string); END // |
注意: 創建函數需要注意3個地方,
1. RETURNS: 需指定返回類型
2. UNSIGNED NO SQL 需指定存儲過程特性
3.return: 返回需要的數據
遇見的錯誤:
如報錯如上信息就是沒有指定存儲過程特性。
存儲過程函數中可以通過mysql查詢結果為其參數復制: 其語句為select .... into
1
2
3
4
5
6
7
8
9
10
11
|
begin declare onename char (50) default ‘0'; declare twoname char (50); select f_name, b_name into onename, twoname from t_user where id =1; ....... end // |
說明:
declare: 存儲過程及函數內部定義變量
default:默認值
到此這篇關于mysql創建存儲過程及函數詳解的文章就介紹到這了,更多相關mysql存儲過程及函數內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/qq_32331997/article/details/105603998