1. 程式人生 > 實用技巧 >MySQL--函式

MySQL--函式

函式

  含義:一組預先編譯好的SQL語句的集合,理解成批處理語句
    1、提高程式碼的重用性
    2、簡化操作
    3、減少了編譯次數並且減少了和資料庫伺服器的連線次數,提高了效率   區別:     儲存過程:可以有0個返回,也可以有多個返回,適合做批量插入、批量更新
    函式:有且僅有1 個返回,適合做處理資料後返回一個結果 #一、建立語法
CREATE FUNCTION 函式名(引數列表) RETURNS 返回型別
BEGIN
 函式體
END
注意:
  1.引數列表 包含兩部分:
    引數名 引數型別   2.函式體:肯定會有return語句,如果沒有會報錯
    如果return語句沒有放在函式體的最後也不報錯,但不建議     return 值;
  3.函式體中僅有一句話,則可以省略begin end
  4.使用 delimiter語句設定結束標記 #二、呼叫語法
SELECT 函式名(引數列表)


#------------------------------案例演示----------------------------
#1.無參有返回
#案例:返回公司的員工個數
CREATE FUNCTION myf1() RETURNS INT
BEGIN
    DECLARE c INT DEFAULT 0;#定義區域性變數
    SELECT COUNT(*) INTO c#賦值
    FROM employees;
    
RETURN c; END $ SELECT myf1()$

#2.有參有返回
#案例1:根據員工名,返回它的工資

CREATE FUNCTION myf2(empName VARCHAR(20)) RETURNS DOUBLE
BEGIN
    SET @sal=0;#定義使用者變數 
    SELECT salary INTO @sal   #賦值
    FROM employees
    WHERE last_name = empName;
    
    RETURN @sal;
END $

SELECT myf2('k_ing') $

#案例2:根據部門名,返回該部門的平均工資
CREATE
FUNCTION myf3(deptName VARCHAR(20)) RETURNS DOUBLE BEGIN   DECLARE sal DOUBLE ;   SELECT AVG(salary) INTO sal   FROM employees e   JOIN departments d ON e.department_id = d.department_id   WHERE d.department_name=deptName;   RETURN sal; END $ SELECT myf3('IT')$

#三、檢視函式

SHOW CREATE FUNCTION myf3;

#四、刪除函式

DROP FUNCTION myf3;

#案例
#一、建立函式,實現傳入兩個float,返回二者之和

CREATE FUNCTION test_fun1(num1 FLOAT,num2 FLOAT) RETURNS FLOAT
BEGIN
    DECLARE SUM FLOAT DEFAULT 0;
    SET SUM=num1+num2;
    RETURN SUM;
END $

SELECT test_fun1(1,2)$