mysql中存储过程学习
2015-06-06 10:47
726 查看
实例:获取登录、登出、操作日志、命令日志(从系统日志表查询,命令日志表查询结过存储到临时表中,得到所有的日志,然后按条件进行筛选)
create function getLog(uname VARCHARACTER(200),startTime datetime,endTime datetime,logtype VARCHAR(2),logremark
VARCHAR(200),page int(11),pagesize int(11),out total int)
BEGIN
DECLARE t_item VARCHAR(1);
drop table if exists t;
/**--创建临时表-**/
CREATE TEMPORARY TABLE t(
userid VARCHARACTER(20),
username VARCHARACTER(100),
time datetime ,
remark VARCHARACTER(512),
type VARCHAR(1)
);
/**-将systemlog、command_log表数据插入到临时表中-**/
set t_item = 1; /*--登入--*/
insert into t(`userid` ,`username`,`time`,`remark`,`type`)
select s.userid,m_user.username,s.time,s.remark,t_item from systemlog s left join m_user on m_user.userid=s.userid where s.operation="登录";
set t_item = 2; /*--登出--*/
insert into t(`userid` ,`username`,`time`,`remark`,`type`)
select s.userid,m_user.username,s.time,s.remark,t_item from systemlog s left join m_user on m_user.userid=s.userid where s.operation="注销";
set t_item = 3;/*--操作日志--*/
insert into t(`userid` ,`username`,`time`,`remark`,`type`)
select s.userid,m_user.username,s.time,s.remark,t_item from systemlog s left join m_user on m_user.userid=s.userid where s.operation!="登录" and s.operation!="注销";
set t_item = 4;/*--命令日志--*/
insert into t(`userid` ,`username`,`time`,`remark`,`type`) select c.userid,m_user.username,c.send_command_dt,c.send_command_comment,t_item from command_log c left join m_user on m_user.userid=c.userid ;
SELECT count(*) INTO total FROM T left join m_user on m_user.userid=T.userid where T.type like concat('%',logtype,'%') and m_user.username like concat('%',uname,'%') and T.time BETWEEN startTime and endTime and T.remark like concat('%',logremark,'%');
/**--查询日志-**/
SELECT T.userid,m_user.username,T.time,T.remark,T.type,total FROM T left join m_user on m_user.userid=T.userid where T.type like concat('%',logtype,'%') and m_user.username like concat('%',uname,'
4000
%') and T.time BETWEEN
startTime and endTime and T.remark like concat('%',logremark,'%') order by T.time desc limit page,pagesize;
END
定义与使用变量时需要注意以下几点:
◆ DECLARE语句必须用在DEGIN…END语句块中,并且必须出现在DEGIN…END语句块的最前面,即出现在其他语句之前。
◆ DECLARE定义的变量的作用范围仅限于DECLARE语句所在的DEGIN…END块内及嵌套在该块内的其他DEGIN…END块。
◆ 存储过程中的变量名不区分大小写。
定义后的变量采用SET语句进行赋值,语法格式如下:
SET var_name = expr [,var_name = expr] ...
其中,var_name为变量名,expr为值或者返回值的表达式,可以使任何MySQL支持的返回值的表达式。一次可以为多个变量赋值,多个“变量名=值”对之间以逗号“,”隔开。 (摘录)
create function getLog(uname VARCHARACTER(200),startTime datetime,endTime datetime,logtype VARCHAR(2),logremark
VARCHAR(200),page int(11),pagesize int(11),out total int)
BEGIN
DECLARE t_item VARCHAR(1);
drop table if exists t;
/**--创建临时表-**/
CREATE TEMPORARY TABLE t(
userid VARCHARACTER(20),
username VARCHARACTER(100),
time datetime ,
remark VARCHARACTER(512),
type VARCHAR(1)
);
/**-将systemlog、command_log表数据插入到临时表中-**/
set t_item = 1; /*--登入--*/
insert into t(`userid` ,`username`,`time`,`remark`,`type`)
select s.userid,m_user.username,s.time,s.remark,t_item from systemlog s left join m_user on m_user.userid=s.userid where s.operation="登录";
set t_item = 2; /*--登出--*/
insert into t(`userid` ,`username`,`time`,`remark`,`type`)
select s.userid,m_user.username,s.time,s.remark,t_item from systemlog s left join m_user on m_user.userid=s.userid where s.operation="注销";
set t_item = 3;/*--操作日志--*/
insert into t(`userid` ,`username`,`time`,`remark`,`type`)
select s.userid,m_user.username,s.time,s.remark,t_item from systemlog s left join m_user on m_user.userid=s.userid where s.operation!="登录" and s.operation!="注销";
set t_item = 4;/*--命令日志--*/
insert into t(`userid` ,`username`,`time`,`remark`,`type`) select c.userid,m_user.username,c.send_command_dt,c.send_command_comment,t_item from command_log c left join m_user on m_user.userid=c.userid ;
SELECT count(*) INTO total FROM T left join m_user on m_user.userid=T.userid where T.type like concat('%',logtype,'%') and m_user.username like concat('%',uname,'%') and T.time BETWEEN startTime and endTime and T.remark like concat('%',logremark,'%');
/**--查询日志-**/
SELECT T.userid,m_user.username,T.time,T.remark,T.type,total FROM T left join m_user on m_user.userid=T.userid where T.type like concat('%',logtype,'%') and m_user.username like concat('%',uname,'
4000
%') and T.time BETWEEN
startTime and endTime and T.remark like concat('%',logremark,'%') order by T.time desc limit page,pagesize;
END
定义与使用变量时需要注意以下几点:
◆ DECLARE语句必须用在DEGIN…END语句块中,并且必须出现在DEGIN…END语句块的最前面,即出现在其他语句之前。
◆ DECLARE定义的变量的作用范围仅限于DECLARE语句所在的DEGIN…END块内及嵌套在该块内的其他DEGIN…END块。
◆ 存储过程中的变量名不区分大小写。
定义后的变量采用SET语句进行赋值,语法格式如下:
SET var_name = expr [,var_name = expr] ...
其中,var_name为变量名,expr为值或者返回值的表达式,可以使任何MySQL支持的返回值的表达式。一次可以为多个变量赋值,多个“变量名=值”对之间以逗号“,”隔开。 (摘录)
相关文章推荐
- MySQL 自定义函数
- mysql导入数据库奇怪的问题
- 在mysql中统计每人每天num总和
- mysql的常用语句
- debian安装Mysql
- 免安装Mysql配置过程
- mysql数据库delete数据时不支持表别名
- MySQLdb模块用法实例
- MySQL客户端输出窗口显示中文乱码问题解决办法
- MySQL的数据类型
- MySQL的基础操作
- 如何添加".Net Framework Data Provider for MySQL"配置信息到目标主机中?
- mysql数据库yum安装后默认装到 /var/lib/mysql下,手动换存储目录。
- MySql技术内幕-读书笔记1
- 配置mysql5.5主从服务器(转)
- MySQL安装与问题
- Hive无法使用DDL/return code 1错误/MetaStore错误/
- mysql 慢查询表记录开启
- mysql 并行数据库与分区(Partition)
- 从MySql中查出来的时间数据后面多了.0的问题