DELIMITER $$
USE `sigao_dftx`$$
DROP PROCEDURE IF EXISTS `pass_result`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `pass_result`(
titleName VARCHAR(5000)
)
BEGIN
DECLARE result_value VARCHAR(5000);
DECLARE user_id VARCHAR(50);
DECLARE question_id BIGINT(20);
DECLARE targetuser VARCHAR(80);
DECLARE done INT DEFAULT FALSE;
DECLARE uqCursor CURSOR FOR SELECT o.result,o.userid,o.questionid,o.targetuser FROM userquestion o,sendemailaftercompleted sm,title t WHERE o.targetuser =sm.email AND sm.titleid = t.id AND t.`name`=titleName LIMIT 300;
## 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
TRUNCATE user_topic_score;
##打开游标
OPEN uqCursor;
##开始循环
read_loop: LOOP
##提取游标里的数据
FETCH uqCursor INTO result_value,user_id,question_id,targetuser;
## 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
## 提取用户题目和答案
CALL proc_split(result_value,';',user_id,question_id,targetuser);
END LOOP;
## 关闭游标
CLOSE uqCursor;
END$$
DELIMITER ;
DELIMITER $$
USE `sigao_dftx`$$
DROP PROCEDURE IF EXISTS `proc_split`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_split`(
inputstring VARCHAR(5000),
delim VARCHAR(20),
user_id VARCHAR(50),
question_id BIGINT(20),
targetuser VARCHAR(80)
)
BEGIN
DECLARE strlen INT;
DECLARE last_index INT;
DECLARE topicId VARCHAR(50);
DECLARE resultId VARCHAR(50);
DECLARE cur_index INT;
DECLARE cur_char VARCHAR(200);
DECLARE len INT;
DECLARE T_R VARCHAR(50);
SET cur_index=1;
SET last_index=0;
SET strlen=LENGTH(inputstring);
WHILE(cur_index<=strlen) DO
BEGIN
IF SUBSTRING(inputstring FROM cur_index FOR 1)=delim OR cur_index=strlen THEN
SET len=cur_index-last_index-1;
IF cur_index=strlen THEN
SET len=len+1;
END IF;
SET T_R=SUBSTRING(inputstring FROM (last_index+1) FOR len);
SET T_R= REPLACE(T_R,'TopicId:','');
SET T_R=REPLACE(T_R,'Result:','');
SET T_R=REPLACE(T_R,';','');
SET topicId=SUBSTRING(T_R FROM 1 FOR LOCATE('$', T_R)-1);
SET resultId=SUBSTRING(T_R FROM (LOCATE('$', T_R)+1));
##select topic_Id,result_id;
##SET T_R=replace(replace(REPLACE(T_R,';',''),'TopicId:','')),'Result:','');
##INSERT INTO user_topic_score(topic_result,user_id,question_id) VALUES(SUBSTRING(inputstring FROM (last_index+1) FOR len),user_id,question_id);
INSERT INTO user_topic_score(user_id,question_id,topic_id,result_id,targetuser) VALUES(user_id,question_id,topicId,resultId,targetuser);
SET last_index=cur_index;
END IF;
SET cur_index=cur_index+1;
END;
END WHILE;
END$$
DELIMITER ;
相关推荐
除了基础的游标操作,MySQL还支持其他特性,如:嵌套游标(一个游标内部使用另一个游标)、可滚动游标(允许向前和向后移动)以及隐式游标(无需显式声明,常在存储过程中使用)。 在实际应用中,游标常常用于以下...
在“mysql存储过程_游标_项目练习”中,我们可能需要完成以下任务: 1. 创建存储过程:编写SQL语句来定义一个存储过程,包括输入参数(如果需要的话)、处理逻辑以及返回值(可选)。 2. 使用游标:在存储过程中...
MySQL 从 5.0 版本开始支持存储过程和触发器,而游标在递归树结构中非常有用。游标是 MySQL 中的一种机制,允许开发人员在存储过程和触发器中控制数据的获取和处理。 在 MySQL 中,游标是通过 DECLARE 语句定义的,...
本文旨在深入探讨MySQL中游标的概念及其使用方法,帮助读者更好地理解和掌握游标在实际开发中的应用。 #### 二、游标概述 ##### 2.1 游标的基本概念 游标是数据库系统中的一个重要概念,它可以理解为一种可以从包含...
MySQL中的动态游标是数据库处理过程中非常有用的一个特性,它允许在存储过程中逐行处理查询结果。在本示例中,我们将深入探讨如何在MySQL中使用动态游标,特别是结合存储过程来实现这一功能。 首先,创建了一个名为...
在MySQL中,游标通常与存储过程或函数一起使用,以便在循环中处理每一行数据。游标的操作包括打开、移动(如:FETCH)和关闭。 创建游标: 创建一个游标需要定义一个SELECT语句,该语句将作为游标的源。例如: ```...
总结来说,MySQL存储过程中的游标和循环机制提供了强大的数据处理能力。通过游标,我们可以逐行处理数据,结合循环结构,能够灵活地实现复杂的数据操作逻辑。在实际应用中,这些工具常用于批量插入、更新、计算统计...
在实际应用中,游标可以用于指定结果集中特定行的位置、基于当前的结果集位置检索一行或连续的几行、在结果集中修改行中的数据、对其他用户所做的数据更改定义不同的敏感性级别、以编程的方式访问数据库等。...
MySQL是世界上最流行的开源关系型数据库管理系统之一,它包含多种功能,如函数、存储过程、触发器和游标,这些功能极大地增强了数据库管理的灵活性和效率。以下是对这些概念的详细解释: 1. **MySQL函数**:MySQL...
MySQL游标是数据库管理系统中的一个重要概念,主要用于在存储过程或函数中逐行处理查询结果集。游标允许程序按需一次处理一行数据,而非一次性获取所有数据,这在处理大量数据时尤其有用,因为它可以避免一次性加载...
### MySQL数据库的关键特性详解 #### 一、索引(Index) **定义:** 索引是数据库中用于优化查询操作的一种特殊的数据结构。它本质上是表中一列或几列的值的集合及其对应的物理地址列表。 **优点:** 1. **提高检索...
MySQL触发器是数据库管理系统提供的一种机制,它允许在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行预定义的SQL语句或存储过程。这种机制在数据库设计中非常有用,因为它可以帮助确保数据的一致性和...
下面是一个MySQL存储过程中使用游标的示例代码: ```sql DELIMITER $$ CREATE PROCEDURE FetchEmployees() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE emp_id INT; DECLARE emp_name VARCHAR(255); ...
MYSQL 数据库高级应用宝典含实例(索引、视图、触发器、游标和存储过程) MYSQL 数据库高级应用宝典含实例中,涵盖了索引、视图、触发器、游标和存储过程等高级应用领域。下面我们将逐一介绍这些高级应用领域的知识点...
根据提供的文件内容,本篇实验报告主要围绕MySQL数据库中存储过程和函数的应用,涵盖了创建存储过程、函数、游标以及异常处理等高级特性。下面将详细解析报告中的每个知识点。 1. 创建存储过程 存储过程是一种在...
### MySQL 游标在批量更新和删除中的应用详解 #### 一、MySQL 游标概述 游标(Cursor)在数据库领域中是一个重要的概念,它主要用于处理查询结果集中的每一行记录,允许开发者以逐行的方式对数据进行访问和操作。...
在实际应用中,游标常用于存储过程和函数中,执行复杂的逻辑操作,如迭代处理、分步计算或逐行更新。例如,在员工薪资管理中,可以使用游标逐个计算员工的奖金,结合他们的基本薪资和提成。 总结来说,MySQL的游标...
此外,游标在MySQL中的实现也有助于我们理解数据库管理系统中程序化控制结构的设计和应用,以及如何在存储程序中处理数据流的细节。掌握游标的正确使用方法对于数据库开发者来说是必备技能之一,尤其在处理需要复杂...
### 游标与存储过程在SQL Server中的应用 #### 一、游标的使用方法 游标是数据库管理系统中用于处理查询结果集的一种机制,它允许用户逐行地访问查询结果,而不是一次返回所有数据。这对于大数据量处理尤其有用,...
下面的存储过程只是简单地查询这个表的所有记录。 ```sql CREATE PROCEDURE p1() BEGIN SELECT * FROM category; END; ``` 调用此存储过程: ```sql CALL p1(); ``` 这种情况下,存储过程直接返回所有记录。 **3.2...