mysql function 与 procedure
Mysql 的 function 和 procedure 有啥區別呢 ? 網上搜索后說 function 有返回值, procedure 無返回值。
1.return?
從function 的語法角度來說確實如此, function 的定義中有 return 一項,如下所示
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.調用
?procedure ? 用 call 可以調用?
CALL p_query_user();?
function 用 select 調用.
SELECT f_query_user();?
4.參數帶默認值
?procedure 不支持defualt值,可以改成set或者內部定義變量加上 defualt關鍵字
?function?不支持defualt值,可以改成set或者內部定義變量加上 defualt關鍵字
?
3. 讓我來簡單的說PROCEDURE可以返回值,也可以做一件事,比如幾個TABLE之間的數據轉來轉去,而FUNCTION一定要有返回值,還只能返回一個.....
4.三點與存儲過程不同的地方:?
a,必須要一個RETURNS語句來定義返回值類型?
b,不能指定參數的IN、OUT或INOUT修飾符,所有參數隱式的為IN?
c,Function體必須包含RETURN語句來終結Function執行并返回指定的結果給調用者?
?
2.考慮是使用函數還是使用存儲過程可以根據以下方面:
從參數的返回情況來看:如果返回多個參數值最好使用存儲過程,如果只有一個返回值的話可以使用函數;
從調用情況來看:
(1)如果在SQL語句(DML或SELECT)中調用的話一定是存儲函數或存儲的封裝函數不可以是存儲過程,但調用存儲函數的時候還有好多限制以及函數的純度等級的問題,你可以參考《ORACLE 9I PL\SQL程序設計》(機械工業出版社);
(2)如果是在過程化語句中調用的話,就要看你要實現什么樣的功能。函數一般情況下是用來計算并返回一個計算結果而存儲過程一般是用來完成特定的數據操作(比如修改、插入數據庫表或執行某些DDL語句等等),所以雖然他們的語法上很相似但用戶在使用他們的時候所需要完成的功能大部分情況下是不同的。
?
總結
以上是生活随笔為你收集整理的mysql function 与 procedure的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: an unsupported opera
- 下一篇: 学习HTML5之塔克大战(详细记录)