mysql存储过程

MYSQL 存储过程实现类似ORACLE row_number 和 rank 的简单例子

这一生的挚爱 提交于 2019-11-27 11:36:14
row_number 实现: DELIMITER $$ USE `zhangzm`$$ DROP PROCEDURE IF EXISTS `row_number`$$ CREATE DEFINER=`root`@`%` PROCEDURE `row_number`() BEGIN DECLARE rn INT DEFAULT 0 ; DECLARE _StuId VARCHAR (5) ; DECLARE _CourseId VARCHAR (3) ; DECLARE _Score FLOAT ; DECLARE last_CourseId VARCHAR (3) ; DECLARE done TINYINT DEFAULT FALSE ; DECLARE cur CURSOR FOR SELECT `StuId`, `CourseId`, `Score` FROM `zhangzm`.`tblScore` ORDER BY `CourseId`, `Score` DESC ; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE ; DROP TABLE IF EXISTS temp_tblScore ; CREATE TEMPORARY TABLE temp_tblScore LIKE `zhangzm`.

MySQL存储过程

。_饼干妹妹 提交于 2019-11-27 04:09:41
CREATE DEFINER = `root`@` % ` PROCEDURE `p_phone_comments`() BEGIN #################################自动计算手机样本内容属于哪一类型的评价因子的过程############################################# # @author Ivan 2862099249 @qq .com # @create 2014年12月17日 下午12: 20 : 44 # @update xxxx年xx月xx日 xxxxxxx by xxx #################################自动计算手机样本内容属于哪一类型的评价因子的过程############################################# DECLARE p_typ_id int default 0 ; DECLARE p_keyword varchar ( 5000 ) default '' ; DECLARE done INT DEFAULT 0 ; DECLARE p_contents varchar ( 5000 ) default '' ; DECLARE p_id char ( 36 ) default '' ; DECLARE p_count int

mysql存储过程中使用临时表

不问归期 提交于 2019-11-27 01:39:43
当工作在很大的表上时,您可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后多这些表运行查询。   创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:   CREATE TEMPORARY TABLE tmp_table (   name VARCHAR(10) NOT NULL,   value INTEGER NOT NULL   )   临时表将在您连接MySQL期间存在。当您断开时,MySQL将自动删除表并释放所用的空间。当然您能够在仍然连接的时候删除表并释放空间。   DROP TABLE tmp_table   假如在您创建名为tmp_table临时表时名为tmp_table的表在数据库中已存在,临时表将有必要屏蔽(隐藏)非临时表 tmp_table。   假如您声明临时表是个HEAP表,MySQL也允许您指定在内存中创建他:   CREATE TEMPORARY TABLE tmp_table (   name VARCHAR(10) NOT NULL,   value INTEGER NOT NULL   ) TYPE = HEAP   因为HEAP表存储在内存中,您对他运行的查询可能比磁盘上的临时表快些。然而

MySQL存储过程中变量的类型

独自空忆成欢 提交于 2019-11-27 01:34:05
变量类型 参数变量 count int,int age,cout cc varchar(32), inout tt int(11) 过程变量 BEGIN DECLARE a,b,c INT DEFAULT 0; #定义以及定义默认值 SET a = 100; #赋值 : 限于自身过程使用 SELECT a,b,c; END 会话变量 有效范围 : 全部会话内有效(包括子会话) 用call调用子过程时 SET @bb = 100 #定义和赋值 全局变量 不能定义,只能使用,又称系统变量 SET @@autocommit = 1; 来源: https://blog.csdn.net/qq_21480147/article/details/99230756

mysql 求时间段平均值

大兔子大兔子 提交于 2019-11-27 01:08:16
考虑下面的需求,在一段时间内,间隔一段时间,取一个平均值,把所有的平均值取出来,怎么办? 思路:在存储过程中,拼接sql语句。根据起始时间和结束时间,while循环每次加一段时间。 DROP PROCEDURE IF EXISTS `get_avg`; DELIMITER ;; CREATE DEFINER=`root`@`%` PROCEDURE `get_avg`(in iStartTime datetime, in iEndTime datetime) BEGIN declare vSql varchar(10240) default ''; declare vNextTime datetime; while(iStartTime < iEndTime) do -- 每次加一个小时 set vNextTime = date_add(iStartTime,interval 3600 second); -- 单引号是特殊字符,要表示单引号,使用 '' 进行转义 set vSql = concat(vSql,'union select 100, avg(`value`) from t1 where time between ''',iStartTime,''' and ''', vNextTime,''' '); set iStartTime = vNextTime; end

mysql 树形结构查询(存储过程)

喜欢而已 提交于 2019-11-26 19:04:25
就用数据数据库表地址数据(中国地区) 来说吧(用Windows 请使用 gbk !!) 可直接运行(去除注解) 存储过程: DELIMITER // drop procedure if exists findLChild // /* iid 递归父节点 , layer 允许递归深度 */ CREATE PROCEDURE findLChild(iid bigint ( 20 ),layer bigint ( 20 )) BEGIN /* 创建接受查询的临时表 */ create temporary table if not exists tmp_table(id bigint ( 20 ),name varchar ( 50 )) ENGINE = InnoDB DEFAULT CHARSET = utf8; /* 最高允许递归数 */ SET @@max_sp_recursion_depth = 99 ; call iterative(iid,layer); /* 核心数据收集 */ select * from tmp_table ; /* 展现 */ drop temporary table if exists tmp_table ; /* 删除临时表 */ END ; // DELIMITER ; DELIMITER // drop procedure if exists

MySql、PostgreSql、SqlServer三种数据库的造数存储过程实例

喜你入骨 提交于 2019-11-26 16:28:32
一、MySql造数存储过程实例 mysql造数 -- 第一步,创建临时表 CREATE TEMPORARY TABLE IF NOT EXISTS tmp_table ( `id` VARCHAR (64) NOT NULL, `second_id` VARCHAR (64) NOT NULL, `total_amount` DOUBLE (18, 2) DEFAULT NULL, `total_day` INT (11) DEFAULT NULL, `create_time` datetime NOT NULL, `edit_time` datetime DEFAULT NULL, `editor` VARCHAR (50) DEFAULT NULL, `status` INT (11) NOT NULL DEFAULT '0' ) DEFAULT CHARSET = utf8mb4; -- 第二步,使用前先清空临时表 TRUNCATE TABLE tmp_table; -- 第三步,定义存储过程 #定义存储过程 delimiter ##num_limit 要插入数据的数量,rand_limit 最大随机的数值 DROP PROCEDURE IF EXISTS insert_test_val ; CREATE PROCEDURE insert_test_val (IN num

MYSQL定时执行存储过程实例

蹲街弑〆低调 提交于 2019-11-26 11:14:51
重新定义mysql命令行结束符为//,命令行创建存储过程需要。 delimiter // MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件、定时任务机制,在指定的时间单元内执行特定的任务,因此今后一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。 要查看当前是否已开启事件调度器,可执行如下SQL: SHOW VARIABLES LIKE 'event_scheduler'; 或 SELECT @@event_scheduler; 或 SHOW PROCESSLIST; 若显示: +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | OFF | +-----------------+-------+ 则可执行 SET GLOBAL event_scheduler = 1; 或 SET GLOBAL event_scheduler = ON; 来开启,也可以直接在启动命令加上“–event_scheduler=1”,例如: mysqld ... --event_scheduler=1 my.ini or my.cnf 中的 [mysqld] 添加 event_scheduler=ON 创建事件