CREATE PROCEDURE `Proc_ExtRmData`()
BEGIN
-- 需要定义接收游标数据的变量
DECLARE v_BiotopeID Varchar(36);
DECLARE v_BuildingID Varchar(36);
DECLARE v_UnitID Varchar(36);
DECLARE v_UnitNo int(1);
DECLARE v_HouseID Varchar(36);
DECLARE v_RoomID Varchar(40);
DECLARE v_RoomName Varchar(36);
DECLARE v_FloorNo int(1);
DECLARE v_FloorArea int(2);
DECLARE v_InsideArea int(2);
DECLARE v_ChargeArea int(2);
DECLARE v_HouseType Varchar(16);
DECLARE v_Direction Varchar(8);
DECLARE v_HouseholdCount int(1);
DECLARE v_Balance FLOAT(8,2);
DECLARE v_FeeTypeID Varchar(36);
DECLARE v_FeeType Varchar(36);
DECLARE v_HouseKeeperID Varchar(36);
DECLARE v_PaFlag int(1);
DECLARE v_State Varchar(8);
DECLARE v_UseType Varchar(8);
DECLARE v_RentType Varchar(8);
DECLARE v_LiveFlag int(1);
DECLARE v_UseTypeCode int(1);
DECLARE v_RentTypeCode int(1);
-- 遍历数据结束标志
DECLARE done INT DEFAULT FALSE;
-- 游标
DECLARE cur CURSOR FOR
SELECT
b.BiotopeID,b.BuildingID,u.BuildingUnitID,u.UnitNo,r.RoomID,r.RoomNo,r.Layer,
r.AreaBuild,r.AreaUse,r.AreaFee,r.HouseType,r.TowardTo,r.PeopleNumber,
r.Money,r.FeeTypeID,r.FeeType,r.WorkerID,r.IsCheckManager,r.State,r.UseType,r.RentType
From Etl_Biotope as a, Etl_Building as b, Etl_Unit as u, tblRoom as r
where (a.BioID='LE34F235') and (a.BiotopeID=b.BiotopeID) and (b.BuildingID=u.BuildingID) and (u.UnitID=r.Unit);
-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN cur;
-- 开始循环
read_loop: LOOP
-- 提取游标里的数据,这里只有一个,多个的话也一样;
FETCH cur INTO v_BiotopeID,v_BuildingID,v_UnitID,v_UnitNo,v_RoomID,v_RoomName,v_FloorNo,
v_FloorArea,v_InsideArea,v_ChargeArea,v_HouseType,v_Direction,v_HouseholdCount,
v_Balance,v_FeeTypeID,v_FeeType,v_HouseKeeperID,v_PaFlag,v_State,v_UseType,v_RentType;
-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
-- 这里做你想做的循环的事件
set v_HouseID = lower(substr(v_RoomID,2,36));
CASE v_State
WHEN '登记' THEN set v_LiveFlag = 0;
WHEN '未住' THEN set v_LiveFlag = 1;
WHEN '已住' THEN set v_LiveFlag = 2;
WHEN '已租' THEN set v_LiveFlag = 3;
ELSE set v_LiveFlag = 1;
END CASE;
IF (v_LiveFlag = 0) or (v_LiveFlag = 1) or (v_UseType='临建')
THEN set v_UseTypeCode=0;
ELSEIF (v_UseType='住宅')
THEN set v_UseTypeCode=1;
ELSE set v_UseTypeCode=2;
END IF;
INSERT INTO Etl_House
(BiotopeID,BuildingID,UnitID,UnitNo,HouseID,RoomID,RoomName,FloorNo,
FloorArea,InsideArea,ChargeArea,HouseType,Direction,HouseholdCount,
Balance,FeeTypeID,FeeType,HouseKeeperID,PaFlag,LiveFlag,UseType)
VALUES (v_BiotopeID,v_BuildingID,v_UnitID,v_UnitNo,v_HouseID,v_RoomID,v_RoomName,v_FloorNo,
v_FloorArea,v_InsideArea,v_ChargeArea,v_HouseType,v_Direction,v_HouseholdCount,
v_Balance,v_FeeTypeID,v_FeeType,v_HouseKeeperID,v_PaFlag,v_LiveFlag,v_UseTypeCode);
END LOOP;
-- 关闭游标
CLOSE cur;
END
分享到:
相关推荐
MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...
mysql 数据库已存储过程插入一千万条测试数据!利用项目即将上限需要,可以完全系统的测试项目性能!里面又完整的文档和各项说明:打开文档就可以实际操作。
例如,可以创建一个存储过程来批量插入数据,或者在一组操作失败时自动回滚事务,保证数据一致性。 在提供的压缩包文件中,"MySQL存储过程.pdf"很可能是一份详细讲解MySQL存储过程的教程,涵盖了从基础概念到高级...
本文将深入探讨如何利用MyBatis框架结合MySQL数据库实现批量插入功能,包括其原理、配置、代码实现以及优化策略。 ### 一、MyBatis框架简介 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级...
最后,"mysql存储过程.pdf"专注于MySQL的存储过程。存储过程是预编译的SQL语句集合,可以提高数据库操作的性能,减少网络流量,并增强数据安全。在PDF文档中,你将学习如何定义、调用和管理存储过程,以及如何使用...
以下是一个简单的Java调用MySQL存储过程的示例: ```java import java.sql.*; public class TestJavaProcedure { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydb"; ...
创建存储过程并循环添加记录是数据库管理中的常见任务,尤其是在需要批量插入数据时。以下将详细解释如何在MySQL中实现这一功能。 首先,我们需要了解存储过程的基本创建方法。在MySQL中,我们使用`CREATE ...
### MySQL存储过程:批量操作的高效利器 #### 一、MySQL概述 MySQL 是一个非常流行的开源关系型数据库管理系统(RDBMS),它以其强大的功能、可靠性和灵活性在Web应用程序领域中占据着重要的地位。MySQL 基于结构...
循环插入: 代码如下: DECLARE @MyCounter INT SET @MyCounter = 0 /*设置变量*/ WHILE (@MyCounter < 2) /*设置循环次数*/ BEGIN WAITFOR DELAY ‘000:00:10’ /*延迟时间10秒*/ INSERT INTO time_by_day (time_...
MySQL存储过程优化是数据库性能调优的关键环节,尤其是在处理大量数据和复杂业务逻辑时。本文将探讨两个重要的优化策略:使用临时表代替游标以及巧建SUM索引来提升查询效率。 首先,我们来讨论“使用临时表代替游标...
文件“MySQL存储过程.pdf”和“OReilly.MySQL.Stored.Procedure.Programming.rar”可能会提供关于如何创建、调用和管理MySQL存储过程的详细指南,而“MySQL触发器.rar”则可能包含触发器的创建、使用和优化方面的...
【使用存储过程进行批量插入】 存储过程是一种封装了多个SQL语句的数据库对象,适用于更复杂的批量插入操作。存储过程可以通过循环批量插入数据,提高代码的重用性和可维护性。 这样的好处:逻辑封装:复杂的插入...
在实际应用中,存储过程常常用于处理复杂的数据操作,如批量插入、报表生成、事务处理等。它们可以接受多个参数,返回多个结果集,甚至可以嵌套调用其他存储过程。此外,MySQL还支持局部变量和游标,使得在存储过程...
批量插入百万条数据,自定义函数,动态生成数据,伪造真实数据。
在这个场景中,我们将从Java应用程序收集一系列用户数据,将其转换为Oracle数组,然后调用一个预定义的存储过程进行批量更新操作。 #### 五、注意事项与优化建议 - **类型匹配**:确保Java对象属性与数据库对象...
- 数据批量更新或插入:存储过程可以处理大量数据操作,例如批量插入或更新记录。 - 复杂查询:将多表联查、子查询等复杂操作封装在存储过程中,提高查询效率。 - 定期任务:结合事件调度器,存储过程可用于执行...
首先,我们创建一个简单的MySQL5数据库表`user`,用于演示存储过程的插入操作: ```sql CREATE TABLE user ( id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, pswd VARCHAR(50) DEFAULT NULL, ...
通过理解以上内容,你可以使用提供的文本文件中的示例来学习如何在实际项目中创建和应用MySQL存储过程,特别是在进行数据修复或批量操作时,存储过程能发挥其强大功能,提升数据库管理的效率和准确性。
- 数据处理:批量插入、更新、删除操作。 - 数据验证:在插入或更新数据前进行合法性检查。 - 计算和统计:执行复杂的计算任务,如报表生成。 - 业务逻辑:实现数据库层面的业务规则。 以上是关于MySQL5.0存储...