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自定义函数相关推荐

  1. rds支持mysql自带函数吗_MySQL自定义函数(CREATE FUNCTION)

    在使用MySQL的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数.自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由 SQL 语句和过程式 ...

  2. mysql 获取子分类_MySQL 自定义函数获取一个分类的无限级子分类

    本方法不易维护,建议取出数据,在程序中递归,例如 https://javascript.net.cn/article?id=654 代码如下:delimiter / DROP FUNCTION IF ...

  3. mysql怎么自定义一个函数调用_MySQL自定义函数编写

    需求:对于数据库中的记录,如果有两条连续的数据的value字段的值相同,则发邮件通知相关人员. 需求分析:告警系统里面的告警检查是通过SQL来进行的,一般的SQL实现不了此功能,因此,这里可以通过函数 ...

  4. mysql 事件 函数_MySQL 自定义函数和存储过程的使用

    MySQL支持自定义函数和存储过程,创建函数和存储过程分别使用CREATE PROCEDURE和CREATE FUNCTION,两者在语法结构上比较相似,但是它们的使用方法及使用场景有所有不同. 1. ...

  5. mysql支持自定义函数_MySQL 自定义函数

    自定义函数概念 用户自定义函数(user-defined function, UDF)是一种对MySQL扩展的途径, 其用法与内置函数相同. 自定义函数的两个必要条件: 参数 返回值 (只能有一个) ...

  6. mysql java自定义函数_Mysql自定义函数总结

    存储函数 创建存储函数,需要使用CREATE FUNCTION语句,基本语法如下: CREATE FUNCTION func_name([func_parameter])RETURNSTYPE[cha ...

  7. mybatis mysql 自定义函数_mysql自定义函数的调用问题

    我在创建自定义函数的调用sql时,一直在报错,希望能给一个解决方案,谢谢,附带我需要调用的sql以及创建的自定义函数 SELECT CONCAT(date_format(SYSDATE(), '%Y% ...

  8. mysql 字符串匹配函数_mysql 自定义函数 实现字符串匹配

    先来一个截图: fSearch函数的第一个参数为单一字符串(即 没有特殊字符串隔开) fSearch函数的第一个参数非单一字符串 多个字符串同样可以匹配. 函数代码: DELIMITER $$ Cre ...

  9. mysql自定义函数 PHP_MySQL自定义函数(CREATE FUNCTION)

    在使用 MySQL 的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数. 自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由 SQL 语句和 ...

最新文章

  1. or1200乘法除法指令解释
  2. 王洪超:WPF催熟整个软件生态链
  3. 让你分分钟明白onTouchEvent事件分发
  4. docker安装前提条件
  5. JEECG v3视频陆续更新
  6. 2019,微软研究项目盘点
  7. 关于android 双击事件
  8. yum安装nginx,并配置静态资源服务器
  9. 传输层协议(6):TCP 连接(下-3)
  10. 微信小程序项目实例——家居团购
  11. vi编辑器替换字符串命令
  12. win10系统进不了服务器失败,快速解决Win10安装失败重启进不了系统的方法
  13. 科普:Flutter应用打包、修改图标、修改启动页和app名字、加固后重新V1V2签名
  14. pandas学习-变形-task15
  15. 2007版本中国网络新秀之七剑下天山
  16. 393高校毕业设计选题
  17. AI、量子计算引爆硬科技创新,雷鸣、王海峰、施尧耘等北大120周年论道信科最前沿...
  18. 榆熙电商:拼多多怎样判断商品是否被降权?原因有哪些?
  19. C语言的一些基础语法
  20. 新手零基础快速入门Docker

热门文章

  1. python gRPC测试helloworld
  2. 用IntelliJ IDEA 配置安卓(Android)开发环境(一条龙服务,新手进!)
  3. spark 监控--WebUi、Metrics System(转载)
  4. 【前端统计图】echarts实现单条折线图
  5. NHibernate:no persister for 异常
  6. Thread.join(), CountDownLatch、CyclicBarrier和 Semaphore区别,联系及应用
  7. SQLAlchemy
  8. VMWare MAC系统调整磁盘
  9. ASP.NET Request.UrlReferrer 问题
  10. 1-4 TCP/IP协议族