阿里云发布网站,成都轨迹公布,代运营公司前十名,十大免费剪辑软件下载方便后续查询#xff0c;做以下记录#xff1b; 自定义函数是一种与存储过程十分相似的过程式数据库对象#xff0c; 它与存储过程一样#xff0c;都是由 SQL 语句和过程式语句组成的代码片段#xff0c;并且可以被应用程序和其他 SQL 语句调用。 自定义函数与存储过程之间…方便后续查询做以下记录 自定义函数是一种与存储过程十分相似的过程式数据库对象 它与存储过程一样都是由 SQL 语句和过程式语句组成的代码片段并且可以被应用程序和其他 SQL 语句调用。 自定义函数与存储过程之间存在几点区别
自定义函数不能拥有输出参数这是因为自定义函数自身就是输出参数而存储过程可以拥有输出参数。自定义函数中必须包含一条 RETURN 语句而这条特殊的 SQL 语句不允许包含于存储过程中。可以直接对自定义函数进行调用而不需要使用 CALL 语句而对存储过程的调用需要使用 CALL 语句。存储过程可以有0个返回也可以有多个返回适合做批量插入、批量更新。函数有且仅有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 Dbtest3、使用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 DEFINERrootlocalhost FUNCTION nvl(str1 varchar(4000), str2 varchar(4000)) RETURNS varchar(4000) CHARSET utf8mb4 DETERMINISTIC
return coalesce(str1, str2)