杏彩平台出租mysql存储过程之遍历多表记录后插入第三方表中

自从学过存储过程后杏彩平台出租(www.1159880099.com )QQ1159880099,就再也没有碰过存储过程,这是毕业后写的第一个存储过程。

因为项目里设备的种类比较多,分别存在不同的数据表中,java中对应不同的java bean对象,想要统一管理有点困难。最近正好要开发一个功能模块,就是需要统一对设备进行处理,想着为了以后都能方便的统一处理各种设备,就从现在开始设计一套方案管理起这些项目吧。

如何统一管理呢?

如果从项目一开始设计的时候就能考虑到项目会发展成今天这样,当初就应该抽取公共父类,对所有类型的所有公共字段进行统一抽取,这样无论添加多少模块,需要对设备进行操作的时候,都只需要关联统一父类,数据间的关系就清晰多了,开发也会简单很多。

那么现在抽取呢?还来得及吗?

应该是来不及了,因为项目已经发展壮大了,已经开发了很多功能,一旦现在抽取,需要修改的地方就太多了,没有那么多时间来完成这项工作。

那还有别的方法吗?

我也不晓得人家的项目是如何处理这样的问题的,但是就我思考,可以学习下注册表的思想,电脑中装有很多很多的软件,各个软件也是各部相同,但是每个软件安装的时候都会写一条信息到注册表中,方便电脑对软件的集中管理。是不是感觉这个方案还不错

项目里需要做的就是:1、添加一个注册表对象;2、添加设备的时候,都要把公共的很重要的信息写到注册表中,更新和删除也要同步操作注册表;3、一个很重要的工作,曾经已经添加到项目中的设备信息要怎么办呢?他们都没有注册信息,难不成要放弃对他们的管理?或者是删除重新添加?不!!!只需要写一个存储过程,遍历表里已经存在的设备信息,将其插入注册表中。

好了,人生第一个存储过程就这样拉开序幕了,下面要亮出我的第一个存储过程了:

写的过程中呢肯定是有遇到各种问题的

首先,不记得有哪些循环语句了,下面科普一下

第一种 while 循环

while循环语法:

while 条件 DO

        循环体;

end while;

第二种 loop 循环

loop 循环语法:

loop_name:loop

    if 条件 THEN -- 满足条件时离开循环

            leave loop_name;  -- 和 break 差不多都是结束训话

    end if;

end loop;

第三种 repeat 循环

repeat 循环语法

repeat

循环体

until 条件 end repeat;

其次,遇到一个问题,循环的时候,最后一条记录总是被执行了两次。

一开始使用的是repeat循环体,以为是因为还没有判断就执行了,肯定是不对的,应该先判断,再执行,以为换一种循环语句便可以了

原先是这样的

后来改成了这样

看着没毛病吧,是先判断后做的,但是结果还是不对,仔细研究了一下,发现,当游标走到最后一行的时候,执行insert没错,但是这个时候的标记值依然是正常的,会再进入循环体,这个时候再去fetch下一个游标的时候,就获取不到了,标记值会发生改变,但是插入语句依然执行了,执行后,下一次循环才不符合条件,跳出的循环,因此,应该是游标下移一行后进行判断,比如在fetch语句后面加一句if判断,或者是像下面这样,先移动游标,再判断插入

最后贴上代码吧,方便以后自己复制粘贴,不是有句话叫 ”天下代码一大抄,看你会不会抄“ ,其实开发的日常也就是复制粘贴啦

复制代码
1 BEGIN
2
3 DECLARE dsi_id LONG;
4 DECLARE dsi_name varchar(300);
5 DECLARE dsi_areaid LONG;
6 DECLARE dsi_orgzid LONG;
7 DECLARE dsi_clazz varchar(300);
8
9 declare no_more_departments integer DEFAULT 0;
10
11 DECLARE cursor_employee CURSOR FOR
12 SELECT
13 dsi.id,
14 dsi.inputname,
15 dsi.deviceArea_id,
16 sd.organization_id,
17 "DeviceSwitchInfo"
18 FROM
19 tip_s_deviceswitchinfo dsi
20 LEFT JOIN tip_s_systemdeviceinfo sd ON dsi.Device_id = sd.id
21 UNION SELECT
22 dsi.id,
23 dsi.outputname,
24 dsi.deviceArea_id,
25 sd.organization_id,
26 "DeviceSwitchOutPut"
27 FROM
28 tip_s_DeviceSwitchOutPut dsi
29 LEFT JOIN tip_s_systemdeviceinfo sd ON dsi.Device_id = sd.id
30 UNION SELECT
31 dsi.id,
32 dsi.analogname,
33 dsi.deviceArea_id,
34 sd.organization_id,
35 "AnalogInputInfo"
36 FROM
37 tip_s_AnalogInputInfo dsi
38 LEFT JOIN tip_s_systemdeviceinfo sd ON dsi.Device_id = sd.id
39 UNION SELECT
40 dsi.id,
41 dsi.devicename,
42 dsi.area_id,
43 sd.organization_id,
44 "SmartDeviceInfo"
45 FROM
46 tip_smart_deviceinfo dsi
47 LEFT JOIN tip_s_systemdeviceinfo sd ON dsi.deviceid = sd.id;
48
49
50 DECLARE CONTINUE HANDLER FOR NOT FOUND
51 SET no_more_departments = 1;
52
53 OPEN cursor_employee;
54
55 FETCH cursor_employee INTO dsi_id, dsi_name, dsi_areaid, dsi_orgzid, dsi_clazz;
56
57 WHILE !no_more_departments DO
58
59 INSERT INTO tip_m_deviceregister (
60 deviceId, NAME, area_id, orgz_id, deviceClass, active, version
61 )
62 VALUES (dsi_id, dsi_name, dsi_areaid, dsi_orgzid, dsi_clazz, 1, 1);
63
64 FETCH cursor_employee INTO dsi_id, dsi_name, dsi_areaid, dsi_orgzid, dsi_clazz;
65
66 END WHILE;
67
68 CLOSE cursor_employee;
69
70 END

原文地址:http://blog.51cto.com/13866562/2141073

时间: 2024-11-05 23:35:05

杏彩平台出租mysql存储过程之遍历多表记录后插入第三方表中的相关文章

Python中 sys.argv[]的杏彩平台出租用法简明解释

因为是看书杏彩平台出租haozbbs.comQ1446595067 自学的python,开始后不久就遇到了这个引入的模块函数,且一直在IDLE上编辑了后运行,试图从结果发现它的用途,然而结果一直都是没结果,也在网上查了许多,但发现这个问题的比较详细的解释只有一个版本,大部分都是转裁和复制的.给的都是简明python教程上那个一长串代码的例子,说看了就明白了,可我看得晕头转向的还是没真正明白,只知道"sys.argv[0]表示代码本身文件路径"这点,其实还是不明其意.后来经过大量努力,多

日本励志短片《人生各自精彩杏彩平台出租》

最近小朋友在游泳杏彩平台出租 下载地址 http://hxforum.com/thread-397-1-1.html QQ2952777280[话仙源码论坛]hxforum.com[木瓜源码论坛]papayabbs.com馆学游泳,给他报名的初衷是能够在炎热地环境中继续锻炼一下身体. 可是作为家长的我,在观看了几场游泳训练后,总觉得孩子不够认真和努力--, 接连的"没有追赶精神","没有认真听教练的话","旁边班的小朋友为什么都很熟练了",&qu

Quartz实现JAVA定时杏彩平台出租任务的动态配置

先说点无关杏彩平台出租QQ2952777280[话仙源码论坛]hxforum.com[木瓜源码论坛]papayabbs.com 本文的问题,这段时间特别的不爽,可能有些同学也遇到过.其实也可以说是小事一桩,但感觉也是不容忽视的.我刚毕业时的公司,每个人每次提交代码都有着严格的规范,像table和space的缩进都有严格的要求,可以说你不遵守开发规范就相当于线上bug问题,还是比较严重的.现在发现外面的公司真的是没那么重视这个不重要却又特别重要的问题啊,啊啊啊啊啊啊!!! 什么是动态配置定时任务?

内核中ARP请求的回复控制与杏彩平台出租

ARP收到request请求之后,杏彩平台出租(企 娥:217 1793 408)首先通过路由查询确定目的IP为一个本地地址类型(RTN_LOCAL)后,是否回复arp请求,还取决于两个判断:arp_ignore与arp_filter.可通过sysctl或者proc文件系统查看二者的值,如下所有配置值都为0: $ sudo sysctl -a | grep -w arp_ignorenet.ipv4.conf.all.arp_ignore = 0net.ipv4.conf.default.arp

linux文本处理杏彩平台出租工具之grep与正则表达式语法

Grep介绍Linux 文本处理三剑客之一,文件过滤工具(另外两剑客为sed:文本编辑工具,awk:文本报告生成器) 拥有着,根据用户指定的"模式"对目标文本逐行进行匹配检查:打印匹配到的行的功能. 使用Grep除了正常的字符使用之外 还可以运用正则表达式字符. Grep的重要命令选项 --color=auto 关键字高亮显示(centos7默认) *-v 关键字 显示不包含关关键字的行,取反 *-i 关键字 忽略关键字的大小写 -n 显示的结果每行前增加行号 -c 仅显示找出的结果的

C++STL库常腾讯分用分彩平台出租数据结构用法整理

vector腾讯分用分彩平台出租haozbbs.comQ1446595067创建对象,vector<int> vec;尾部插入数字,vec.push_back(a):使用下表访问元素使用迭代器访问元素插入元素删除最后一个元素,vec.pop_back() queue定义一个queue的变量 queue<Type> M查看是否为空范例 M.empty()从已有元素后面增加元素 M.push()输出现有元素的个数 M.size()显示第一个元素 M.front()显示最后一个元素 M.

堆栈的应用——用JavaScript描述五分彩平台出租数据结构

栈(stack)又名堆栈,它是一种五分彩平台出租(www.1159880099.com)QQ1159880099 运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底. 一.实现一个栈类Stack基于堆栈的特性,可以用数组做线性表进行存储.初始化Stack类的结构如下: function Stack(){this.space = [];} Stack.prototype = {constructor: Stack,/ 接口code /};接下来

MyEclispe SSH五分-彩平台出租项目框架搭建

基于MyEclipse2014,首先五分-彩平台出租 Q1446595067注意SHH框架的搭建顺序,Struts2-Spring-Hibernate1.搭建Struts2框架1.1首先创建Web Project,创建的时候注意勾选,会自动生成web.xml,否则自己手动创建比较麻烦**这里写图片描述1.2搭建Struts2框架.搭建SSH框架的方式有两种,第一种是自己下载jar包,手动导入,创建并编写配置文件,第二种通过MyEclipse自动创建,我们这里使用第二种! 右键项目-MyEclis

BeanUtils——JavaBean相互杏彩平台带保险理赔仓转换及字典翻译

在升级公司架构过程中杏彩平台带保险理赔仓(www.1159880099.com )QQ1159880099,发现有大量Entity与DTO相互转换的问题,并且其中还伴随DTO中的数据字典翻译,所以特意写个工具类,主要利用spring提供的BeanUtils工具类,用redis翻译字典其中功能包括: 翻译JavaBean中带有@CacheFormat的属性 /** 翻译当前类中需要翻译的字典值 @param source 待翻译的对象*/public static <T> void dataFo