/*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