mysql function 与 procedure
Mysql 的 function 和 procedure 有啥區(qū)別呢 ? 網(wǎng)上搜索后說 function 有返回值, procedure 無返回值。
1.return?
從function 的語法角度來說確實(shí)如此, function 的定義中有 return 一項(xiàng),如下所示
procedure:?
DROP PROCEDURE IF EXISTS `p_query_user` ; DELIMITER // CREATE PROCEDURE p_query_user() begindeclare c varchar(100) default '0';select 1111 ;end //DELIMITER ; CALL p_query_user();?
function:
DROP FUNCTION IF EXISTS `f_query_user` ; DELIMITER // CREATE FUNCTION f_query_user() RETURNS varchar(100) CHARSET gbkbegindeclare c varchar(100) default '0';select 1111 INTO c;RETURN c; end //DELIMITER ; SELECT f_query_user();2.select?
- 在?procedure ?可以有 select 1111 ;
- 在 function 中不能有 select 1111 ;
3.調(diào)用
?procedure ? 用 call 可以調(diào)用?
CALL p_query_user();?
function 用 select 調(diào)用.
SELECT f_query_user();?
4.參數(shù)帶默認(rèn)值
?procedure 不支持defualt值,可以改成set或者內(nèi)部定義變量加上 defualt關(guān)鍵字
?function?不支持defualt值,可以改成set或者內(nèi)部定義變量加上 defualt關(guān)鍵字
?
3. 讓我來簡單的說PROCEDURE可以返回值,也可以做一件事,比如幾個(gè)TABLE之間的數(shù)據(jù)轉(zhuǎn)來轉(zhuǎn)去,而FUNCTION一定要有返回值,還只能返回一個(gè).....
4.三點(diǎn)與存儲(chǔ)過程不同的地方:?
a,必須要一個(gè)RETURNS語句來定義返回值類型?
b,不能指定參數(shù)的IN、OUT或INOUT修飾符,所有參數(shù)隱式的為IN?
c,Function體必須包含RETURN語句來終結(jié)Function執(zhí)行并返回指定的結(jié)果給調(diào)用者?
?
2.考慮是使用函數(shù)還是使用存儲(chǔ)過程可以根據(jù)以下方面:
從參數(shù)的返回情況來看:如果返回多個(gè)參數(shù)值最好使用存儲(chǔ)過程,如果只有一個(gè)返回值的話可以使用函數(shù);
從調(diào)用情況來看:
(1)如果在SQL語句(DML或SELECT)中調(diào)用的話一定是存儲(chǔ)函數(shù)或存儲(chǔ)的封裝函數(shù)不可以是存儲(chǔ)過程,但調(diào)用存儲(chǔ)函數(shù)的時(shí)候還有好多限制以及函數(shù)的純度等級(jí)的問題,你可以參考《ORACLE 9I PL\SQL程序設(shè)計(jì)》(機(jī)械工業(yè)出版社);
(2)如果是在過程化語句中調(diào)用的話,就要看你要實(shí)現(xiàn)什么樣的功能。函數(shù)一般情況下是用來計(jì)算并返回一個(gè)計(jì)算結(jié)果而存儲(chǔ)過程一般是用來完成特定的數(shù)據(jù)操作(比如修改、插入數(shù)據(jù)庫表或執(zhí)行某些DDL語句等等),所以雖然他們的語法上很相似但用戶在使用他們的時(shí)候所需要完成的功能大部分情況下是不同的。
?
總結(jié)
以上是生活随笔為你收集整理的mysql function 与 procedure的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: an unsupported opera
- 下一篇: 02. SQL表达式的灵活使用