mysql 自定义函数create function

方便后续查询,做以下记录;
自定义函数是一种与存储过程十分相似的过程式数据库对象,
它与存储过程一样,都是由 SQL 语句和过程式语句组成的代码片段,并且可以被应用程序和其他 SQL 语句调用。
自定义函数与存储过程之间存在几点区别:

  1. 自定义函数不能拥有输出参数,这是因为自定义函数自身就是输出参数;而存储过程可以拥有输出参数。
  2. 自定义函数中必须包含一条 RETURN 语句,而这条特殊的 SQL 语句不允许包含于存储过程中。
  3. 可以直接对自定义函数进行调用而不需要使用 CALL 语句,而对存储过程的调用需要使用 CALL 语句。
  4. 存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新。
  5. 函数:有且仅有1 个返回,适合做处理数据后返回一个结果。
一、创建&使用存储函数

创建并使用自定义函数
使用 CREATE FUNCTION 语句创建自定义函数。
语法格式如下:

CREATE FUNCTION <函数名> ( [ <参数1> <类型1> [ , <参数2> <类型2>] ])RETURNS <类型><函数主体>
-- 1、创建无参数函数(查询user表中最大的ID值)
-- create function getUserMaxId()
-- returns int(11) deterministic
-- RETURN (SELECT max(id) from user);-- 2、使用getUserMaxId()函数
-- SELECT getUserMaxId();-- 3、创建带参数函数
-- 需求:自定义nvl函数,参数1为null时返回参数2,参数1不为null正常返回参数1
-- CREATE FUNCTION nvl(str1 varchar(4000), str2 varchar(4000))
-- RETURNS VARCHAR(4000) DETERMINISTIC
-- return COALESCE(str1, str2);-- 4、使用自定义nvl函数
-- set @str1 = "中国";
-- set @str2 = "默认值";
-- SELECT nvl(@str1, @str2);-- 5、在create function 后添加if not exists可避免已经存在的函数重复添加,产生报错信息;
CREATE FUNCTION IF NOT EXISTS test.get_total(username VARCHAR(20))
RETURNS DECIMAL(10,2) deterministic
BEGINDECLARE total DECIMAL(10,2);SELECT SUM(score * 10) INTO total FROM user WHERE username = username;RETURN total;
END;

存储函数返回table类型,使用mysql v5.7和v8.0都没有验证成功;
一直报以下错误,后续如有进展更新些处;

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TABLE
BEGINDECLARE result_table TABLE (id INT,name VARCHA' at line 2

参考文档:https://blog.51cto.com/u_16213348/8781024

二、查看存储函数
1、查看所有自定义函数
使用SHOW FUNCTION STATUS命令来查看所有自定义函数的信息:
SHOW FUNCTION STATUS;

在这里插入图片描述

2、使用WHERE子句过滤某个数据库中的自定义函数:
SHOW FUNCTION STATUS WHERE Db = 'database_name';
SHOW FUNCTION STATUS where Db="test"

在这里插入图片描述

3、使用LIKE子句过滤函数名包含某个关键字的自定义函数:
SHOW FUNCTION STATUS LIKE '%keyword%';
SHOW FUNCTION STATUS like "%nvl%"

在这里插入图片描述

三、修改存储函数

使用 ALTER FUNCTION 语句来修改自定义函数的某些相关特征。
若要修改自定义函数的内容,则需要先删除该自定义函数,然后重新创建。
参考地址:https://deepinout.com/mysql/mysql-questions/t_how-can-we-alter-a-mysql-stored-function.html
修改存储函数失败,mysql版本5.7和8.0

-- 创建存储函数(成功)
-- CREATE FUNCTION test.get_total(username VARCHAR(20))
-- RETURNS DECIMAL(10,2) deterministic
-- BEGIN
--     DECLARE total DECIMAL(10,2);
--     SELECT SUM(score * 10) INTO total FROM user WHERE username = username;
--     RETURN total;
-- END;-- 修改存储函数(失败)
ALTER FUNCTION get_total()
RETURNS DECIMAL(10,2) deterministic
BEGINDECLARE total DECIMAL(10,2);SELECT SUM(score * 10) INTO total FROM user;RETURN total;
END;/**
报错如下:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '()
RETURNS DECIMAL(10,2) deterministic
BEGINDECLARE total DECIMAL(10,2)' at line 1
*/-- 调用存储函数(成功)
-- SELECT test.get_total('mark');
四、删除存储函数

语法格式如下:

DROP FUNCTION [ IF EXISTS ] <自定义函数名>

语法说明如下:
1、<自定义函数名>:指定要删除的自定义函数的名称。
2、IF EXISTS:指定关键字,用于防止因误删除不存在的自定义函数而引发错误。

drop function IF EXISTS 函数名;
五、查看存储函数结构

SHOW CREATE FUNCTION 函数名;

-- 查看创建nvl函数结构
SHOW CREATE FUNCTION nvl;
-- 返回: Create Function 字段内容如下:
CREATE DEFINER=`root`@`localhost` FUNCTION `nvl`(str1 varchar(4000), str2 varchar(4000)) RETURNS varchar(4000) CHARSET utf8mb4 DETERMINISTIC
return coalesce(str1, str2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/695986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Nginx 将 HTTP 重定向到 HTTPS

配置重定向 HTTP 流量在 80 号端口被监听。这里我们将全部 HTTP 的流量都永久重定向到 HTTPS&#xff08;301&#xff09;。重定向时&#xff0c;保留原有的主机&#xff08;host&#xff09;和请求 URI。 server {listen 80;server_name _;return 301 https://…

提供英语励志名言的软件有哪些?这些软件不可错过

提供英语励志名言的软件有哪些&#xff1f;在追求个人成长和激励的道路上&#xff0c;英语励志名言常常为我们提供前进的动力。这些言简意赅、充满智慧的话语&#xff0c;不仅能在我们迷茫时指引方向&#xff0c;还能在挫折中给予我们勇气和力量。如今&#xff0c;随着科技的发…

题目 1124: C语言训练-大、小写问题

问题描述&#xff1a; 输入一串字符,将其中的大写变成小写&#xff0c;若不为大写则原样输出 样例输入&#xff1a; A123b 样例输出&#xff1a; a123b 问题分析&#xff1a; 潜在的缓冲区溢出风险&#xff1a; 代码声明了一个大小为 100 的字符数组 str 来存储输入的字…

工具变量-全国各省368个地级市河流密度数据集

1、数据来源&#xff1a;国家基础地理信息中心 2、时间跨度&#xff1a;-- 3、区域范围&#xff1a;全国各省市 4、指标说明&#xff1a; 根据河流矢量和中国城市行政边界矢量地理信息&#xff0c;计算每个城市河流的总长度&#xff1b;根据各城市的行政区划面积&#xff0…

C# 语言教程

一、引言 C#&#xff08;读作“C Sharp”&#xff09;是由微软开发的一种面向对象的编程语言&#xff0c;它结合了 C 的强大功能和 Java 的易用性。C# 语言是 .NET 框架的一部分&#xff0c;特别适用于 Windows 桌面应用程序、Web 应用程序以及分布式系统的开发。本教程将介绍…

stm32和嵌入式linux可以同步学习吗?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「stm3的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;如果需要使用STM32&#xff0c;建…

http://127.0.0.1:9222/json打不开Chrome环境变量问题

解决方案&#xff1a; 系统环境变量Path设置错误&#xff0c; 1、先看下端口是否占用&#xff1a;netstat -ano|findstr “9222” &#xff0c; 如下127.0.0.1:9222端口显示LISTENING是正常的 如果是SYN_SENT可能不太正常&#xff0c;这个时候&#xff0c; taskkill /PID 端…

【OpcUA开发笔记 2】open62541在Linux下编译及Qt开发

前言 在上一篇中&#xff0c;我们记录了在windows下通过CMake编译mingw版本的open62541&#xff0c;事实上是为了这一篇做铺垫&#xff0c;我们本次就在ubuntu下编译open62541&#xff0c;并通过Qt来调用它。 一、编译 1. 建立工程文件夹 我在主目录中建立文件夹project&#x…

【前端素材】推荐优质后台管理系统APP Zina平台模板(附源码)

一、需求分析 当我们从多个层次来详细分析后台管理系统时&#xff0c;可以将其功能和定义进一步细分&#xff0c;以便更好地理解其在不同方面的作用和实际运作。 1. 功能层次 a. 用户管理功能&#xff1a; 用户注册和登录&#xff1a;管理用户账户的注册和登录过程。权限管…

用js-插入HTML元素

这段代码是一个有序列表&#xff08;ordered list&#xff09;&#xff0c;使用<ol>标签包裹起来。有序列表中的每一项由<li>标签表示。 在这个例子中&#xff0c;有三个列表项&#xff1a; 目录 1目录 2目录 3 这段代码会渲染成一个有序列表&#xff0c;显示为&am…

如何使用Docker部署开源Leanote蚂蚁笔记并发布个人博客至公网

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 1. 安装Docker2. Docker本地部署Leanote蚂蚁笔记3. 安装…

notepad++运行python闪一下就没啦

问题&#xff1a;Notepad直接快捷键运行Python代码,出现闪一下就没了 解决措施&#xff1a; ①点击菜单运行(Run) --> 运行(Run)弹出的对话框 ②把 cmd /k python "$(FULL_CURRENT_PATH)" & ECHO. & PAUSE & EXIT 粘贴进入这个对话框内 ③点击保存&a…

由面试题“Redis是否为单线程”引发的思考

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

代码随想录三刷day05

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣59. 螺旋矩阵 II二、力扣54. 螺旋矩阵 前言 相信大家有遇到过这种情况&#xff1a; 感觉题目的边界调节超多&#xff0c;一波接着一波的判断&#xff0…

边坡位移监测设备:守护工程安全的前沿科技

随着现代工程建设的飞速发展&#xff0c;边坡位移监测作为预防山体滑坡、泥石流等自然灾害的重要手段&#xff0c;日益受到人们的关注。边坡位移监测设备作为这一领域的关键技术&#xff0c;以其高精度、实时监测的特点&#xff0c;成为守护工程安全的重要武器。 一、边坡位移…

走深向实,数字化转型助力央国企高质量发展|爱分析报告

央国企数字化转型背景 1.1 央国企数字化转型驱动因素及目标 在政策、使命、内生需求的共同驱动下&#xff0c;数字化转型已成为央国企发展的必然选择。 政策指引&#xff1a;早在2020年&#xff0c;国资委发布了《关于加快推进国有企业数字化转型工作的通知》&#xff0c;对国…

信钰证券|印花税下降对股市的影响?印花税下降利好哪些板块?

投资者在买卖股票时&#xff0c;需求交纳一定的佣金费用、印花税和过户费用&#xff0c;其间印花税和过户费用&#xff0c;随着方针的变动&#xff0c;会进行相应的调整&#xff0c;那么&#xff0c;印花税下降对股市的影响&#xff1f;印花税下降利好哪些板块&#xff1f; 印花…

Android 系统定位和高德定位

文章目录 Android 系统定位和高德定位系统定位工具类封装LocationManager使用 高德定位封装高德地图使用 Android 系统定位和高德定位 系统定位 工具类 public class LocationUtils {public static final int REQUEST_LOCATION 0xa1;/*** 判断定位服务是否开启*/public sta…

(科目三)信息技术基础

1.信息与信息技术概述 1.1 信息的定义和表示 一、信息的定义&#xff1a; 信息就是通过语言、文字、图形/图像、声音、视频等传播的内容。 信息≠消息&#xff0c;信息就是消息的内核&#xff0c;消息是信息的外壳。 信息不是某种信号&#xff0c;也不等同于知识。 数据&…

算法沉淀——穷举、暴搜、深搜、回溯、剪枝综合练习三(leetcode真题剖析)

算法沉淀——穷举、暴搜、深搜、回溯、剪枝综合练习三 01.字母大小写全排列02.优美的排列03.N 皇后04.有效的数独 01.字母大小写全排列 题目链接&#xff1a;https://leetcode.cn/problems/letter-case-permutation/ 给定一个字符串 s &#xff0c;通过将字符串 s 中的每个字…