mysql 定一个函数_mysql自定义函数
mysql中的UDF(自定义函数),其实是个好东西,比如可以写好一些方法或
函数,然后进行调用,而且是在SQL语句中可以进行调用。
DROP FUNCTION CalculateAmount
CREATE FUNCTION CalculateAmount(userid INT) RETURNS float(10,2)
BEGIN
DECLARE totalCredits FLOAT;
SELECT SUM(amount) INTO totalAmount FROM credit_user WHERE id =userid;
RETURN totalAmount;
END
要注意的是,在UDF中,不要定义与数据表中重名的列。而在SQL中,
则可以象如SELECT CalculateAmount(1);那样去调用了。
指定参数为IN, OUT, 或INOUT 只对PROCEDURE是合法的。(FUNCTION参数总是被认为是IN参数)
下列是一个例子,一个采用参数的函数使用一个SQL函数执行一个操作,并返回结果:
mysql> delimiter //
mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
-> RETURN CONCAT('Hello, ',s,'!');
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> SELECT hello('world');
+----------------+
| hello('world') |
+----------------+
| Hello, world!|
+----------------+
1 row in set (0.00 sec)
如果在存储函数中的RETURN语句返回一个类型不同于在函数的RETURNS子句中指定类型的值,返回值被强制为恰当的类型。比如,如果一个函数返回一个ENUM或SET值,但是RETURN语句返回一个整数,对于SET成员集的相应的ENUM成员,从函数返回的值是字符串。
>显示库中所有的自定义函数信息:
show function status;
>创建自定义函数的过程如下demo1:
drop function if exists fn_binary_table;
delimiter //
create function fn_binary_table(
param_1 varchar(50)
)returns int
begin
declare total int default 0;
select count(*) into total from binary_table where file_type like param_1;
return total;
end;
//
delimiter ;
定义一个输出三个数中最大的数函数:demo2如下:
drop function if exists fn_three_max;
delimiter //
create function fn_three_max(
param_1 double,
param_2 double,
param_3 double
)returns double
begin
declare max_val double;
if param_1 > param_2then
SET max_val = param_1;
else
SET max_val = param_2;
end if;
IF param_3>max_val THEN
SET max_val = param_3;
END IF;
return max_val;
end;
//
调用此函数如下:
select fn_three_max(3,100,90);
简单说明:
mysql中:
declare用户定义一个局部变量
set 用户给变量赋值。
官方文档:
CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL}
SONAME shared_library_name
DROP FUNCTION function_name
一个自定义函数 (UDF)就是用一个象ABS() 或 CONCAT()这样的固有(内建)函数一样作用的新函数去扩展MySQL。
function_name 是 用在SQL声明中以备调用的函数名字。RETURNS 子句说明函数返回值的类型。shared_library_name 是共享目标文件的基本名,共享目标文件含有实现函数的代码。该文件必须位于一个能被你系统的动态连接者搜索的目录里。
你必须有mysql 数据库的INSERT 权限才能创建一个函数,你必须有mysql 数据库的DELETE权限才能撤销一个函数。这是因为CREATE FUNCTION 往记录函数名字,类型和共享名的mysql.func系统表里添加了一行,而DROP FUNCTION则是从表中删掉这一行。如果你没有这个系统表,你应该运行mysql_fix_privilege_tables脚本来创建一个。请参阅2.10.2节,“升级授权表”。
一个有效的函数是一个用CREATE FUNCTION加载且没有用DROP FUNCTION移除的函数。每次服务器启动的时候会重新加载所有有效函数,除非你使用--skip-grant-tables参数启动mysqld。在这种情况下, 将跳过UDF的初始化,UDF不可用。
要了解编写自定义函数的说明,请参阅27.2.3节,“添加新的自定义函数”。要使得UDF机制能够起作用,必须使用C或者C++编写函数,你的系统必须支持动态加载,而且你必须是动态编译的mysqld(非静态)。
一个AGGREGATE函数就像一个MySQL固有的集合(总和)函数一样起作用,比如,SUM或COUNT()函数。要使得AGGREGATE 起作用,你的mysql.func表必须包括一个type列。如果你的mysql.func表没有这一 列,你应该运行mysql_fix_privilege_tables脚本来创建此 列。
更多:
mysql 定一个函数_mysql自定义函数相关推荐
- rds支持mysql自带函数吗_MySQL自定义函数(CREATE FUNCTION)
在使用MySQL的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数.自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由 SQL 语句和过程式 ...
- mysql 获取子分类_MySQL 自定义函数获取一个分类的无限级子分类
本方法不易维护,建议取出数据,在程序中递归,例如 https://javascript.net.cn/article?id=654 代码如下:delimiter / DROP FUNCTION IF ...
- mysql怎么自定义一个函数调用_MySQL自定义函数编写
需求:对于数据库中的记录,如果有两条连续的数据的value字段的值相同,则发邮件通知相关人员. 需求分析:告警系统里面的告警检查是通过SQL来进行的,一般的SQL实现不了此功能,因此,这里可以通过函数 ...
- mysql 事件 函数_MySQL 自定义函数和存储过程的使用
MySQL支持自定义函数和存储过程,创建函数和存储过程分别使用CREATE PROCEDURE和CREATE FUNCTION,两者在语法结构上比较相似,但是它们的使用方法及使用场景有所有不同. 1. ...
- mysql支持自定义函数_MySQL 自定义函数
自定义函数概念 用户自定义函数(user-defined function, UDF)是一种对MySQL扩展的途径, 其用法与内置函数相同. 自定义函数的两个必要条件: 参数 返回值 (只能有一个) ...
- mysql java自定义函数_Mysql自定义函数总结
存储函数 创建存储函数,需要使用CREATE FUNCTION语句,基本语法如下: CREATE FUNCTION func_name([func_parameter])RETURNSTYPE[cha ...
- mybatis mysql 自定义函数_mysql自定义函数的调用问题
我在创建自定义函数的调用sql时,一直在报错,希望能给一个解决方案,谢谢,附带我需要调用的sql以及创建的自定义函数 SELECT CONCAT(date_format(SYSDATE(), '%Y% ...
- mysql 字符串匹配函数_mysql 自定义函数 实现字符串匹配
先来一个截图: fSearch函数的第一个参数为单一字符串(即 没有特殊字符串隔开) fSearch函数的第一个参数非单一字符串 多个字符串同样可以匹配. 函数代码: DELIMITER $$ Cre ...
- mysql自定义函数 PHP_MySQL自定义函数(CREATE FUNCTION)
在使用 MySQL 的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数. 自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由 SQL 语句和 ...
最新文章
- or1200乘法除法指令解释
- 王洪超:WPF催熟整个软件生态链
- 让你分分钟明白onTouchEvent事件分发
- docker安装前提条件
- JEECG v3视频陆续更新
- 2019,微软研究项目盘点
- 关于android 双击事件
- yum安装nginx,并配置静态资源服务器
- 传输层协议(6):TCP 连接(下-3)
- 微信小程序项目实例——家居团购
- vi编辑器替换字符串命令
- win10系统进不了服务器失败,快速解决Win10安装失败重启进不了系统的方法
- 科普:Flutter应用打包、修改图标、修改启动页和app名字、加固后重新V1V2签名
- pandas学习-变形-task15
- 2007版本中国网络新秀之七剑下天山
- 393高校毕业设计选题
- AI、量子计算引爆硬科技创新,雷鸣、王海峰、施尧耘等北大120周年论道信科最前沿...
- 榆熙电商:拼多多怎样判断商品是否被降权?原因有哪些?
- C语言的一些基础语法
- 新手零基础快速入门Docker
热门文章
- python gRPC测试helloworld
- 用IntelliJ IDEA 配置安卓(Android)开发环境(一条龙服务,新手进!)
- spark 监控--WebUi、Metrics System(转载)
- 【前端统计图】echarts实现单条折线图
- NHibernate:no persister for 异常
- Thread.join(), CountDownLatch、CyclicBarrier和 Semaphore区别,联系及应用
- SQLAlchemy
- VMWare MAC系统调整磁盘
- ASP.NET Request.UrlReferrer 问题
- 1-4 TCP/IP协议族