MYSQL 存储过程、函数、临时表、游标
创建函数
因为我们平时经常需要创建不同日期的数据,以模拟的场景,覆盖更多的用例,所以这里写了一个返回随机日期的demo。大家可以自行扩展。
DROP FUNCTION IF EXISTS milan_get_rand_time;
CREATE FUNCTION milan_get_rand_time(type VARCHAR(50)) RETURNS VARCHAR(20)
BEGIN
DECLARE _day INT DEFAULT (FLOOR(RAND() * 60)); -- 随机天数 60天以内随机天数
DECLARE _hour INT DEFAULT (FLOOR(RAND() * 24)); -- 随机小时
DECLARE _minute INT DEFAULT (FLOOR(RAND() * 60));-- 随机分
DECLARE _second INT DEFAULT (FLOOR(RAND() * 60));-- 随机秒
DECLARE _myday VARCHAR(20);
IF type = 'before' THEN
set _day =_day;
ELSEIF type='after' THEN
SET _day =-1*_day;
ELSE
SET _day=0;
END IF; SET _myday = DATE_FORMAT(DATE_SUB(NOW(),INTERVAL _day DAY) ,'%Y-%m-%d'); -- 获取一个随机的日期
-- SET _myday = DATE_SUB(CURRENT_DATE(),INTERVAL _day DAY); -- 获取一个随机的日期
SET _myday = CONCAT(_myday,' ',LPAD(_hour,2,0),':',LPAD(_minute,2,0),':',LPAD(_second,2,0)); -- 在这个日期上加上时分秒
RETURN _myday;
END
调用
SELECT milan_get_rand_time('after'); -- 返回 2018-03-02 22:07:14
SELECT milan_get_rand_time('before'); -- 2018-02-02 03:17:10
-- 补位函数
-- 向前补位
select LPAD(1,3,0); --
-- 向后补位
select RPAD(1,3,0); --
创建存储过程
每次获取一条随机数据,插入到表中。用select。。。into。语句。因为milan_table的game_id是主键,为了防止重复写入报错,所以用了ignore忽略错误。
DROP PROCEDURE IF EXISTS milan_test;
CREATE PROCEDURE milan_test(in add_count int,OUT data_count INT) -- in 入参 out 出参
BEGIN
DECLARE _game_id BIGINT;
DECLARE _game_name VARCHAR(50);
-- DELETE FROM milan_table;
WHILE add_count > 0 DO
SELECT game_id,game_name INTO _game_id,_game_name from t_game ORDER BY RAND() LIMIT 1;
INSERT IGNORE INTO milan_table VALUES (_game_id,_game_name,milan_get_rand_time('before'));
SET add_count=add_count-1;
END WHILE;
SET data_count =(select count(*) from milan_table);
SELECT * from milan_table;
end -- 调用:
SET @count =NULL;
CALL milan_test(5,@count);
SELECT @count;
根据游标写入:
DROP PROCEDURE if EXISTS curtest;
CREATE PROCEDURE curtest()
BEGIN
DECLARE _uid INT;
DECLARE _account VARCHAR(20);
DECLARE done INT DEFAULT FALSE;
-- 遍历数据结束标志
DECLARE cur CURSOR FOR SELECT uid,account FROM tmm_tmp_testaccount ;
-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO _uid,_account;
IF done THEN
LEAVE read_loop;
END IF;
UPDATE tmm_tmp_testaccount set `desc` = NULL where uid =_uid;
END LOOP;
CLOSE cur;
END
跳出存储过程,相当于return语句:
label:BEGIN
DECLARE _uid int DEFAULT (select uid from tmm_tmp_testaccount where flag =_flag limit 1);
IF ISNULL(_uid) THEN
leave label;
END IF;
END
临时表
DROP PROCEDURE if EXISTS temp_table;
CREATE PROCEDURE temp_table()
BEGIN
DROP TABLE if EXISTS temp_table;
CREATE TEMPORARY TABLE temp_table(
uid INT NULL,
n VARCHAR(10) NULL
);
INSERT INTO temp_table (uid,n) VALUES ('','milan1');
INSERT INTO temp_table (uid,n) VALUES ('','milan2');
select * from temp_table;
END
MYSQL 存储过程、函数、临时表、游标的更多相关文章
- MySQL中函数、游标、事件、视图
MySQL中函数.游标.事件.视图基本应用举例(代码) MySQL中function用户自定义函数c,fun,fun是面向过程的实现方式只能传入参数,或不传入参数,不能传出参数,必有返回值函数中是不能 ...
- MySQL 存储过程 函数 routine 权限
MySQL 存储过程 函数 routine 权限 Table of Contents 1. mysql存储过程/函数权限 1.1. 相关对象操作权限检查 1.2. 执行权限 1 mysql存储过程/函 ...
- mysql 存储过程中使用游标中使用临时表可以替代数组效果
mysql不支持数组.但有时候需要组合几张表的数据,在存储过程中,经过比较复杂的运算获取结果直接输出给调用方,比如符合条件的几张表的某些字段的组合计算,mysql临时表可以解决这个问题.临时表:只有在 ...
- mysql 存储过程 函数 触发器
mysql存储过程与函数 存储过程下载 demo mysql> delimiter // -- 这里//为修改默认分隔符: mysql> CREATE PROCEDURE simplep ...
- 菜鸟使用MySQL存储过程and临时表,供新手参考,请高手斧正
因为公司最近的一个项目,第一次用到了MySQL(5.10版本),之前听传说MySQL很厉害的样子,因为开源而神奇,但是现在用起来, 感觉并不好啊!我知道是我水平太down,呜呜呜,请各路神仙略施小技, ...
- MySQL存储过程和临时表
MySQL创建存储过程 MySQL中,创建存储过程的基本形式如下: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...
- MySQL中函数、游标、事件、视图基本应用举例(代码)
MySQL中function用户自定义函数c,fun,fun是面向过程的实现方式只能传入参数,或不传入参数,不能传出参数,必有返回值函数中是不能有create table drop table之类的语 ...
- mysql存储过程中使用游标
用户变量一般以@开头,作用于全局范围 局部变量需用 declare 定义格式为 declare 变量名 数据类型 [default value]; mysql 数据类型有 int ,float,dat ...
- MySql存储过程—7、游标(Cursor)
|字号 订阅 1.游标的作用及属性 游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作:游标有下面这些属性: a.游标是只读的,也就是不能更新它: b.游标是不能滚动的,也就是只能 ...
- Paip.断点调试MYSQL存储过程跟函数的解决方案大法
Paip.断点调试MYSQL存储过程跟函数的解决方案大法 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn ...
随机推荐
- parceljs 基本使用———又一个前端构建工具
备注: 又一个新的前端构建工具 1. 安装 yarn global add parcel-bundler 2. 初始化项目 yarn init -y 3. 基本代码 a. 创建 index. ...
- IMAP简单研究
IMAP的相关详细介绍: http://www.imapwiki.org/ClientImplementationhttp://tools.ietf.org/html/rfc3501 1.连接服务器 ...
- 窗口点击模拟a
[问题描述] 在计算机屏幕上,有N 个窗口.窗口的边界上的点也属于该窗口.窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容.当你用鼠标点击屏幕上一个点的时候,若其在窗口 ...
- Python库-BeautifulSoup
sp = BeautifulSoup.bs4.BeautifulSoup(html.text,"html.parser") 方法 1.sp.title 返回网页标题 2.sp.te ...
- Hibernate学习9—检索策略
本章,采用Class和Student —— 1 对 多的关系: Student.java: package com.cy.model; public class Student { priv ...
- 命令行创建2003的IP安全策略
IP安全策略从win2k到2003都有的,图形界面的没什么好说的,如何在命令行下控制IPSec呢?win2k的方法在Do All in Cmd Shell有介绍.这里就拿win2003做例子吧,毕 ...
- mysql的约束
SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句). (1)NOT NULL约 ...
- ubuntu下面搭建SolrCloud集群
首先要先把ubuntu环境搭建好,配置好静态IP,我这边配置的是3台机子,solr搭建集群至少是2台. 192.168.0.15 主机 192.168.0.16 从机 192.168.0.17 ...
- 查询oracle安装过补丁没有
[oracle@root ~]$ opatch lsinventoryInvoking OPatch 10.2.0.1.0 Oracle interim Patch Installer version ...
- PHP中的traits简单理解
Traits可以理解为一组能被不同的类都能调用到的方法集合,但Traits不是类!不能被实例化.先来例子看下语法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ...