CREATE DEFINER=`lifunet`@`%` PROCEDURE `proc_rank_article`(
in inter int
)
begin
declare temp_reply_article_id int;
declare temp_reply_total int default 0;
declare temp_article_good int default 0;
declare temp_article_sort int default 0;
declare done boolean;
--
declare tmp_article_cur cursor for select reply_article_id from tmp_article_table;
--
declare continue handler for not found set done=true;
drop temporary table if exists tmp_article_table;
drop temporary table if exists tmp_article_static_table;
create temporary table tmp_article_table(reply_article_id int);
create temporary table tmp_article_static_table(article_id int,good_click int,replyTotal int,article_sort int);
if(inter is not null) then
if(inter = 0) then
set inter = 7;
end if;
if(inter = 1) then
set inter = 360;
end if;
if(inter = 2) then
set inter = 30;
end if;
insert into tmp_article_table(reply_article_id) select reply_article_id from t_article where reply_article_id is not null and create_time > DATE_ADD(now(), INTERVAL -inter DAY) order by create_time desc limit 10000;
--
start transaction;
open tmp_article_cur;
tmp_article_cur_loop:loop
fetch tmp_article_cur into temp_reply_article_id;
if done then
leave tmp_article_cur_loop;
else
if(NOT EXISTS (select article_id from tmp_article_static_table where article_id = temp_reply_article_id )) then
--
select count(good_click) into temp_article_good from t_record where article_id=temp_reply_article_id and good_click is not null and create_time > DATE_ADD(now(), INTERVAL -inter DAY);
--
select count(reply_article_id) into temp_reply_total from tmp_article_table where reply_article_id=temp_reply_article_id;
-- X=
set temp_article_sort = temp_article_good + temp_reply_total;
insert into tmp_article_static_table (article_id,good_click,replyTotal,article_sort) values(temp_reply_article_id,temp_article_good,temp_reply_total,temp_article_sort);
end if;
end if;
end loop tmp_article_cur_loop;
close tmp_article_cur;
--
select * from tmp_article_static_table order by article_sort desc;
drop table tmp_article_table;
drop table tmp_article_static_table;
commit;
end if;
end;
分享到:
相关推荐
本资源结合实例实现一个复杂的存储过程,存储过程中有用到游标、临时表、循环、递归等知识,sql文件附有实例数据表创建的sql语句。
根据提供的文件信息,本文将详细解释一个MySQL存储过程的例子,其中包含了游标的使用。这个存储过程主要用于处理一批数据,涉及到日期范围内的数据处理、异常处理等。下面将逐一解析存储过程中涉及的重要知识点。 #...
"Oracle存储过程游标详解" Oracle 存储过程游标是指在 Oracle 数据库中使用游标来实现对结果集的处理和操作。游标可以分为静态游标和REF游标两种类型。静态游标是指结果集已经确实(静态定义)的游标,可以进一步...
本存储过程的目的是利用游标和临时表来实现动态查询,主要用于查询监测设备的状态及目标监测设备状态。下面我们将深入探讨存储过程的使用优势、游标的概念和使用步骤,以及在MySQL中如何实现游标。 1. 存储过程的...
MySQL的存储过程、游标和事务是数据库管理中非常重要的概念,它们在处理大量数据和实现复杂的业务逻辑时起着关键作用。以下是对这些概念的详细解释和实例分析。 **存储过程**: 存储过程是一组预编译的SQL语句,以...
### MySQL存储过程应用详解 #### 一、存储过程概述 在MySQL中,存储过程是一种预编译好的SQL脚本,可以包含复杂的逻辑控制语句、循环结构以及事务处理等功能。通过存储过程,开发者可以在数据库服务器端执行一系列...
在MySQL存储过程中,游标通常用于逐行处理结果集,但这种方式在处理大数据量时可能会导致性能下降,因为游标需要多次遍历数据,每次读取一行并执行相关操作。相比之下,创建临时表可以一次性将数据加载到内存中,...
MySQL存储过程中的游标(DECLARE)是处理查询结果集的重要工具,它允许程序逐行处理数据,而不是一次性加载所有结果。游标具有不同的模式,包括只读、不可滚动和敏感,每种模式都有其特定的应用场景。 只读模式的...
12. **返回值**:虽然MySQL的存储过程不能直接返回一个值,但可以通过OUT参数或者临时表来传递结果。 13. **视图与存储过程的结合**:存储过程可以与视图一起使用,创建复杂的业务逻辑视图,提供给用户更加友好的...
loop 游标双层嵌套循环 创建临时表, 游标
不带标识的临时表方法通过创建一个临时表存储数据,然后逐条取出并处理这些数据,直至所有数据都被处理完毕。这种方法的核心在于使用临时表结合`WHILE`循环结构来模拟游标的行为,从而避免了游标带来的性能问题。 *...
- MySQL存储过程支持游标的定义和使用,例如: ```sql DECLARE cur CURSOR FOR SELECT column FROM table; OPEN cur; FETCH cur INTO @var; CLOSE cur; ``` #### 十、安全性和权限管理 - 存储过程的安全性...
MYSQL 数据库高级应用宝典含实例(索引、视图、触发器、游标和存储过程) MYSQL 数据库高级应用宝典含实例中,涵盖了索引、视图、触发器、游标和存储过程等高级应用领域。下面我们将逐一介绍这些高级应用领域的知识点...
-- 假设我们有一个临时表tempUsers存储CSV导入的数据 CREATE TABLE tempUsers (username VARCHAR(50), password VARCHAR(50)); -- 填充tempUsers表(这里省略填充过程) DECLARE @username VARCHAR(50); DECLARE @...
在MySQL5中,存储过程(Procedure)是一种非常重要的数据库编程元素,它允许用户预先定义一组SQL语句并将其封装在一起,以便在需要时作为一个单元执行。这样不仅可以提高代码的复用性,还可以优化数据库操作的效率,...
首先,我们来谈谈MySQL存储过程中的优化策略——使用临时表代替游标。游标在处理复杂查询和逐行操作时非常有用,但它们通常会带来性能问题,因为它们需要多次与数据库交互,每次交互都会增加系统的开销。相反,临时...
- **定义**:游标可以被看作是存储查询结果的一个临时容器,通过这个容器可以按需获取查询结果中的每一行。 - **用途**:当需要对查询结果集进行多次处理时,比如循环遍历结果集中的每一行进行特定操作,此时使用...
MySQL触发器是数据库管理系统提供的一种机制,它允许在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行预定义的SQL语句或存储过程。这种机制在数据库设计中非常有用,因为它可以帮助确保数据的一致性和...
在实际应用中,你可能需要根据需求修改此存储过程,比如添加过滤条件(只在特定数据库或特定表上搜索),或者将查询结果存储到临时表或返回给调用者。 标签中的“源码”和“工具”暗示这可能是一个实用的代码片段,...