MySQL(10)---自定义函数
MySQL(10)---自定义函数
之前讲过存储过程,存储过程和自定义函数还是非常相似的,其它的可以认为和存储过程是一样的,比如含义,优点都可以按存储过程的优点来理解。
存储过程相关博客:
3、MySQL(9)---纪录一次实际开发过程中用到的复杂存储过程
它们唯一不不同点在于
存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新
函数 :有且仅有1 个返回,适合做处理数据后返回一个结果。
一、语法
1、创建函数
CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
函数体
END
/*
注意:
1、参数列表 包含两部分:参数名 参数类型
2、函数体:肯定会有return语句,如果没有会报错
如果return语句没有放在函数体的最后也不报错,但不建议
3、函数体中仅有一句话,则可以省略begin end
4、使用 delimiter语句设置结束标记
*/
2、调用函数
SELECT 函数名(参数列表)
3、查看函数
SHOW FUNCTION STATUS;
4、删除函数
DROP FUNCTION IF EXISTS function_name;
二、示例
先把例子需要用到表给出
# 商品表
DROP TABLE IF EXISTS `mall_pro`;
CREATE TABLE `mall_pro` (
`mall_id` char(32) NOT NULL,
`pro_name` varchar(32) DEFAULT '' COMMENT '显示名称',
`cash_cost` double(10,1) DEFAULT '0.0' COMMENT '商品价格',
`show_member` int(1) DEFAULT '0' COMMENT '显示 0所有 1指定会员',
`status` int(1) DEFAULT '1' COMMENT '状态:1正常 0删除',
`key_id` varchar(32) DEFAULT '0' COMMENT '会员控件表key',
PRIMARY KEY (`mall_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';
INSERT INTO `mall_pro` (`mall_id`, `pro_name`, `cash_cost`, `show_member`, `status`, `key_id`)
VALUES
('1','手表',100.0,0,1,'0'),
('2','手机',888.0,1,1,'0'),
('3','电脑',3888.0,1,1,'0');
1、无参
#案例:返回商品的个数
DELIMITER $
DROP FUNCTION IF EXISTS myf1;
CREATE FUNCTION myf1() RETURNS INT
BEGIN
DECLARE c INT DEFAULT 0;#定义局部变量
SELECT COUNT(*) INTO c#赋值
FROM mall_pro;
RETURN c;
END $
SELECT myf1()$

2、有参
# 案例:根据商品名称返回商品价格
DELIMITER $
DROP FUNCTION IF EXISTS myf2$
CREATE FUNCTION myf2(proName VARCHAR(20)) RETURNS DOUBLE
BEGIN
SET @sal=0;#定义用户变量
SELECT cash_cost INTO @sal #赋值
FROM mall_pro
WHERE pro_name = proName;
RETURN @sal;
END $
SELECT myf2('手表') $
这个会发现报异常

原因 在存储过程或者函数,传人参数是中文的时候,那么就需要将参数的类型VARCHAR改成NVARCHAR;

3、实现传入两个float,返回二者之和
DELIMITER $
DROP FUNCTION IF EXISTS test_fun$
CREATE FUNCTION test_fun(num1 FLOAT,num2 FLOAT) RETURNS float
BEGIN
DECLARE SUM FLOAT DEFAULT 0;
SET SUM=num1+num2;
RETURN SUM;
END $
SELECT test_fun(1,2)$

总的来讲前面讲了存储过程,函数也没什么好讲的了,有什么疑问看存储过程相关文章应该都懂了。
只要自己变优秀了,其他的事情才会跟着好起来(少将11)
MySQL(10)---自定义函数的更多相关文章
- Mysql - 存储过程/自定义函数
在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...
- mysql创建自定义函数与存储过程
mysql创建自定义函数与存储过程 一 创建自定义函数 在使用mysql的过程中,mysql自带的函数可能不能完成我们的业务需求,这时就需要自定义函数,例如笔者在开发过程中遇到下面这个问题 mysql ...
- navicat与phpmyadmin做mysql的自定义函数和事件
自定义函数和事件是mysql一个很方便的功能,navicat在5.1以上版本就支持了自定义函数和事件,phpmyadmim不清楚. 用这个是由于一些简单的事情,没有必要去做一个服务器计划使用 接下来我 ...
- MySQL之自定义函数实例讲解
转自:https://www.2cto.com/database/201804/740205.html MySQL中已经有很多函数,如时间函数等,但是有时这些函数不能满足自己的设计需求,此时需要自定义 ...
- MySQL(六) —— 自定义函数
自定义函数 用户自定义函数(user-defined function, UDF)是一种对MySQL扩展的途径,其用法与内置函数相同. 参数,返回值 创建自定义函数 CREATE FUNCTION f ...
- MySQL之自定义函数
引言 MySQL本身提供了内置函数,这些函数的存在给我们日常的开发和数据操作带来了很大的便利,比如我前面提到过的聚合函数SUM().AVG()以及日期时间函数等等,可是我们总会出现其他的需求:我们需要 ...
- MySQL 创建自定义函数
语法:Create function function_name(参数列表)returns返回值类型 函数体 函数名,应合法的标识符,不应与系统关键字冲突. 一个函数应该属于某个数据库,可以使用db_ ...
- mysql增加自定义函数功能
mysql默认是不能自定义函数的 当create function时 This function has none of DETERMINISTIC, NO SQL, or READS SQL DAT ...
- MySQL 创建自定义函数(1)
1. 创建测试自定义函数(1) CREATE DEFINER=`dbdh`@`localhost` FUNCTION `test`.`sp_function_dbdh_three`() RETURNS ...
- Jpa 重写方言dialect 使用oracle / mysql 数据库自定义函数
在使用criteria api进行查询时 criteriaBuilder只提供了一个部分标准的sql函数,但当我们需要使用oracle特有的行转列函数wm_concat或 mysql特有的行转列函数g ...
随机推荐
- jQuery 源码解析(二十六) 样式操作模块 样式详解
样式操作模块可用于管理DOM元素的样式.坐标和尺寸,本节讲解一下样式相关,样式操作通过jQuery实例的css方法来实现,该方法有很多的执行方法,如下: css(obj) ;参数 ...
- Python抓取妹子图,内含福利
目标抓取全站妹子封面图片全部爬下来以图片标题命名 分析网页数据结构 妹子图首页 接下来找张图片右击点击检查 想要数据 拿到图片链接直接用浏览器可以访问,但是程序下载有反爬虫,图片直接下载不了需 ...
- Python中的常见特殊方法—— repr方法
在Python中有些方法名.属性名的前后都添加了双下划线,这种方法.属性通常都属于Python的特殊方法和特殊属性,开发者可以通过重写这些方法或者直接调用这些方法来实现特殊的功能.其实前面见过的构造方 ...
- 在做nav-bar部分点击路由跳转相同地址时,控制台报错问题。
报错信息: Uncaught (in promise) NavigationDuplicated {_name: "NavigationDuplicated", name: &qu ...
- BPC成员公式
BPC可以通过成员公式,定义维度成员之间相关的计算公式,前端自动得到相应计算结果. 新建成员公式,选择对应的维度成员. 编辑维度成员的计算公式.保存后激活维度即可.
- CSS学习笔记_1
1.调用 内部样式表: css可以直接在html代码里面使用</style></style>节点.允许html代码中有两个style节点,但是起作用的是靠后的节点 如图的代码, ...
- QT无窗口状态下对键盘事件的监听
Question:最近在搞linux下的一个客户端项目,需要接收键盘事件,但是又不能有界面,这种情况怎么处理呢? int main(int argc, char *argv[]) { QApplica ...
- ElasticSearch7 设置外网访问失败
elasticsearch外网访问9200端口失败,bootstrap checks failed,the default discovery settings are unsuitable for ...
- itest(爱测试) 4.2.1 发布,开源BUG 跟踪管理 & 敏捷测试管理软件
itest 入选 2019 年度最受欢迎开源中国软件 开源工具的发展,离不开你我的支持,需要您投上宝贵的一票 去投票 itest 简介:查看简介 itest 开源敏捷测试管理,testOps 践行者 ...
- fallowing-travelvue
1. 2.Header.vue 3.Swiper.vue . 4.Icons.vue 解决了上次轮播图--分页小圆点不显示的问题,本来以为图片应该都可以,结果换了轮播长图之后,小圆点听话的显示出啦 而 ...