mysql 自定义函数function,函数和存储过程的区别

https://blog.csdn.net/u010365819/article/details/80470448

https://blog.csdn.net/mengzuchao/article/details/80686792

https://www.cnblogs.com/progor/p/8871480.html

https://blog.csdn.net/qq_26963433/article/details/78601606

https://blog.csdn.net/atares0223/article/details/50147813

 DROP FUNCTION IF EXISTS test.formatDate $$

1.MySQL自定义函数简介

  在MySQL中使用自定义函数也需要相应的要求,语法如下,

  创建新函数:

    Create function function_name(参数列表)

    returns返回值类型

    函数体内容

  相关说明,

  • 函数名:应该合法的标识符,并且不应该与已有的关键字冲突。一个函数应该属于某数据库,可以使用db_name.funciton_name的形式执行当前函数所属数据库

    ,否则默认为当前数据库。

  • 参数列表:可以有一个或者多个函数参数,甚至是没有参数也是可以的。对于每个参数,由参数名和参数类型组成。
  • 返回值:指明返回值类类型
  • 函数体:自定义函数的函数体由多条可用的MySQL语句,流程控制,变量声明等语句构成。需要指明的是函数体中一定要含有return 返回语句。

2.自定义示例

  a.无参函数定义

    

mysql> DROP FUNCTION IF EXISTS hello;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> DELIMITER $$
mysql> CREATE FUNCTION hello()-> RETURNS VARCHAR(255)-> BEGIN-> RETURN 'Hello  world,i am mysql';-> END $$
Query OK, 0 rows affected (0.11 sec)

  调用自定义函数:

  

mysql> DELIMITER ;
mysql> SELECT hello();
+-------------------------+
| hello()                 |
+-------------------------+
| Hello  world,i am mysql |
+-------------------------+
1 row in set (0.00 sec)

可见已经调用成功了,需要注意的几点

  之所以使用DELIMITER是因为MySQL中默认是使用分号来结束一个命令的,我们定义的函数体中一条命令写完时会用分号来结束,而MySQL会误以为函数体已经定义完成,因为我们需要定义一个新的标识符来标识一个命令的结束,因为就可以使用DELIMITER。

  b:含有参数的自定义函数

  在我们格式化日期的时候我们会调用DATE_FORMAT(date,format)函数,第一个参数是日期第二个参数是需要格式化的格式,也就是说需要传递两个参数,我们现在就把这个函数给改下

  

mysql> DELIMITER $$
mysql> DROP FUNCTION IF EXISTS test.formatDate $$
Query OK, 0 rows affected, 1 warning (0.07 sec)mysql> CREATE FUNCTION   test.formatDate(fdate datetime)-> RETURNS VARCHAR(255)-> BEGIN-> DECLARE x VARCHAR(255) DEFAULT '';-> SET x= date_format(fdate,'%Y年%m月%d日%h时%i分%s秒');-> RETURN x;-> END $$
Query OK, 0 rows affected (0.11 sec)mysql> DELIMITER ;
mysql> SELECT   formatDate(now());
+----------------------------+
| formatDate(now())          |
+----------------------------+
| 2014年11月21日03时41分21秒 |
+----------------------------+
1 row in set (0.18 sec)

  这样当我们需要定制这样的函数时就可以自己实现了,那就是通过含参的自定义函数。

自定义函数和存储过程的区别:

1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。

2)对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象。函数只能返回一个变量;而存储过程可以返回多个。存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类~~存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的RETURN语句。

3)存储过程,可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。

4)存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。

转载于:https://www.cnblogs.com/PrestonL/p/9681638.html

数据库系列之mysql 自定义函数function,函数和存储过程的区别相关推荐

  1. 数据库学习之MySQL (九)—— 数学函数 字符串函数 CONCAT TRIM PAD

    MySQL学习专栏 正在持续更新中:) 文章目录 复习一下 前面学到的函数 LENGTH CONCAT 数学函数 ABS CEIL FLOOR ROUND POW 常用字符串函数 SUBSTR REP ...

  2. mysql 自定义哈希函数_C++ STL无序容器自定义哈希函数和比较规则(超级详细)...

    前面在讲解 unordered_map.unordered_multimap.unordered_set 以及 unordered_multiset 这 4 种无序关联式容器(哈希容器)时,遗留过一个 ...

  3. 〖Python 数据库开发实战 - MySQL篇⑰〗- 聚合函数的使用

    万叶集

  4. 【Mysql数据库系列】Mysql锁表信息查看与解决

    解除mysql数据库锁表状态的两种方法 第一种: 1.查询是否锁表 show open tables where in_use > 0; 2.查询进程 show processlist; 或 s ...

  5. MySql中游标的定义与使用方式_数据库系列:MySql中游标的定义与使用方式

    创建游标 首先在MySql中创建一张数据表: CREATE TABLE IF NOT EXISTS `store` ( `id` int(11) NOT NULL AUTO_INCREMENT, `n ...

  6. 死磕数据库系列(三十三):MySQL 性能分析与相关工具的使用

    点关注公众号,回复"1024"获取2TB学习资源! 今天我将详细的为大家介绍 MySQL 性能分析以及相关工具使用的相关知识,希望大家能够从中收获多多!如有帮助,请点在看.转发支持 ...

  7. 死磕数据库系列(三十五):MySQL 数据库性能监控

    点关注公众号,回复"1024"获取2TB学习资源! 前面给大家介绍了:MySQL 性能分析与相关工具的使用.今天我将详细的为大家介绍 MySQL 性能监控的相关知识,希望大家能够从 ...

  8. PHP基础-自定义函数-变量范围-函数参数传递

    一.自定义函数     function 函数名([形式参数1,形式参数2,....形式参数n]){         //各种PHP代码....         //......         re ...

  9. 死磕数据库系列(二十六):MySQL 高可用之单主、双主模型组复制配置实践

    点关注公众号,回复"1024"获取2TB学习资源! 前面我们学习:MySQL 高可用之组复制(MGR)技术的相关原理知识,今天我将详细的为大家介绍 MySQL 高可用技术组复制的单 ...

最新文章

  1. EJSS: 南土所梁玉婷组-生境决定了土壤植物系统中细菌、抗性基因和可移动元件间的关系...
  2. oracle 10g rac重建crs
  3. HALCON识别数字ID
  4. 生活娱乐 达尔优的键盘鼠标如何打开和关闭呼吸灯
  5. 安装kilo版本openstack-dashboard时出现的python compress command not found错误解决办法
  6. c++工程师面试常见问题之c++中四种cast转换
  7. 【Python】字符转换为 ASCII 码
  8. LintCode 183. 木材加工(二分查找)
  9. 外设驱动库开发笔记31:S-Modlue远红外气体传感器驱动
  10. 95-134-110-源码-维表-Flink 1.9.0 维表实现
  11. 解释logistic回归为什么要使用sigmoid函数
  12. “iPhone 3 年内必死!”
  13. php和python-PHP与Python语言有哪些区别之处?选择哪一个好?
  14. python分秒换算_度换算成度分秒的Python操作方法
  15. Creator打字机效果
  16. 所有键都无法进入bios(按任何键都进不去bios)
  17. 基于JAVA郑州卷烟厂库存管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  18. 【ZeloEngine】ImGui汇总
  19. 笔记:文澜:桥接视觉和语言的大规模多模态预训练 WenLan: Bridging Vision and Language by Large-Scale Multi-Modal Pre-Training
  20. PLsql(PLSQL Developer)安装与配置

热门文章

  1. SQL优化技巧--远程连接对象引起的CTE性能问题
  2. debian安装搜狗
  3. Flex实现分页显示功能(mx:DataGrid)
  4. simply scheme 第一章 练习+ 看书计划
  5. WQL Analyzer V1.1(WMI查询分析器)
  6. 黄斑区隆起原因诊断过程+黄斑反复水肿问题
  7. Can‘t attach to the process: ptrace(PTRACE_ATTACH, ..)
  8. Yarn申请的内存的精确计算(转载+应用到自己的情况中)
  9. 宽带651以及光猫红色灯闪烁-故障维修
  10. groupByKey、reduceByKey区别(转)