MySQL(10)---自定義函數


MySQL(10)---自定義函數

之前講過存儲過程,存儲過程和自定義函數還是非常相似的,其它的可以認為和存儲過程是一樣的,比如含義,優點都可以按存儲過程的優點來理解。
存儲過程相關博客:

1、MySQL(7)---存儲過程

2、MySQL(8)---游標

3、MySQL(9)---紀錄一次實際開發過程中用到的復雜存儲過程

它們唯一不不同點在於

存儲過程:可以有0個返回,也可以有多個返回,適合做批量插入、批量更新
函數 :有且僅有1 個返回,適合做處理數據后返回一個結果。

一、語法

1、創建函數

CREATE FUNCTION 函數名(參數列表) RETURNS 返回類型
BEGIN
	函數體
END
/*
注意:
1、參數列表 包含兩部分:參數名 參數類型
2、函數體:肯定會有return語句,如果沒有會報錯
     如果return語句沒有放在函數體的最后也不報錯,但不建議
3、函數體中僅有一句話,則可以省略begin end
4、使用 delimiter語句設置結束標記
*/

2、調用函數

SELECT 函數名(參數列表)

3、查看函數

SHOW FUNCTION STATUS;

4、刪除函數

DROP FUNCTION IF EXISTS function_name;

二、示例

先把例子需要用到表給出

# 商品表
DROP TABLE IF EXISTS `mall_pro`;
CREATE TABLE `mall_pro` (
  `mall_id` char(32) NOT NULL,
  `pro_name` varchar(32) DEFAULT '' COMMENT '顯示名稱',
  `cash_cost` double(10,1) DEFAULT '0.0' COMMENT '商品價格',
  `show_member` int(1) DEFAULT '0' COMMENT '顯示 0所有 1指定會員',
  `status` int(1) DEFAULT '1' COMMENT '狀態:1正常 0刪除',
  `key_id` varchar(32) DEFAULT '0' COMMENT '會員控件表key',
  PRIMARY KEY (`mall_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';

INSERT INTO `mall_pro` (`mall_id`, `pro_name`, `cash_cost`, `show_member`, `status`, `key_id`)
VALUES
	('1','手表',100.0,0,1,'0'),
	('2','手機',888.0,1,1,'0'),
	('3','電腦',3888.0,1,1,'0');

1、無參

#案例:返回商品的個數
DELIMITER $
DROP FUNCTION IF EXISTS myf1;
CREATE FUNCTION myf1() RETURNS INT
BEGIN

	DECLARE c INT DEFAULT 0;#定義局部變量
	SELECT COUNT(*) INTO c#賦值
	FROM mall_pro;
	RETURN c;	
END $
SELECT myf1()$

2、有參

# 案例:根據商品名稱返回商品價格
DELIMITER $
DROP FUNCTION IF EXISTS myf2$
CREATE FUNCTION myf2(proName VARCHAR(20)) RETURNS DOUBLE
BEGIN
	SET @sal=0;#定義用戶變量 
	SELECT cash_cost INTO @sal   #賦值
	FROM mall_pro
	WHERE pro_name = proName;
	
	RETURN @sal;
END $
SELECT myf2('手表') $

這個會發現報異常

原因 在存儲過程或者函數,傳人參數是中文的時候,那么就需要將參數的類型VARCHAR改成NVARCHAR;

3、實現傳入兩個float,返回二者之和

DELIMITER $
DROP FUNCTION IF EXISTS test_fun$
CREATE FUNCTION test_fun(num1 FLOAT,num2 FLOAT) RETURNS float
BEGIN
	DECLARE SUM FLOAT DEFAULT 0;
	SET SUM=num1+num2;
	RETURN SUM;
END $

SELECT test_fun(1,2)$

總的來講前面講了存儲過程,函數也沒什么好講的了,有什么疑問看存儲過程相關文章應該都懂了。



只要自己變優秀了,其他的事情才會跟着好起來(少將11)


免責聲明!

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



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