MySQL進階19--函數的創建(舉例)/設置mysql的創建函數的權限/查看(show)/刪除(drop) / 舉4個栗子


/*MySQL進階19 函數

存儲過程和函數:都類似於java中的方法;
存儲過程和函數通用好處:
    1.提高代碼的重用性
    2.簡化操作
    好處: 減少操作次數,減少了編譯次數,減少了和服務器的連接次數,提高了效率    
---------------
#區別
    存儲過程 (可以有0個或者多個返回值),適合做批量插入或者批量更新
    函數: 有且僅有一個返回值 ; 適合做處理數據后的返回一個結果

*/
/*
#一: 創建語法
create function 函數名(參數列表) returns 返回類型
begin
    函數體
end

注意: 
    參數列表 包含兩個部分;
    參數名 參數類型;
函數體 : 肯定有return 語句,如果沒有會報錯;
3. 函數體中僅有一句話,則可以省略begin end
4. 使用delimiter 語句設置結束標記
    delimiter $;

#二: 調用自定義函數
    select 函數名(參數列表)
    
*/
#-------------------案例演示函數------------------------------
    #1 無參有返回
    
    #根據提示,設置mysql函數權限
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
SET @@global.log_bin_trust_function_creators='ON';
    #案例 : 返回公司的員工個數 [如下代碼可在本地運行,不用在cmd終端打開運行]
DELIMITER $
CREATE FUNCTION myf1() RETURNS INT
BEGIN 
    DECLARE rt1 INT DEFAULT 0;  #定義局部變量/賦值並returns
    
    SELECT COUNT(*) INTO rt1
    FROM employees;
    RETURN rt1;
END $
SELECT  myf1() $;   ##結果是 : 107

   #2.有參數有返回
   #案例1:根據員工名,返回它的工資
DELIMITER $
CREATE FUNCTION myf2(empName VARCHAR(20)) RETURNS DOUBLE
BEGIN
    DECLARE rt DOUBLE DEFAULT 0;
    SELECT `salary` INTO rt
    FROM employees e
    WHERE e.last_name = empName AND e.first_name='empName';
    RETURN rt;
END $
SET @empName='K_ing' $
SELECT  myf2(@empName) $;  ##返回值為 : 24000

    #案例2: 根據部門名,返回該部門的平均工資
DELIMITER $
CREATE FUNCTION myf5(depName VARCHAR(20)) RETURNS DOUBLE
BEGIN
    DECLARE rt DOUBLE ;
    SELECT AVG(salary) INTO rt
    FROM employees e
    JOIN departments d ON e.department_id = d.department_id
    WHERE d.department_name=depName;
    RETURN rt;
END $
SELECT  myf5('IT') $;  ##結果是 : 5760
 
#三: 查看函數的過程/charset/Datebase collation等信息

SHOW CREATE FUNCTION myf5;

#四: 刪除函數(命令行可操縱!)
DROP FUNCTION myf3;
 
#案例"
    #1.創建函數,實現傳入兩個float ,返回兩者之和
DELIMITER $
CREATE FUNCTION test_fun1(a FLOAT,b FLOAT) RETURNS FLOAT
BEGIN
    DECLARE SUM FLOAT DEFAULT 0;
    SET SUM=a+b;
    RETURN SUM;
END $

SELECT test_fun1(1,12) $   ##結果為:13
 
 
 

 


免責聲明!

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



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