mysql存储过程和函数使用实例
1.需求:根据输入的年份,月份,和当前系统的年份比较,不满1年按1年计算,多出1年11个月也按1年计算。
2.计算得出来的使用年份,计算车辆残值。
3.存储过程
DELIMITER $$ USE `dbTest`$$ DROP PROCEDURE IF EXISTS `sp_calc_year`$$ CREATE PROCEDURE `sp_calc_year`(IN Y INT,IN M INT,OUT Diff INT)
BEGIN
#declare current date default now();
DECLARE c_y INT DEFAULT 0;
DECLARE c_m INT DEFAULT 0;
SET c_y = YEAR(NOW());
SET c_m = MONTH(NOW());
IF c_y > Y THEN
IF c_m < M THEN
SET c_y = c_y - 1;
END IF;
SET Diff = c_y - Y;
IF Diff = 0 THEN
SET Diff = 1;
END IF;
ELSE
SET Diff = 1;
END IF;
END$$ DELIMITER ;
4.调用存储过程语法
SET @p_inY=2011;
SET @p_inM=10;
SET @p_out=0;
CALL sp_calc_year(@p_inY,@p_inM,@p_out);
SELECT @p_out;
5.函数
DELIMITER $$ CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
FUNCTION `dbTest`.`sp_calc_ym`(Y INT, M INT)
RETURNS INT
/*LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'*/
BEGIN
DECLARE c_y INT DEFAULT 0;
DECLARE c_m INT DEFAULT 0;
DECLARE Diff INT DEFAULT 1;
SET c_y = YEAR(NOW());
SET c_m = MONTH(NOW());
IF c_y > Y THEN
IF c_m < M THEN
SET c_y = c_y - 1;
END IF;
SET Diff = c_y - Y;
IF Diff = 0 THEN
SET Diff = 1;
END IF;
ELSE
SET Diff = 1;
END IF;
RETURN Diff;
END$$ DELIMITER ;
6.调用函数语法
SELECT `sp_calc_ym`(2011,10);
7.综合使用
SELECT @var:=80000*POWER(0.85,2) AS "车辆残值";
SELECT reg_no,
CASE reg_no WHEN 718170554 THEN '黄色宾利,沪A55662'
WHEN 124553063 THEN '红色宾利,沪A55661'
WHEN 114480011 THEN '白色奔驰,沪N55663'
WHEN 816053337 THEN '褐色宾利,沪N55665'
WHEN 653973365 THEN '银色阿斯顿马丁,沪N55666'
WHEN 990125871 THEN '绿色阿斯顿马丁,京B55667'
WHEN 425710387 THEN '红色宝马,京B55668'
WHEN 704411338 THEN '黄色宝马,沪D55669'
WHEN 116323731 THEN '白色宝马,杭C55670'
WHEN 589618212 THEN '黑色宝马,沪D55671'
ELSE 'more' END
AS testCol ,
plate_num,
c.brand_txt AS "品牌",
c.year AS "年份",
c.month AS "月份",
c.guide_price AS "指导价",
c.suggest_price AS "建议小时价格",
c.hour_price AS "每小时价格",
c.day_price AS "天价格",
c.week_price AS "周价格" ,
c.month_price AS "月价格",
c.min_rent_time AS "最少租用时间(小时)",
c.max_rent_time AS "最长租用时间(小时)",
80000*POWER(0.85,sp_calc_ym(c.year,c.month)) AS "车辆残值"
FROM car AS c WHERE reg_no IN ('','','','','','','','','','') ORDER BY reg_no ASC;
mysql存储过程和函数使用实例的更多相关文章
- MySql存储过程与函数详解
存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句.而且,存储过程和函数是在MyS ...
- MYSQL存储过程和函数学习笔记
学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆课程笔记的综合. 1. 什么是存储过程和函数 将SQL语句放入一个集合里,然后直接调用存储过程和函数来执行已经定义好的SQL语句,通过存储过程和 ...
- Paip.断点调试MYSQL存储过程跟函数的解决方案大法
Paip.断点调试MYSQL存储过程跟函数的解决方案大法 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn ...
- Mysql存储过程和函数
Mysql存储过程和函数 基本概念: 创建存储过程和函数是指将经常使用的一组SQL语句的组合在一起,并将这些SQL语句当作一个整体存储在MySQL服务器中.例如,银行经常需要计算用户的利息.不同类别的 ...
- MySql存储过程、函数
存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句.而且,存储过程和函数是在MyS ...
- MySql存储过程与函数
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来运行 ...
- Mysql学习总结(11)——MySql存储过程与函数
摘要:存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句.而且,存储过程和函数是在 ...
- Mysql - 存储过程/自定义函数
在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...
- MySQL 存储过程和函数
概述 一提到存储过程可能就会引出另一个话题就是存储过程的优缺点,这里也不做讨论,一般别人问我我就这样回答你觉得它好你就用它.因为mysql中存储过程和函数的语法非常接近所以就放在一起,主要区别就是函数 ...
随机推荐
- mongodb 3.2存储目录结构说明
[root@hadoop1 mongodb]# tree ./data ./data |-- WiredTiger | |-- WiredTiger.lock | |-- WiredTiger.tur ...
- 4.html5中超链接
html中超链接都是通过<a>标签实现的,html5也不例外,这里就来探讨一下<a>标签. <a>元素属于文本元素,有一些私有属性或者叫局部属性.那么,相对应的还有 ...
- mysql外键设置(待测试)
外键的定义语法:[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col ...
- linux调整分区大小
查看一下当前分区情况 1 2 3 4 5 6 7 8 [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mou ...
- [DHCP服务]——一个验证DHCP原理实验(VMware)
大致实验拓扑图 DHCP Server端的配置 1. 安装DHCP # yum -y install dhcp 2. 拷贝配置文件 # /dhcpd.conf.sample /etc/dhcp/dhc ...
- python 通过urllib模块在svn中下载文件
#_*_coding:utf-8_*_ import urllib def Schedule(a,b,c): ''' a:已经下载的数据块 b:数据块的大小 c:远程文件的大小 ''' per = 1 ...
- 【收藏】Linux添加/删除用户和用户组
1.建用户: adduser phpq //新建phpq用户 passwd phpq ...
- oracle关于分区相关操作
[sql] view plaincopy 1.查询当前用户下有哪些是分区表: SELECT * FROM USER_PART_TABLES; 2.查询当前用户下有哪些分区索引: SELECT * FR ...
- NEST.net Client For Elasticsearch简单应用
NEST.net Client For Elasticsearch简单应用 由于最近的一个项目中的搜索部分要用到 Elasticsearch 来实现搜索功能,苦于英文差及该方面的系统性资料不好找,在实 ...
- volley框架 出现at com.android.volley.Request.<init>
请求json数据的时候出现这种情况: 原因: // 访问网络,初始化详情 JsonObjectRequest jr = new JsonObjectRequest(Request.Method.GET ...