`

记录我第一写存储过程

 
阅读更多
DELIMITER $$

USE `jshoper3x`$$

DROP PROCEDURE IF EXISTS `pro_s_jshop_active_data_count`$$

CREATE DEFINER=`root`@`%` PROCEDURE `pro_s_jshop_active_data_count`()
BEGIN
	
	
	DECLARE jshopNumber VARCHAR(36) DEFAULT NULL;
	DECLARE maintainerJobnumber VARCHAR(20) DEFAULT NULL;
	DECLARE jshopState INT DEFAULT 0;
	DECLARE jshopName VARCHAR(100) DEFAULT NULL;
	DECLARE dayActive DOUBLE(10,2) DEFAULT 0.0;
	/*Login,Publish,Update计数器*/
	DECLARE loginCount INT DEFAULT 0;
	DECLARE publishCount INT DEFAULT 0;
	DECLARE updateCount INT DEFAULT 0;
	
	DECLARE contenttype VARCHAR(20) DEFAULT NULL;
	DECLARE finish INT DEFAULT 0;
	DECLARE membernumber VARCHAR(36) DEFAULT NULL;
	DECLARE visiturl VARCHAR(255) DEFAULT NULL;
	DECLARE actiontype VARCHAR(20) DEFAULT NULL;
	DECLARE rs CURSOR FOR SELECT DISTINCT l.user_number,l.url FROM s_log_data_info AS l WHERE l.gmt_create >= DATE_SUB(now(),INTERVAL 1 DAY);
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET finish=1;
	OPEN rs;
		myloop:LOOP
			FETCH rs INTO membernumber,visiturl;
				IF finish =1 THEN
					LEAVE myloop;
				END IF;
				/*比对当前的日志表中的url是否在url映射表中并获取对应的操作类型*/
				SELECT sui.action_type FROM s_urlmapping_info AS sui WHERE uri IN(SELECT  SUBSTRING_INDEX(visiturl,'?',1)) INTO actiontype;
				IF(actiontype='login') THEN 
						/*如果是login类型就根据当前的membernumber,过去一天,和url的比对来统计日志中当前会员login动作的记录数*/
						SELECT COUNT(*) FROM s_log_data_info AS s where SUBSTRING_INDEX(s.url,'?',1) IN(SELECT SUBSTRING_INDEX(visiturl,'?',1)) 
							AND s.gmt_create >= DATE_SUB(now(),INTERVAL 1 DAY) AND s.user_number=membernumber INTO loginCount;
				END IF;
				IF(actiontype='publish') THEN
						/*如果是publish类型就根据当前的membernumber,过去一天,和url的比对来统计日志中当前会员publish动作的记录数*/
						SELECT COUNT(*) FROM s_log_data_info AS s where SUBSTRING_INDEX(s.url,'?',1) IN(SELECT SUBSTRING_INDEX(visiturl,'?',1)) 
							AND s.gmt_create >= DATE_SUB(now(),INTERVAL 1 DAY) AND s.user_number=membernumber INTO publishCount;
				END IF;
				IF(actiontype='update') THEN
						/*如果是update类型就根据当前的membernumber,过去一天,和url的比对来统计日志中当前会员update动作的记录数*/
						SELECT COUNT(*) FROM s_log_data_info AS s where SUBSTRING_INDEX(s.url,'?',1) IN(SELECT SUBSTRING_INDEX(visiturl,'?',1)) 
							AND s.gmt_create >= DATE_SUB(now(),INTERVAL 1 DAY) AND s.user_number=membernumber INTO updateCount;
				END IF;	

				/*获取当前会员管理的店铺唯一编号*/
				SELECT ma.jshop_number FROM jshop_account AS ma WHERE ma.member_number=membernumber INTO jshopNumber;
				/*获取当前会员的维护人*/
				SELECT  DISTINCT cr.maintainer_jobnumber FROM customer_relationship AS cr WHERE cr.jshop_number=jshopNumber INTO maintainerJobnumber;
				/*获取当前用户的店铺的探点类型*/
				SELECT td.state FROM tandian AS td WHERE td.jshop_number=jshopNumber INTO jshopState;
				/*获取当前会员的店铺名称*/
				SELECT m.jshop_name  FROM jshop AS m WHERE m.number=jshopNumber INTO jshopName;
				
				IF(jshopState=2) THEN
					SET dayActive=(loginCount*0.7)+(publishCount*0.3);
				END IF;
				IF(jshopState=3) THEN
					SET dayActive=(loginCount*0.7)+(publishCount*0.2)+(updateCount*0.1);
				END IF;
				IF(jshopState=4) THEN
					SET dayActive=(loginCount*0.7)+(publishCount*0.2)+(updateCount*0.1);
				END IF;

				INSERT INTO s_active_data_info(`jshop_number`,`maintainer_jobnumber`,`tandian_state`,`jshop_name`,`day_active`,`gmt_create`) 
					VALUES(jshopNumber,maintainerJobnumber,jshopState,jshopName,dayActive,now());
				
	END LOOP myLoop; 
	CLOSE rs;
	END$$
DELIMITER ;
call pro_s_jshop_active_data_count;
	 

 

只是一段代码而已

分享到:
评论

相关推荐

    手写存储过程分页.txt

    - `@PageIndex`:当前页码,默认为第一页(1)。 - `@doCount`:是否返回总记录数,0表示不返回,非0表示返回。 - `@OrderType`:排序类型,0表示升序,非0表示降序。 - `@strWhere`:过滤条件(需带'where'...

    oracle分页查询并返回总记录数据存储过程

    1. **ROWNUM 的限制**:ROWNUM 仅在查询结果的第一行进行计算,因此需要先使用子查询为每一行添加行号。 2. **性能优化**:在实际应用中,如果查询涉及复杂的连接或过滤条件,考虑使用索引来优化查询性能。 3. **...

    实验9 存储过程的创建和使用

    实验内容的第一部分是创建带输入参数的存储过程`proc_St`。这个过程接收两个参数,即学号(@SSno)和姓名(@SSname),并检查数据库中是否存在匹配的记录。如果找到,它将返回该学生的信息和选课信息;否则,它会输出...

    数据库实验报告-存储过程、触发器

    存储过程是数据库中一组预编译的SQL语句,它可以接收参数,执行特定任务,并返回结果。其优点包括: 1. 提高性能:存储过程在首次编译后,会缓存执行计划,多次调用时无需再次解析,从而提高执行速度。 2. 减少网络...

    VB6.0 调用存储过程的例子(方法一)

    在这个例子中,`Execute`方法将返回一个记录集对象,我们可以进一步处理这个记录集以获取存储过程的结果。 #### 三、异常处理 为了确保程序的健壮性,我们还需要考虑异常处理。可以使用`On Error GoTo ErrHandler`...

    不通过写SQL存储过程,在程序中实现存储过程分页!!

    例如,如果我们在第3页,每页显示10条记录,那么我们实际需要查询的是从第20条((3-1) * 10 + 1)到第30条记录。 在不使用存储过程的情况下,我们可以在应用程序的代码中直接构建SQL查询语句。以下是一个在.NET中...

    sysbase 存储过程实例

    1. **性能提升**:存储过程是预编译的,这意味着它们在第一次执行时会被分析并转化为可执行代码存储在数据库中。之后再次执行时,可以直接使用已编译的版本,提高了执行效率。 2. **本地数据访问**:由于存储过程和...

    存储过过程介绍,简单的存储过程

    1. **执行效率高**:存储过程仅在创建时被编译一次,在后续每次执行时直接使用已编译好的代码,减少了编译时间,提高了执行速度。 2. **减少网络流量**:相比直接发送多条SQL命令,调用存储过程只需发送一个过程名,...

    数据库方面存储过程教程

    当第一次创建存储过程时,数据库服务器会对其进行编译,之后每次调用时都会使用已编译的版本,从而显著提高了执行效率。存储过程可以接受输入参数,并返回输出结果或状态值,使得它可以灵活地与其他应用程序集成。 ...

    MYSQL分页存储过程

    该存储过程与前一种非常相似,只是LIMIT子句中的第二参数从20变为了5,意味着每页只返回5条记录。 ### 总结 通过上述示例,我们可以看到,使用MySQL存储过程实现分页查询不仅能够提高查询效率,还能简化应用程序...

    高效分页存储过程过程

    - 对于第一页(`@PageIndex`=1),直接使用`TOP`关键字获取前`@PageSize`条记录。 - 对于非第一页,构建更复杂的SQL语句,使用子查询来找到当前页的起始记录,并从中获取下`@PageSize`条记录。 - **SQL语句构造**...

    MySql 分页存储过程以及代码调用

    然而,随着数据量的增长,直接使用OFFSET进行分页可能会变得效率低下,因为MySQL需要遍历从第一条记录到OFFSET指定的位置,这在大数据量下极其耗时。为了解决这个问题,我们可以利用MySQL的ROW_NUMBER()函数或者自增...

    存储过程在企业中的应用:第一讲 存储过程简介

    ### 存储过程在企业中的应用:第一讲 存储过程简介 #### 一、存储过程概述 存储过程是数据库中预编译的一组SQL语句集合,可以在数据库服务器上执行,以完成特定功能。存储过程是数据库系统的重要组成部分,在企业...

    mysql存储过程实现分页

    此次调用返回第1页的5条记录(假设每页显示5条记录),并且查询的字段包括`id`和`name`。 #### 总结 通过上述存储过程,我们可以轻松地实现MySQL中的分页功能。这种方法不仅提高了代码的复用性,还增强了代码的可...

    完美翻页存储过程实例

    1. **效率**:存储过程应尽量减少数据库的IO操作,避免全表扫描,利用索引优化查询。如果数据有排序需求,考虑在索引中包含排序字段。 2. **动态计算总页数**:根据数据总量和每页记录数动态计算总页数,以便为用户...

    SQL Server存储过程基本语法

    第一部分直接使用 `SELECT` 语句将字符串 `'张三'` 赋值给 `@user1`;第二部分则通过查询表 `ST_User` 中 `ID` 为 1 的记录中的 `Name` 字段值赋值给 `@user2`。 ##### 3. 使用 UPDATE 语句赋值 ```sql DECLARE @...

    MySQL实验报告5(存储过程与函数)(1)(1).pdf

    1. 创建存储过程 存储过程是一种在数据库中定义并保存起来的可以被调用的子程序。它可以通过一个指定的名字来执行,可以有输入参数和输出参数。在报告中提到了创建了两个存储过程:count_sch5和count_sch2。它们分别...

    ORACLE分页存储过程

    在分页存储过程中,主要理解了变量的动态赋值和输入输出参数的使用就非常简单了 下面为调用方法: var c_Preccount number; var c_Ppagecount number; var c_cur refcursor; exec proc_SpPag(1,'SELECT * FROM T_...

    oracle存储过程

    第一、大大提高效率。存储过程本身的执行速度非常快,而且,调用存储过程可以大大减少同数据库的交互次数。 第二、提高安全性。假如将SQL语句混合在ASP代码中,一旦代码失密,同时也就意味着库结构失密。 第三、...

Global site tag (gtag.js) - Google Analytics