日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 自定义函数function,函数和存储过程的区别

發布時間:2023/12/9 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 自定义函数function,函数和存储过程的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

From: https://blog.csdn.net/u010365819/article/details/80470448

1.MySQL自定義函數簡介

在MySQL中使用自定義函數也需要相應的要求,語法如下,

創建新函數:

Create function function_name(參數列表)

returns返回值類型

函數體內容

相關說明,

??? 函數名:應該合法的標識符,并且不應該與已有的關鍵字沖突。一個函數應該屬于某數據庫,可以使用db_name.funciton_name的形式執行當前函數所屬數據庫

,否則默認為當前數據庫。

??? 參數列表:可以有一個或者多個函數參數,甚至是沒有參數也是可以的。對于每個參數,由參數名和參數類型組成。
??? 返回值:指明返回值類類型
??? 函數體:自定義函數的函數體由多條可用的MySQL語句,流程控制,變量聲明等語句構成。需要指明的是函數體中一定要含有return 返回語句。

2.自定義示例
a.無參函數定義


復制代碼

mysql> DROP FUNCTION IF EXISTS hello;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> DELIMITER $$
mysql> CREATE FUNCTION hello()
??? -> RETURNS VARCHAR(255)
??? -> BEGIN
??? -> RETURN 'Hello? world,i am mysql';
??? -> END $$
Query OK, 0 rows affected (0.11 sec)

復制代碼

調用自定義函數:


復制代碼

mysql> DELIMITER ;
mysql> SELECT hello();
+-------------------------+
| hello()???????????????? |
+-------------------------+
| Hello? world,i am mysql |
+-------------------------+
1 row in set (0.00 sec)

復制代碼

? 可見已經調用成功了,需要注意的幾點

之所以使用DELIMITER是因為MySQL中默認是使用分號來結束一個命令的,我們定義的函數體中一條命令寫完時會用分號來結束,而MySQL會誤以為函數體已經定義完成,因為我們需要定義一個新的標識符來標識一個命令的結束,因為就可以使用DELIMITER。
b:含有參數的自定義函數

在我們格式化日期的時候我們會調用DATE_FORMAT(date,format)函數,第一個參數是日期第二個參數是需要格式化的格式,也就是說需要傳遞兩個參數,我們現在就把這個函數給改下


復制代碼

mysql> DELIMITER $$
mysql> DROP FUNCTION IF EXISTS test.formatDate $$
Query OK, 0 rows affected, 1 warning (0.07 sec)

mysql> CREATE FUNCTION?? test.formatDate(fdate datetime)
??? -> RETURNS VARCHAR(255)
??? -> BEGIN
??? -> DECLARE x VARCHAR(255) DEFAULT '';
??? -> SET x= date_format(fdate,'%Y年%m月%d日%h時%i分%s秒');
??? -> RETURN x;
??? -> END $$
Query OK, 0 rows affected (0.11 sec)

mysql> DELIMITER ;
mysql> SELECT?? formatDate(now());
+----------------------------+
| formatDate(now())????????? |
+----------------------------+
| 2014年11月21日03時41分21秒 |
+----------------------------+
1 row in set (0.18 sec)

復制代碼

這樣當我們需要定制這樣的函數時就可以自己實現了,那就是通過含參的自定義函數。

?

自定義函數和存儲過程的區別:

1)一般來說,存儲過程實現的功能要復雜一點,而函數的實現的功能針對性比較強。存儲過程,功能強大,可以執行包括修改表等一系列數據庫操作;用戶定義函數不能用于執行一組修改全局數據庫狀態的操作。

2)對于存儲過程來說可以返回參數,如記錄集,而函數只能返回值或者表對象。函數只能返回一個變量;而存儲過程可以返回多個。存儲過程的參數可以有IN,OUT,INOUT三種類型,而函數只能有IN類~~存儲過程聲明時不需要返回類型,而函數聲明時需要描述返回類型,且函數體中必須包含一個有效的RETURN語句。

3)存儲過程,可以使用非確定函數,不允許在用戶定義函數主體中內置非確定函數。

4)存儲過程一般是作為一個獨立的部分來執行( EXECUTE 語句執行),而函數可以作為查詢語句的一個部分來調用(SELECT調用),由于函數可以返回一個表對象,因此它可以在查詢語句中位于FROM關鍵字的后面。 SQL語句中不可用存儲過程,而可以使用函數。
?

總結

以上是生活随笔為你收集整理的mysql 自定义函数function,函数和存储过程的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。