MySQL學習——操作自定義函數

来源:https://www.cnblogs.com/shamao/archive/2019/10/08/11636091.html
-Advertisement-
Play Games

MySQL學習——操作自定義函數 摘要:本文主要學習了使用DDL語句操作自定義函數的方法。 瞭解自定義函數 是什麼 自定義函數是一種與存儲過程十分相似的過程式資料庫對象。它與存儲過程一樣,都是由SQL語句和過程式語句組成的代碼片段,並且可以被應用程式和其他SQL語句調用。 自定義函數與存儲過程的區別 ...


MySQL學習——操作自定義函數

摘要:本文主要學習了使用DDL語句操作自定義函數的方法。

瞭解自定義函數

是什麼

自定義函數是一種與存儲過程十分相似的過程式資料庫對象。它與存儲過程一樣,都是由SQL語句和過程式語句組成的代碼片段,並且可以被應用程式和其他SQL語句調用。

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

自定義函數不能擁有輸出參數,這是因為自定義函數自身就是輸出參數;而存儲過程可以擁有輸出參數。

自定義函數中必須包含一條return語句,而這條特殊的SQL語句不允許包含於存儲過程中。

可以直接對自定義函數進行調用而不需要使用call語句,而對存儲過程的調用需要使用call語句。

創建自定義函數

語法

1 create function 函數名([參數])
2 returns 類型
3 函數主體

說明

1)函數名

指定自定義函數的名稱。註意,自定義函數不能與存儲過程具有相同的名稱。

2)參數

用於指定自定義函數的參數。這裡的參數只有名稱和類型,不能指定關鍵字in、out和inout。

3)類型

用於聲明自定義函數返回值的數據類型。

4)函數主體

自定義函數的主體部分,也稱函數體。所有在存儲過程中使用的SQL語句在自定義函數中同樣適用,包括前面所介紹的局部變數、set語句、流程式控制制語句、游標等。

除此之外,自定義函數體還必須包含一個 return 返回值 語句,用於指定自定義函數的返回值。在 return 返回值 語句中包含select語句時,select語句的返回結果只能是一行且只能有一列值。

實例

創建不帶參數的自定義函數:

1 mysql> create function showTopGrade()
2     -> returns int(10)
3     -> return (select max(grade) from score);
4 Query OK, 0 rows affected (0.00 sec)
5 
6 mysql> 

創建帶有參數的自定義函數:

1 mysql> create function getStuGrade(stu varchar(45))
2     -> returns int(10)
3     -> return (select max(grade) from score where student = stu);
4 Query OK, 0 rows affected (0.00 sec)
5 
6 mysql> 

使用自定義函數

語法

1 select 自定義函數名稱([參數]);

實例

1 mysql> select showTopGrade();
2 +----------------+
3 | showTopGrade() |
4 +----------------+
5 |             95 |
6 +----------------+
7 1 row in set (0.00 sec)
8 
9 mysql> 

查看自定義函數

查看所有自定義函數

 1 mysql> mysql> show function status;
 2 +------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
 3 | Db   | Name         | Type     | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
 4 +------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
 5 | demo | getGrade     | FUNCTION | root@localhost | 2019-09-07 18:40:17 | 2019-09-07 18:40:17 | DEFINER       |         | utf8                 | utf8_general_ci      | gb2312_chinese_ci  |
 6 | demo | getStuGrade  | FUNCTION | root@localhost | 2019-09-10 00:25:54 | 2019-09-10 00:25:54 | DEFINER       |         | utf8                 | utf8_general_ci      | gb2312_chinese_ci  |
 7 | demo | showTopGrade | FUNCTION | root@localhost | 2019-09-10 00:19:40 | 2019-09-10 00:19:40 | DEFINER       |         | utf8                 | utf8_general_ci      | gb2312_chinese_ci  |
 8 +------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
 9 3 rows in set (0.00 sec)
10 
11 mysql> 

查看自定義函數的創建語句

1 mysql> mysql> show create function getGrade;
2 +----------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
3 | Function | sql_mode                                   | Create Function                                                                                                        | character_set_client | collation_connection | Database Collation |
4 +----------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
5 | getGrade | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` FUNCTION `getGrade`() RETURNS int(10) return (select grade from score where id = 12) | utf8                 | utf8_general_ci      | gb2312_chinese_ci  |
6 +----------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
7 1 row in set (0.00 sec)
8 
9 mysql> 

修改自定義函數

可以通過先刪除自定義函數,然後重新創建自定義函數的方法實現修改的操作。

刪除自定義函數

語法

1 drop function 自定義函數名稱

實例

1 mysql> drop function getGrade;
2 Query OK, 0 rows affected (0.00 sec)
3 
4 mysql> 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本篇主要寫一些 腳本條件語句的使用。 條件測試 test 條件表達式 [ 條件表達式 ] 文件測試 :測試是否為目錄(Directory)。 :測試文件或目錄是否存在(Exist)。 :測試是否為文件(File)。 :測試當前用戶是否有許可權讀取(Read)。 :測試當前用戶是否有許可權寫入(Write ...
  • 本篇主要寫一些 腳本條件語句的使用。 條件測試 test 條件表達式 [ 條件表達式 ] 文件測試 :測試是否為目錄(Directory)。 :測試文件或目錄是否存在(Exist)。 :測試是否為文件(File)。 :測試當前用戶是否有許可權讀取(Read)。 :測試當前用戶是否有許可權寫入(Write ...
  • 本篇主要寫一些 腳本的基礎知識,編程規範。 第一個shell腳本 執行腳本 source . sh ./ 符號使用 管道符 和 awk 重定向輸出 重定向輸入 [root@localhost ~] rm test.txt error.log [root@localhost ~] cat error. ...
  • 1.什麼是資料庫管理系統? 資料庫管理系統是由相互關聯的數據和管理這些數據的程式組成。 2.應用 資料庫在生產生活各行各業有著廣泛的應用: (1)銀行金融(2)互聯網應用數據存儲等等等等。資料庫無所不在,無處不在 3.資料庫管理系統DBMS出現前,怎樣用來管理數據? 使用文件處理系統。主要的弊端:( ...
  • MapReduce詳細工作流程之Map階段 如上圖所示 1. 首先有一個200M的待處理文件 2. 切片:在客戶端提交之前,根據參數配置,進行任務規劃,將文件按128M每塊進行切片 3. 提交:提交可以提交到本地工作環境或者Yarn工作環境,本地只需要提交切片信息和xml配置文件,Yarn環境還需要 ...
  • 1.創建資料庫 CREATE DATABASE 資料庫名 2.刪除資料庫 DROP DATABASE 資料庫名 3.選擇資料庫 USE 資料庫名 4.數據類型 (1)數值類型 (2)日期和時間類型 (3)字元串類型 5.創建數據表 CREATE TABLE table_name (column_na ...
  • 轉自: http://www.maomao365.com/?p=9775 摘要: 下文簡述sqlserver資料庫中 text image類型無法使用distinct的處理方法分享 實驗環境:sql server 2017 sqlserver我們常常需要對一系列值進行取distinct操作,但是當直 ...
  • 分組查詢, select 欄位名 from 表名 GROUP BY ....;(欄位部分可以指定的列有限制,1 被分組的列,2 每個分組返回一個值的表達式) 依某個欄位進行分組,可以更加容易對其進行查詢如:最大值,最小值。。。 select 欄位名 from 表名 having by ....; w ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...