MySQL儲存函數(自訂函數),函數一般用於計算和傳回一個值,可以將經常需要使用的運算或功能寫成一個函數。
儲存函數和預存程序一樣,都是在資料庫中定義一些 SQL 語句的集合。
儲存函數與預存程序的差異
1.儲存函數有且只有一個傳回值,而預存程序可以有多個回傳值,也可以沒有回傳值。
2.儲存函數只能有輸入參數,而且不能帶in, 而預存程序可以有多個in,out,inout參數。
3.預存程序中的語句功能更強大,預存程序可以實現很複雜的業務邏輯,而函數有很多限制,如不能在函數中使用insert,update,delete,create等語句;
4.儲存函數只完成查詢的工作,可接受輸入參數並傳回一個結果,也就是函數實現的功能針對性比較強。
5.預存程序可以呼叫儲存函數、但函數不能呼叫預存程序。
6.預存程序一般是作為一個獨立的部分來執行(call呼叫)。而函數可以作為查詢語句的一個部分來呼叫.
create function func_name ([param_name type[,...]]) returns type [characteristic ...] begin routine_body end;
參數說明:
(1)func_name :儲存函數的名稱。
(2)param_name type:可選項,指定儲存函數的參數。 type參數用於指定儲存函數的參數類型,該類型可以是MySQL資料庫中所有支援的類型。
(3)RETURNS type:指定傳回值的型別。
(4)characteristic:可選項,指定儲存函數的特性。
(5)routine_body:SQL程式碼內容。
create database mydb9_function; -- 导入测试数据 use mydb9_function; set global log_bin_trust_function_creators=TRUE; -- 信任子程序的创建者 -- 创建存储函数-没有输输入参数 drop function if exists myfunc1_emp; delimiter $$ create function myfunc1_emp() returns int begin declare cnt int default 0; select count(*) into cnt from emp; return cnt; end $$ delimiter ; -- 调用存储函数 select myfunc1_emp();
-- 创建存储过程-有输入参数 drop function if exists myfunc2_emp; delimiter $$ create function myfunc2_emp(in_empno int) returns varchar(50) begin declare out_name varchar(50); select ename into out_name from emp where empno = in_empno; return out_name; end $$ delimiter ; select myfunc2_emp(1008);
以上是MySQL儲存函數與預存程序的差異是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!