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

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

以前講過存儲過程,存儲過程和自定義函數仍是很是類似的,其它的能夠認爲和存儲過程是同樣的,好比含義,優勢均可以按存儲過程的優勢來理解。
存儲過程相關博客:html

一、MySQL(7)---存儲過程mysql

二、MySQL(8)---遊標sql

三、MySQL(9)---紀錄一次實際開發過程當中用到的複雜存儲過程c#

它們惟一不不一樣點在於函數

存儲過程:能夠有0個返回,也能夠有多個返回,適合作批量插入、批量更新
函數 :有且僅有1 個返回,適合作處理數據後返回一個結果。3d

1、語法

一、建立函數

CREATE FUNCTION 函數名(參數列表) RETURNS 返回類型
BEGIN
    函數體
END
/*
注意:
一、參數列表 包含兩部分:參數名 參數類型
二、函數體:確定會有return語句,若是沒有會報錯
     若是return語句沒有放在函數體的最後也不報錯,但不建議
三、函數體中僅有一句話,則能夠省略begin end
四、使用 delimiter語句設置結束標記
*/

二、調用函數

SELECT 函數名(參數列表)

三、查看函數

SHOW FUNCTION STATUS;

四、刪除函數

DROP FUNCTION IF EXISTS function_name;


2、示例

先把例子須要用到表給出code

# 商品表
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');

一、無參

#案例:返回商品的個數
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()$

二、有參

# 案例:根據商品名稱返回商品價格
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('手錶') $

這個會發現報異常htm

緣由 在存儲過程或者函數,傳人蔘數是中文的時候,那麼就須要將參數的類型VARCHAR改爲NVARCHAR;blog

三、實現傳入兩個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)
相關文章
相關標籤/搜索