mysql游标处理复杂逻辑,分支结构代码示例
2016-10-18 14:49
363 查看
有两张表 建筑务表d_unit_info 跟 d_unit_person_info 人员表 两张表的关联字段为 duiId
需求:通过d_unit_info表关联d_unit_person_info 查询 d_unit_person_info
表中suptId 如果等于9则忽略当前建筑
如果没有则将suptId
= 2 的记录新增至当前表中,并根据duiId号码 + 根据建筑编码查询出当前建筑在表中有几条记录 + 00001 下一条+00002 的方式生成主健ID,并且 d_unit_info.DUI_IsTest = 0
实现方式:首选游标
1,首先遍历单位表 d_unit_info
查询出所有单位编码即duiId 并同时过滤掉所有 DUI_IsTest != 0 记录,将查询结果
放入游标内,代码如下;
2,根据游标内的单位编码duiId 遍历d_unit_person_info 人员表 并查看该单位有没有suptId等于9的记录,将结果
记录在过程内定义的局部变量couNum中,代码如下;
3,判断couNum的值,若 <=0 则说明该单位没有suptId=9的记录,那么先将d_unit_person_info表中的所有单位进行统计,再加指定的方式生成 00001 这种字符串, 公式: 统计结果+1 字符串总长度5位 左边补零,
最后再用duiId拼接刚用公式动态产生的字符串,将最终结果存入过程中的局部变量 p_dupi_id中,
他的用处是充单主健的角色,
代码如下;
4,最后向d_unit_person_info新增所需要的数据,主健为 p_dupi_id 也就是刚刚自已动态生成的, supt_id为9,
其它数据通过游标内保存的单位编码duiId 再次遍历d_unit_person_info表所获得,
并且只要suptId=2的记录,代码如下;
5,所有代码如下所示;
需求:通过d_unit_info表关联d_unit_person_info 查询 d_unit_person_info
表中suptId 如果等于9则忽略当前建筑
如果没有则将suptId
= 2 的记录新增至当前表中,并根据duiId号码 + 根据建筑编码查询出当前建筑在表中有几条记录 + 00001 下一条+00002 的方式生成主健ID,并且 d_unit_info.DUI_IsTest = 0
实现方式:首选游标
1,首先遍历单位表 d_unit_info
查询出所有单位编码即duiId 并同时过滤掉所有 DUI_IsTest != 0 记录,将查询结果
放入游标内,代码如下;
DECLARE getSave CURSOR FOR SELECT a.dui_id FROM d_unit_info a WHERE a.DUI_IsTest = '0';
</pre><pre name="code" class="sql">
2,根据游标内的单位编码duiId 遍历d_unit_person_info 人员表 并查看该单位有没有suptId等于9的记录,将结果
记录在过程内定义的局部变量couNum中,代码如下;
set couNum := (select count('x') from d_unit_person_info a where a.dui_id = p_DUI_ID and a.SUPT_ID = '9');
3,判断couNum的值,若 <=0 则说明该单位没有suptId=9的记录,那么先将d_unit_person_info表中的所有单位进行统计,再加指定的方式生成 00001 这种字符串, 公式: 统计结果+1 字符串总长度5位 左边补零,
最后再用duiId拼接刚用公式动态产生的字符串,将最终结果存入过程中的局部变量 p_dupi_id中,
他的用处是充单主健的角色,
代码如下;
#是否存在消防安全联系人 如果存在则不处理 否则copy条消防管理人员记录给消防安全联系人 if couNum<=0 then SET couNum := (SELECT LPAD(count(*)+1,5,0) FROM d_unit_person_info info WHERE info.DUI_ID = p_DUI_ID); set p_dupi_id := CONCAT(p_DUI_ID,couNum);
4,最后向d_unit_person_info新增所需要的数据,主健为 p_dupi_id 也就是刚刚自已动态生成的, supt_id为9,
其它数据通过游标内保存的单位编码duiId 再次遍历d_unit_person_info表所获得,
并且只要suptId=2的记录,代码如下;
insert into d_unit_person_info select p_dupi_id,DUI_ID,'9',p.SUWT_ID,p.DUTI_ID,p.DUHI_ID,p.SPCT_ID,p.DUPI_Name,p.DUPI_Sn,p.DUPI_Sex, p.DUPI_Birthday,p.DUPI_Duty,p.DUPI_Tel,p.DUPI_Photo,p.SET_ID,p.DUPI_Dept,p.DUPI_EntryDate,p.DUPI_IsTrain,p.DUPI_TrainDate, p.DUPI_CertificateNo,p.DUPI_ValidityDate,p.DUPI_CertificateDate,p.DUPI_IsEvacuation,p.DUPI_Area,p.DUPI_House_Duty, p.Valid,p.View_Seq,p.Modify_Date,p.Modifyer from d_unit_person_info p where p.dui_id = p_dui_id and p.supt_id = '2' order by dupi_id LIMIT 1,1;
5,所有代码如下所示;
DROP PROCEDURE IF EXISTS `p3`;
CREATE PROCEDURE p3()
BEGIN
DECLARE p_DUPI_ID VARCHAR(32);
DECLARE p_DUI_ID VARCHAR(32);
declare stopFlag int default 0;
DECLARE couNum int;
DECLARE getSave CURSOR FOR SELECT a.dui_id FROM d_unit_info a WHERE a.DUI_IsTest = '0';
declare continue handler for not found set stopFlag = 1;
begin
ROLLBACK;
end;
OPEN getSave;
REPEAT
FETCH getSave INTO p_DUI_ID;
IF(stopFlag<>1) then
START TRANSACTION;
set couNum := (select count('x') from d_unit_person_info a where a.dui_id = p_DUI_ID and a.SUPT_ID = '9');
#是否存在消防安全联系人 如果存在则不处理 否则copy条消防管理人员记录给消防安全联系人
if couNum<=0 then
SET couNum := (SELECT LPAD(count(*)+1,5,0) FROM d_unit_person_info info WHERE info.DUI_ID = p_DUI_ID);
set p_dupi_id := CONCAT(p_DUI_ID,couNum);
insert into d_unit_person_info select p_dupi_id,DUI_ID,'9',p.SUWT_ID,p.DUTI_ID,p.DUHI_ID,p.SPCT_ID,p.DUPI_Name,p.DUPI_Sn,p.DUPI_Sex, p.DUPI_Birthday,p.DUPI_Duty,p.DUPI_Tel,p.DUPI_Photo,p.SET_ID,p.DUPI_Dept,p.DUPI_EntryDate,p.DUPI_IsTrain,p.DUPI_TrainDate, p.DUPI_CertificateNo,p.DUPI_ValidityDate,p.DUPI_CertificateDate,p.DUPI_IsEvacuation,p.DUPI_Area,p.DUPI_House_Duty, p.Valid,p.View_Seq,p.Modify_Date,p.Modifyer from d_unit_person_info p where p.dui_id = p_dui_id and p.supt_id = '2' order by dupi_id LIMIT 1,1;
end if;
COMMIT;
END IF;
UNTIL stopFlag=1
END REPEAT;
CLOSE getSave;
END
相关文章推荐
- 追求完美很容易在开发上过度设计 -- 树形结构的设计不仅带来了代码开发量更可怕的是处理相应的复杂逻辑
- 追求完美很容易在开发上过度设计 -- 树形结构的设计不仅带来了代码开发量更可怕的是处理相应的复杂逻辑
- 追求完美很容易在开发上过度设计 -- 树形结构的设计不仅带来了代码开发量更可怕的是处理相应的复杂逻辑
- 追求完美很容易在开发上过度设计 -- 树形结构的设计不仅带来了代码开发量更可怕的是处理相应的复杂逻辑
- JavaScript调用OC代码调试问题、页面 4000 复杂跳转逻辑警告处理
- C#连接mariadb(MYSQL分支)代码示例分享
- MySql存储过程异常处理示例代码分享
- Mysql存储过程循环内嵌套使用游标示例代码
- solr复杂查询;及代码示例;包括查询、过滤、分页、排序、高亮显示等处理 的代码示例;
- Mysql存储过程循环内嵌套使用游标示例代码
- MySql存储过程异常处理示例代码分享
- 【JavaWeb-9】MVC设计模式、处理业务逻辑代码的分层思想、目录结构参照、实践案例
- MySQL游标和控制结构代码学习
- 工程中处理symbian版本号的示例代码
- Struts:把JSP代码中的复杂逻辑转移出去
- 数据库Mysql--(查看表结构、处理时间函数)
- 使用WebService构建的C/S代码结构示例
- Mysql存储过程中游标的使用以及错误处理
- jsp+mysql或者jsp+oracle中存储处理图片的代码
- MySql 存储过程使用游标循环插入数据示例