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

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

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语句中不可用存储过程,而可以使用函数。
 

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

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

相关文章

2013年28周信息安全汇总(7.7 - 7.13)

补丁本周是微软发布补丁的日子了,这一次一共需要打上 7 个补丁,其中有 6 个都是最高级别的“严重”级补丁,主要影响 .NET Framework、Silverlight、Windows、Office、Visual Studio 和 IE,可怜我的操作系统早已是补丁累补丁了。不…

Linux下创建动态库与使用

参考文章:dll和so文件区别与构成:http://www.cnblogs.com/likwo/archive/2012/05/09/2492225.html 动态库路径配置- /etc/ld.so.conf文件:http://blog.csdn.net/blade2001/article/details/32839937 1.如何生成一个动态库: 假设有…

XEN--转载自鸟哥的linux私房菜

初探 XenXen 的效能為什麼能夠這麼好? Xen 在使用上面有什麼樣的限制?我的一部主機最多可以支援幾個 Xen 的模擬環境? Xen 的模擬環境有幾種類型? 這些疑問我們都得要先知道一下才好! 當然,最好能夠有個簡單…

[Mojava 10.14.4] Clover隐藏多余分区, 原来可以这么简单

好不容易把黑苹果装完了, 搞定驱动和引导, 剩下的也没啥了, 但还有一事: 隐藏clover中多余的启动项! 直接上最关键的部分: 1. 打开Clover Configurator, 挂载对应的EFI分区 2. 打开分区,加载对应的config.plist文件 3. 切换到Clover Configurator的Gui界面, 添加需要隐藏的项…

Mac下如何配置环境变量

以前都是在Windows平台上开发,在配置一些框架的时候,为了能够在命令行中调用,一般都会配置bin目录到环境变量中,这是为了让命令行在执行的时候,能够查找到对应的执行文件。 现在工作使用Mac,配置环境变量不…

C Primer+Plus(十七)高级数据表示 编程练习(二)

7、编写一个程序,能打开、读入一个文本文件并统计文件中每个单词出现的次数。用改进的二叉搜索树存储单词及其出现的次数。程序读入文件后,会提供一个有三个选项的菜单。第一个选项为列出所有单词连同其出现的次数。第二个选项为让您输入一个单词&#x…

Mybatis高级-resultMap之collection聚集

From: https://aodeng.cc/archives/mybatisgaoji 简介 聚集元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类)&#…

Atitit  数据存储的分组聚合 groupby的实现attilax总结

Atitit 数据存储的分组聚合 groupby的实现attilax总结 1. 聚合操作1 1.1. a、标量聚合 流聚合1 1.2. b、哈希聚合2 1.3. 所有的最优计划的选择都是基于现有统计信息来评估3 1.4. 参考资料3 1. 聚合操作 聚合也是我们在写T-SQL语句的时候经常遇到的,我们来分析一下一…

[java理论篇]--java的其他常用API

1、java的正则表达式:常用方法:String matches(匹配) ;String split(切割);String replaceAll(替换);利用正则表达式获取字符创的核心代码:String str“ds…

pojo类无法注入service解决示例

From: https://blog.csdn.net/danielzhou888/article/details/83351913 本示例解决springboot中service无法注入普通jopo的问题。 不啰嗦,直接上代码。 如果该示例帮您解决了问题,请助推哦。 pojo类: package com.scmd.controller;import…

图测试题部分总结.ing

一个无向连通图的生成树是含有该连通图的全部顶点的&#xff08;极小连通子图&#xff09; 在有向图G的拓扑序列中&#xff0c;若顶点Vi在顶点Vj之前&#xff0c;则下列情形不可能出现的是&#xff08;D&#xff09;A&#xff0e;G中有弧<Vi&#xff0c;Vj> B&#xff0e…

mybatis动态sql中的where标签的使用

From: https://blog.csdn.net/wobuaizhi/article/details/81874664 在使用mybatis的动态sql时&#xff0c;有时候遇到根据条件判断添加where后面的筛选条件。 会出现多余的“and”或者“or”&#xff0c;如下&#xff1a; <select id"findBlog" result…

电脑公司 Ghost XP SP3 国庆特别版 v2011.10

电脑公司 Ghost XP SP3 国庆特别版 v2011.10 文件名称:DNGS_GhostXpSp3_v2011.10.iso文件大小:686.59MB &#xff08;719,945,728字节&#xff09;系统格式:NTFSCRC32:DDEBC170MD5:FA264E6241154EE7F80EFED3CFF1C6A2SHA1:FFEB1C13854AA954D9EE384153815FAF52E0747B电脑城系统 …

Linux C 预处理详解

1.预处理程序 按照ANSI标准的定义&#xff0c;预处理程序应该处理以下指令&#xff1a; #if #ifdef #ifndef #else #elif #endif #define #undef #line #error #pragma #include 显然&#xff0c;上述所有的12个预处理指令都以符号#开始&#xff0c;每条预处理指令必须独占一行…

Spring Boot 中使用 @Transactional 注解配置事务管理

From: https://blog.csdn.net/nextyu/article/details/78669997 事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务&#xff1b;声明式事务基于 AOP,将…

TCP中间件_Delphi_client

1、界面 1.1、formMain.pas 1.1.1、 object frmMain: TfrmMainLeft 191Top 103Width 542Height 466Caption frmMainColor clBtnFaceFont.Charset DEFAULT_CHARSETFont.Color clWindowTextFont.Height -11Font.Name MS Sans SerifFont.Style []OldCreateOrder False…

python为类定义构造函数

用python进行OO编程时&#xff0c; 经常会用到类的构造函数来初始化一些变量。 class FileData:def __init__(self, data, name, type):self.bits base64.encodestring(data)self.name nameself.type type其中self类似c或者c#的this指针。转载于:https://blog.51cto.com/muz…

Linux C 函数练习

学习函数主要学习的就是函数的声明、定义和调用&#xff0c;下面请看两个例子&#xff0c;来帮助我们学习函数&#xff1a; 题目一&#xff1a; 编写一个函数iswithin()&#xff0c;它接受两个参数&#xff0c;一个是字符&#xff0c;另一个是字符串指针。其功能是如果字符在字…

Java、Mysql、MyBatis 中枚举 enum 的使用

From: https://yulaiz.com/java-mysql-enum/ Java 和 MySql 中都有枚举的概念&#xff0c;合理的使用枚举&#xff0c;可以让代码阅读和数据库数据查询更加直观、高效。那么我们怎么使用呢&#xff0c;什么时候使用&#xff0c;两者之间怎么进行数据关联呢&#xff1f;&#x…

ny12 喷水装置(二)

喷水装置&#xff08;二&#xff09; 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述有一块草坪&#xff0c;横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<10000)个点状的喷水装置&#xff0c;每个喷水装置i喷水的效果是让…