1. 程式人生 > >MySQL進階19--函式的建立(舉例)/設定mysql的建立函式的許可權/檢視(show)/刪除(drop) / 舉4個栗子

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