CREATE PROCEDURE P_UPDATE_RES_LOCATION(IN STR_RES_ID text)
BEGIN
/** 声明参数*/
DECLARE res_id DECIMAL(22,0) DEFAULT 0;-- 初始化一个资源ID变量,默认值为0,用来存放从游标中提取的数据
DECLARE done INTEGER DEFAULT 0;-- 声明一个标志done,用来判断游标是否遍历完成
DECLARE DED_ID DECIMAL(22,0) DEFAULT 0;-- 被依赖资源ID
DECLARE ROOM_ID DECIMAL(22,0) DEFAULT 0;-- 机房ID
DECLARE NEW_ROOM_NAME VARCHAR(200) DEFAULT ''; -- 机房名称
DECLARE CITY_ID DECIMAL(22,0) DEFAULT 0;-- 城市ID
DECLARE NEW_CITY_NAME VARCHAR(200) DEFAULT ''; -- 城市名称
DECLARE GROUP_ID DECIMAL(22,0) DEFAULT 0;-- 业务系统ID
DECLARE NEW_GROUP_NAME VARCHAR(200) DEFAULT ''; -- 业务系统名称
DECLARE NEW_BRAND_NAME VARCHAR(200) DEFAULT '';-- 品牌名称
DECLARE NEW_MACHINE_MODEL VARCHAR(200) DEFAULT '';-- 机型
DECLARE NEW_BLADE_CHASSIS_NAME VARCHAR(200) DEFAULT '';-- 刀片机箱名称
DECLARE BLADE_CHASSIS_ID DECIMAL(22,0) DEFAULT 0;-- 刀片机箱ID
DECLARE NEW_RACK_NAME VARCHAR(200) DEFAULT '';-- 机柜名称
DECLARE RACK_ID DECIMAL(22,0) DEFAULT 0;-- 机柜ID
DECLARE CATE_ID DECIMAL(22,0) DEFAULT 0;-- 大类ID
DECLARE ORIGINAL_ROOM_NAME VARCHAR(200) default '';
DECLARE ORIGINAL_CITY_NAME VARCHAR(200) default '';
DECLARE ORIGINAL_GROUP_NAME VARCHAR(200) default '';
DECLARE ORIGINAL_BRAND_NAME VARCHAR(200) default '';
DECLARE ORIGINAL_MACHINE_MODEL VARCHAR(200) default '';
DECLARE ORIGINAL_BLADE_CHASSIS_NAME VARCHAR(200) default '';
DECLARE ORIGINAL_RACK_NAME VARCHAR(200) DEFAULT '';
DECLARE DISP_NAME VARCHAR(200) DEFAULT '';-- 资源显示名称
DECLARE ORIGINAL_SERVER_HEIGHT VARCHAR(4) DEFAULT '';-- 节点高度
DECLARE ORIGINAL_SERVER_LOCATION VARCHAR(4) DEFAULT '';-- 节点位置
DECLARE ORIGINAL_BMCIP VARCHAR(64) DEFAULT '';-- IPMI地址
DECLARE ORIGINAL_IPMI_USER VARCHAR(64) DEFAULT '';-- IPMI用户
DECLARE ORIGINAL_IPMI_PWD VARCHAR(64) DEFAULT '';-- IPMI密码
DECLARE NEW_SERVER_HEIGHT VARCHAR(4) DEFAULT '';-- 节点高度
DECLARE NEW_SERVER_LOCATION VARCHAR(4) DEFAULT '';-- 节点位置
DECLARE NEW_BMCIP VARCHAR(64) DEFAULT '';-- IPMI地址
DECLARE NEW_IPMI_USER VARCHAR(64) DEFAULT '';-- IPMI用户
DECLARE NEW_IPMI_PWD VARCHAR(64) DEFAULT '';-- IPMI密码
DECLARE NEW_BLADE_CHASSIS_CAPACITY VARCHAR(4) DEFAULT '';-- 刀片机箱容量
DECLARE NEW_BLADE_CHASSIS_ARRANGE_MODE VARCHAR(4) DEFAULT '';-- 刀片机箱排列模式
DECLARE NEW_BLADE_CHASSIS_LOCATION VARCHAR(4) DEFAULT '';-- 刀片机箱位置
DECLARE NEW_BLADE_CHASSIS_HEIGHT VARCHAR(4) DEFAULT '';-- 刀片机箱高度
DECLARE NEW_MANAGE_IP VARCHAR(64) DEFAULT '';-- 业务IP
DECLARE ORIGINAL_BLADE_CHASSIS_CAPACITY VARCHAR(4) DEFAULT '';-- 刀片机箱容量
DECLARE ORIGINAL_BLADE_CHASSIS_ARRANGE_MODE VARCHAR(4) DEFAULT '';-- 刀片机箱排列模式
DECLARE ORIGINAL_BLADE_CHASSIS_LOCATION VARCHAR(4) DEFAULT '';-- 刀片机箱位置
DECLARE ORIGINAL_BLADE_CHASSIS_HEIGHT VARCHAR(4) DEFAULT '';-- 刀片机箱高度
DECLARE ORIGINAL_MANAGE_IP VARCHAR(64) DEFAULT '';-- 原始业务IP
-- 定义游标对应的SQL
DECLARE rs_cursor CURSOR FOR SELECT ID,ROOM_NAME,CITY_NAME,GROUP_NAME,BRAND_NAME,MACHINE_MODEL,BLADE_CHASSIS_NAME,RACK_NAME
,SERVER_HEIGHT,BMCIP,IPMI_USER,IPMI_PWD,SERVER_LOCATION,BLADE_CHASSIS_CAPACITY,BLADE_CHASSIS_ARRANGE_MODE,BLADE_CHASSIS_LOCATION
,BLADE_CHASSIS_HEIGHT,MANAGE_IP FROM gv_rm_resource_location WHERE CATEGORY_ID=10002 AND ID=STR_RES_ID;
DECLARE r1_cursor CURSOR FOR SELECT ID,ROOM_NAME,CITY_NAME,GROUP_NAME,BRAND_NAME,MACHINE_MODEL,BLADE_CHASSIS_NAME,RACK_NAME
,SERVER_HEIGHT,BMCIP,IPMI_USER,IPMI_PWD,SERVER_LOCATION,BLADE_CHASSIS_CAPACITY,BLADE_CHASSIS_ARRANGE_MODE,BLADE_CHASSIS_LOCATION
,BLADE_CHASSIS_HEIGHT,MANAGE_IP FROM gv_rm_resource_location WHERE CATEGORY_ID=10002 AND
(ROOM_NAME IS NULL OR ROOM_NAME='') AND (CITY_NAME IS NULL OR CITY_NAME='') AND (GROUP_NAME IS NULL OR GROUP_NAME='')
AND (BRAND_NAME IS NULL OR BRAND_NAME='') AND (MACHINE_MODEL IS NULL OR MACHINE_MODEL='');
DECLARE rr_cursor CURSOR FOR SELECT DEPENDED_ID FROM gv_rm_resource_relation WHERE DEPENDANT_ID=res_id;
-- 在游标循环到最后会将done设置为1
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
IF STR_RES_ID='INSERT' THEN -- 说明是增加行为,则外循环应该打开游标r1_cursor
UPDATE gv_rm_resource_location SET ROOM_NAME = '',CITY_NAME='',GROUP_NAME='',BRAND_NAME='',MACHINE_MODEL='';
SELECT '正在初始化........';
OPEN r1_cursor;-- 打开游标
ELSE
OPEN rs_cursor;-- 打开游标
END IF;
-- 遍历游标每一行
cursor_loop:LOOP
/** 得到原始值*/
IF STR_RES_ID='INSERT' THEN
FETCH r1_cursor INTO res_id, ORIGINAL_ROOM_NAME,ORIGINAL_CITY_NAME,ORIGINAL_GROUP_NAME,ORIGINAL_BRAND_NAME,ORIGINAL_MACHINE_MODEL,
ORIGINAL_BLADE_CHASSIS_NAME,ORIGINAL_RACK_NAME,ORIGINAL_SERVER_HEIGHT,ORIGINAL_BMCIP,ORIGINAL_IPMI_USER,ORIGINAL_IPMI_PWD,
ORIGINAL_SERVER_LOCATION,ORIGINAL_BLADE_CHASSIS_CAPACITY,ORIGINAL_BLADE_CHASSIS_ARRANGE_MODE,ORIGINAL_BLADE_CHASSIS_LOCATION,
ORIGINAL_BLADE_CHASSIS_HEIGHT,ORIGINAL_MANAGE_IP;-- 把一行的信息存放在对应的变量中
ELSE
FETCH rs_cursor INTO res_id, ORIGINAL_ROOM_NAME,ORIGINAL_CITY_NAME,ORIGINAL_GROUP_NAME,ORIGINAL_BRAND_NAME,ORIGINAL_MACHINE_MODEL,
ORIGINAL_BLADE_CHASSIS_NAME,ORIGINAL_RACK_NAME,ORIGINAL_SERVER_HEIGHT,ORIGINAL_BMCIP,ORIGINAL_IPMI_USER,ORIGINAL_IPMI_PWD,
ORIGINAL_SERVER_LOCATION,ORIGINAL_BLADE_CHASSIS_CAPACITY,ORIGINAL_BLADE_CHASSIS_ARRANGE_MODE,ORIGINAL_BLADE_CHASSIS_LOCATION,
ORIGINAL_BLADE_CHASSIS_HEIGHT,ORIGINAL_MANAGE_IP;-- 把一行的信息存放在对应的变量中
END IF;
IF done = 1 THEN
LEAVE cursor_loop;
END IF;
OPEN rr_cursor;
rr1_loop:LOOP
FETCH rr_cursor INTO DED_ID;
IF done = 1 THEN
SET done = 0;
LEAVE rr1_loop;
END IF;
SELECT CATEGORY_ID,DISPLAY_NAME INTO CATE_ID,DISP_NAME FROM gv_rm_resource where id=DED_ID;
-- 如果服务器位于刀片机箱中
IF CATE_ID=10009 THEN
SET BLADE_CHASSIS_ID=DED_ID;
/** 处理刀片机箱资源参数 */
-- 得到刀片机箱位置
SELECT data1.`VALUE` INTO NEW_BLADE_CHASSIS_LOCATION from gv_rm_param_templ templ join gv_rm_param_data data1 on templ.ID=data1.PARAM_TEMPL_ID where templ.`NAME`='Location' and templ.SUBCATEGORY_ID=10008 and data1.RESOURCE_ID=BLADE_CHASSIS_ID;
-- 得到刀片机箱高度
SELECT data1.`VALUE` INTO NEW_BLADE_CHASSIS_HEIGHT from gv_rm_param_templ templ join gv_rm_param_data data1 on templ.ID=data1.PARAM_TEMPL_ID where templ.`NAME`='Height' and templ.SUBCATEGORY_ID=10008 and data1.RESOURCE_ID=BLADE_CHASSIS_ID;
-- 得到刀片机箱容量
SELECT data1.`VALUE` INTO NEW_BLADE_CHASSIS_CAPACITY from gv_rm_param_templ templ join gv_rm_param_data data1 on templ.ID=data1.PARAM_TEMPL_ID where templ.`NAME`='Capacity' and templ.SUBCATEGORY_ID=10008 and data1.RESOURCE_ID=BLADE_CHASSIS_ID;
-- 得到刀片机箱排列模式
SELECT data1.`VALUE` INTO NEW_BLADE_CHASSIS_ARRANGE_MODE from gv_rm_param_templ templ join gv_rm_param_data data1 on templ.ID=data1.PARAM_TEMPL_ID where templ.`NAME`='Arrange' and templ.SUBCATEGORY_ID=10008 and data1.RESOURCE_ID=BLADE_CHASSIS_ID;
SET NEW_BLADE_CHASSIS_NAME=DISP_NAME;
SELECT DEPENDED_ID INTO RACK_ID FROM gv_rm_resource_relation WHERE DEPENDANT_ID=DED_ID;-- 被依赖的资源ID应该是机柜
SELECT DISPLAY_NAME INTO NEW_RACK_NAME FROM gv_rm_resource where id=RACK_ID;
SELECT res.ID,res.DISPLAY_NAME INTO ROOM_ID,NEW_ROOM_NAME FROM gv_rm_resource res JOIN gv_rm_resource_relation rr on res.ID=rr.DEPENDED_ID WHERE rr.DEPENDANT_ID=RACK_ID;
SELECT res.ID,res.DISPLAY_NAME INTO CITY_ID,NEW_CITY_NAME FROM gv_rm_resource res JOIN gv_rm_resource_relation rr on res.ID=rr.DEPENDED_ID WHERE rr.DEPENDANT_ID=ROOM_ID;
-- 如果服务器位于机柜中
ELSEIF CATE_ID=10005 THEN
SET RACK_ID = DED_ID;
SELECT DISPLAY_NAME INTO NEW_RACK_NAME FROM gv_rm_resource where id=RACK_ID;
SELECT res.ID,res.DISPLAY_NAME INTO ROOM_ID,NEW_ROOM_NAME FROM gv_rm_resource res JOIN gv_rm_resource_relation rr on res.ID=rr.DEPENDED_ID WHERE rr.DEPENDANT_ID=DED_ID;
SELECT res.ID,res.DISPLAY_NAME INTO CITY_ID,NEW_CITY_NAME FROM gv_rm_resource res JOIN gv_rm_resource_relation rr on res.ID=rr.DEPENDED_ID WHERE rr.DEPENDANT_ID=ROOM_ID;
-- 如果是业务系统
ELSEIF CATE_ID=10010 THEN
SELECT ID,DISPLAY_NAME INTO GROUP_ID,NEW_GROUP_NAME FROM gv_rm_resource WHERE id=DED_ID;
END IF;
END LOOP rr1_loop;
CLOSE rr_cursor;-- 关闭内部游标
/** 处理资源参数 */
-- 得到品牌名称
SELECT data1.`VALUE` INTO NEW_BRAND_NAME from gv_rm_param_templ templ join gv_rm_param_data data1 on templ.ID=data1.PARAM_TEMPL_ID where templ.`NAME`='Brand' and templ.SUBCATEGORY_ID=10002 and data1.RESOURCE_ID=res_id;
-- 得到机型
SELECT data1.`VALUE` INTO NEW_MACHINE_MODEL from gv_rm_param_templ templ join gv_rm_param_data data1 on templ.ID=data1.PARAM_TEMPL_ID where templ.`NAME`='NodeModel' and templ.SUBCATEGORY_ID=10002 and data1.RESOURCE_ID=res_id;
-- 得到节点高度
SELECT data1.`VALUE` INTO NEW_SERVER_HEIGHT from gv_rm_param_templ templ join gv_rm_param_data data1 on templ.ID=data1.PARAM_TEMPL_ID where templ.`NAME`='Height' and templ.SUBCATEGORY_ID=10002 and data1.RESOURCE_ID=res_id;
-- 得到节点位置
SELECT data1.`VALUE` INTO NEW_SERVER_LOCATION from gv_rm_param_templ templ join gv_rm_param_data data1 on templ.ID=data1.PARAM_TEMPL_ID where templ.`NAME`='Location' and templ.SUBCATEGORY_ID=10002 and data1.RESOURCE_ID=res_id;
-- 得到IPMI地址
SELECT data1.`VALUE` INTO NEW_BMCIP from gv_rm_param_templ templ join gv_rm_param_data data1 on templ.ID=data1.PARAM_TEMPL_ID where templ.`NAME`='BMCIP' and templ.SUBCATEGORY_ID=10002 and data1.RESOURCE_ID=res_id;
-- 得到IPMI用户
SELECT data1.`VALUE` INTO NEW_IPMI_USER from gv_rm_param_templ templ join gv_rm_param_data data1 on templ.ID=data1.PARAM_TEMPL_ID where templ.`NAME`='IPMIUser' and templ.SUBCATEGORY_ID=10002 and data1.RESOURCE_ID=res_id;
-- 得到IPMI密码
SELECT data1.`VALUE` INTO NEW_IPMI_PWD from gv_rm_param_templ templ join gv_rm_param_data data1 on templ.ID=data1.PARAM_TEMPL_ID where templ.`NAME`='IPMIPassword' and templ.SUBCATEGORY_ID=10002 and data1.RESOURCE_ID=res_id;
-- 得到业务IP
SELECT data1.`VALUE` INTO NEW_MANAGE_IP from gv_rm_param_templ templ join gv_rm_param_data data1 on templ.ID=data1.PARAM_TEMPL_ID where templ.`NAME`='ManageIP' and templ.SUBCATEGORY_ID=10002 and data1.RESOURCE_ID=res_id;
/** 清理工作*/
IF ORIGINAL_ROOM_NAME IS NULL THEN
SET ORIGINAL_ROOM_NAME = '';
END IF;
IF ORIGINAL_CITY_NAME IS NULL THEN
SET ORIGINAL_CITY_NAME = '';
END IF;
IF ORIGINAL_GROUP_NAME IS NULL THEN
SET ORIGINAL_GROUP_NAME = '';
END IF;
IF ORIGINAL_BRAND_NAME IS NULL THEN
SET ORIGINAL_BRAND_NAME = '';
END IF;
IF ORIGINAL_MACHINE_MODEL IS NULL THEN
SET ORIGINAL_MACHINE_MODEL = '';
END IF;
IF ORIGINAL_BLADE_CHASSIS_NAME IS NULL THEN
SET ORIGINAL_BLADE_CHASSIS_NAME = '';
END IF;
IF ORIGINAL_RACK_NAME IS NULL THEN
SET ORIGINAL_RACK_NAME = '';
END IF;
IF ORIGINAL_SERVER_HEIGHT IS NULL THEN
SET ORIGINAL_SERVER_HEIGHT = '';
END IF;
IF ORIGINAL_SERVER_LOCATION IS NULL THEN
SET ORIGINAL_SERVER_LOCATION = '';
END IF;
IF ORIGINAL_BMCIP IS NULL THEN
SET ORIGINAL_BMCIP = '';
END IF;
IF ORIGINAL_IPMI_PWD IS NULL THEN
SET ORIGINAL_IPMI_PWD = '';
END IF;
IF ORIGINAL_IPMI_USER IS NULL THEN
SET ORIGINAL_IPMI_USER = '';
END IF;
IF ORIGINAL_BLADE_CHASSIS_CAPACITY IS NULL THEN
SET ORIGINAL_BLADE_CHASSIS_CAPACITY = '';
END IF;
IF ORIGINAL_BLADE_CHASSIS_ARRANGE_MODE IS NULL THEN
SET ORIGINAL_BLADE_CHASSIS_ARRANGE_MODE = '';
END IF;
IF ORIGINAL_BLADE_CHASSIS_LOCATION IS NULL THEN
SET ORIGINAL_BLADE_CHASSIS_LOCATION = '';
END IF;
IF ORIGINAL_BLADE_CHASSIS_HEIGHT IS NULL THEN
SET ORIGINAL_BLADE_CHASSIS_HEIGHT = '';
END IF;
IF ORIGINAL_MANAGE_IP IS NULL THEN
SET ORIGINAL_MANAGE_IP = '';
END IF;
IF NEW_ROOM_NAME IS NULL THEN
SET NEW_ROOM_NAME = '';
END IF;
IF NEW_CITY_NAME IS NULL THEN
SET NEW_CITY_NAME = '';
END IF;
IF NEW_GROUP_NAME IS NULL THEN
SET NEW_GROUP_NAME = '';
END IF;
IF NEW_BRAND_NAME IS NULL THEN
SET NEW_BRAND_NAME = '';
END IF;
IF NEW_MACHINE_MODEL IS NULL THEN
SET NEW_MACHINE_MODEL = '';
END IF;
IF NEW_BLADE_CHASSIS_NAME IS NULL THEN
SET NEW_BLADE_CHASSIS_NAME = '';
END IF;
IF NEW_RACK_NAME IS NULL THEN
SET NEW_RACK_NAME = '';
END IF;
IF NEW_SERVER_HEIGHT IS NULL THEN
SET NEW_SERVER_HEIGHT = '';
END IF;
IF NEW_SERVER_LOCATION IS NULL THEN
SET NEW_SERVER_LOCATION = '';
END IF;
IF NEW_BMCIP IS NULL THEN
SET NEW_BMCIP = '';
END IF;
IF NEW_IPMI_PWD IS NULL THEN
SET NEW_IPMI_PWD = '';
END IF;
IF NEW_IPMI_USER IS NULL THEN
SET NEW_IPMI_USER = '';
END IF;
IF NEW_BLADE_CHASSIS_CAPACITY IS NULL THEN
SET NEW_BLADE_CHASSIS_CAPACITY = '';
END IF;
IF NEW_BLADE_CHASSIS_ARRANGE_MODE IS NULL THEN
SET NEW_BLADE_CHASSIS_ARRANGE_MODE = '';
END IF;
IF NEW_BLADE_CHASSIS_LOCATION IS NULL THEN
SET NEW_BLADE_CHASSIS_LOCATION = '';
END IF;
IF NEW_BLADE_CHASSIS_HEIGHT IS NULL THEN
SET NEW_BLADE_CHASSIS_HEIGHT = '';
END IF;
IF NEW_MANAGE_IP IS NULL THEN
SET NEW_MANAGE_IP = '';
END IF;
/** 更新操作*/
IF STRCMP(ORIGINAL_ROOM_NAME,NEW_ROOM_NAME) !=0 OR STRCMP(ORIGINAL_CITY_NAME,NEW_CITY_NAME) !=0 OR STRCMP(ORIGINAL_GROUP_NAME,NEW_GROUP_NAME) !=0 OR
STRCMP(ORIGINAL_BRAND_NAME,NEW_BRAND_NAME) !=0 OR STRCMP(ORIGINAL_MACHINE_MODEL,NEW_MACHINE_MODEL) !=0 OR STRCMP(ORIGINAL_BLADE_CHASSIS_NAME,NEW_BLADE_CHASSIS_NAME) !=0 OR
STRCMP(ORIGINAL_RACK_NAME,NEW_RACK_NAME) !=0 OR STRCMP(ORIGINAL_SERVER_HEIGHT,NEW_SERVER_HEIGHT) !=0 OR STRCMP(ORIGINAL_SERVER_LOCATION,NEW_SERVER_LOCATION) !=0 OR
STRCMP(ORIGINAL_BMCIP,NEW_BMCIP) !=0 OR STRCMP(ORIGINAL_IPMI_USER,NEW_IPMI_USER) !=0 OR STRCMP(ORIGINAL_IPMI_PWD,NEW_IPMI_PWD) !=0 OR
STRCMP(ORIGINAL_BLADE_CHASSIS_CAPACITY,NEW_BLADE_CHASSIS_CAPACITY) !=0 OR STRCMP(ORIGINAL_BLADE_CHASSIS_ARRANGE_MODE,NEW_BLADE_CHASSIS_ARRANGE_MODE) !=0 OR
STRCMP(ORIGINAL_BLADE_CHASSIS_LOCATION,NEW_BLADE_CHASSIS_LOCATION) !=0 OR STRCMP(ORIGINAL_BLADE_CHASSIS_HEIGHT,NEW_BLADE_CHASSIS_HEIGHT) !=0 OR
STRCMP(ORIGINAL_MANAGE_IP,NEW_MANAGE_IP) !=0 THEN
UPDATE gv_rm_resource_location SET ROOM_ID=ROOM_ID,ROOM_NAME=NEW_ROOM_NAME,CITY_ID=CITY_ID,CITY_NAME=NEW_CITY_NAME,GROUP_ID=GROUP_ID,GROUP_NAME=NEW_GROUP_NAME,
BRAND_NAME=NEW_BRAND_NAME,MACHINE_MODEL=NEW_MACHINE_MODEL,BLADE_CHASSIS_ID=BLADE_CHASSIS_ID,BLADE_CHASSIS_NAME=NEW_BLADE_CHASSIS_NAME,RACK_ID=RACK_ID,
RACK_NAME=NEW_RACK_NAME,SERVER_HEIGHT=NEW_SERVER_HEIGHT,SERVER_LOCATION=NEW_SERVER_LOCATION,BMCIP=NEW_BMCIP,IPMI_USER=NEW_IPMI_USER,
IPMI_PWD=NEW_IPMI_PWD,BLADE_CHASSIS_CAPACITY=NEW_BLADE_CHASSIS_CAPACITY,BLADE_CHASSIS_ARRANGE_MODE=NEW_BLADE_CHASSIS_ARRANGE_MODE,
BLADE_CHASSIS_LOCATION=NEW_BLADE_CHASSIS_LOCATION,BLADE_CHASSIS_HEIGHT=NEW_BLADE_CHASSIS_HEIGHT,MANAGE_IP=NEW_MANAGE_IP WHERE ID=res_id;
END IF;
/** 清理工作*/
SET done = 0;
SET ROOM_ID=0;
SET NEW_ROOM_NAME='';
SET CITY_ID=0;
SET NEW_CITY_NAME='';
SET GROUP_ID=0;
SET NEW_GROUP_NAME='';
SET NEW_BRAND_NAME='';
SET NEW_MACHINE_MODEL='';
SET BLADE_CHASSIS_ID=0;
SET NEW_BLADE_CHASSIS_NAME='';
SET RACK_ID=0;
SET NEW_RACK_NAME='';
SET NEW_SERVER_HEIGHT = '';
SET NEW_SERVER_LOCATION = '';
SET NEW_BMCIP = '';
SET NEW_IPMI_PWD = '';
SET NEW_IPMI_USER = '';
SET NEW_BLADE_CHASSIS_CAPACITY='';
SET NEW_BLADE_CHASSIS_ARRANGE_MODE='';
SET NEW_BLADE_CHASSIS_LOCATION='';
SET NEW_BLADE_CHASSIS_HEIGHT='';
SET NEW_MANAGE_IP='';
END LOOP cursor_loop;
IF STR_RES_ID='INSERT' THEN
CLOSE r1_cursor;
ELSE
CLOSE rs_cursor;
END IF;
SELECT '恭喜,操作成功........';
END;
/**
* 功能:对于IP地址,补充零
*/
DROP FUNCTION IF EXISTS F_ADD_ZERO_FOR_IP;
CREATE FUNCTION F_ADD_ZERO_FOR_IP(P_IP VARCHAR(64))
RETURNS VARCHAR(15)
BEGIN
DECLARE P_FIRST VARCHAR(5);
DECLARE P_SECOND VARCHAR(5);
DECLARE P_THIRD VARCHAR(5);
DECLARE P_FOURTH VARCHAR(5);
DECLARE P_TEMP VARCHAR(15);
DECLARE P_FORMAT_RESULT VARCHAR(15);
IF CHAR_LENGTH(P_IP) <> 15 THEN -- 如果长度不等于15,则说明IP地址不完整,需要补0
SET P_TEMP= SUBSTRING_INDEX(P_IP,'.',2);
SET P_FIRST= SUBSTRING_INDEX(P_TEMP,'.',1);
SET P_SECOND= SUBSTRING_INDEX(P_TEMP,'.',-1);
SET P_TEMP= SUBSTRING_INDEX(P_IP,'.',3);
SET P_THIRD= SUBSTRING_INDEX(P_TEMP,'.',-1);
SET P_FOURTH= SUBSTRING_INDEX(P_IP,'.',-1);
IF CHAR_LENGTH(P_FIRST)<>3 THEN
IF CHAR_LENGTH(P_FIRST)=1 THEN -- ip地址的第一段应补两个零
SET P_FIRST=CONCAT('0','0',P_FIRST);
ELSEIF CHAR_LENGTH(P_FIRST)=2 THEN -- ip地址的第一段应补一个零
SET P_FIRST=CONCAT('0',P_FIRST);
END IF;
END IF;
IF CHAR_LENGTH(P_SECOND)<>3 THEN
IF CHAR_LENGTH(P_SECOND)=1 THEN -- ip地址的第二段应补两个零
SET P_SECOND=CONCAT('0','0',P_SECOND);
ELSEIF CHAR_LENGTH(P_SECOND)=2 THEN -- ip地址的第二段应补一个零
SET P_SECOND=CONCAT('0',P_SECOND);
END IF;
END IF;
IF CHAR_LENGTH(P_THIRD)<>3 THEN
IF CHAR_LENGTH(P_THIRD)=1 THEN -- ip地址的第三段应补两个零
SET P_THIRD=CONCAT('0','0',P_THIRD);
ELSEIF CHAR_LENGTH(P_THIRD)=2 THEN -- ip地址的第三段应补一个零
SET P_THIRD=CONCAT('0',P_THIRD);
END IF;
END IF;
IF CHAR_LENGTH(P_FOURTH)<>3 THEN
IF CHAR_LENGTH(P_FOURTH)=1 THEN -- ip地址的第四段应补两个零
SET P_FOURTH=CONCAT('0','0',P_FOURTH);
ELSEIF CHAR_LENGTH(P_FOURTH)=2 THEN -- ip地址的第四段应补一个零
SET P_FOURTH=CONCAT('0',P_FOURTH);
END IF;
END IF;
SET P_IP=CONCAT(P_FIRST,".",P_SECOND,".",P_THIRD,".",P_FOURTH);
END IF;
SET P_FORMAT_RESULT=P_IP;
RETURN P_FORMAT_RESULT;
END;
/**
* 更新location表中的格式化后的管理IP
*/
DROP PROCEDURE IF EXISTS P_UPDATE_RES_LOCATION_IP;
CREATE PROCEDURE P_UPDATE_RES_LOCATION_IP()
BEGIN
DECLARE found int;
DECLARE P_RES_ID VARCHAR(32) DEFAULT '';
DECLARE P_MANAGEMENT_IP VARCHAR(15) DEFAULT '';
DECLARE P_FORMAT_MANAGEMENT_IP VARCHAR(15) DEFAULT '';
DECLARE rr_cursor CURSOR FOR SELECT ID,MANAGE_IP FROM gv_rm_resource_location;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET found=0;
OPEN rr_cursor;-- 打开游标
cursor_loop:LOOP
FETCH rr_cursor INTO P_RES_ID,P_MANAGEMENT_IP;
SET P_FORMAT_MANAGEMENT_IP=F_ADD_ZERO_FOR_IP(P_MANAGEMENT_IP);
UPDATE gv_rm_resource_location SET FORMAT_MANAGEMENT_IP=P_FORMAT_MANAGEMENT_IP WHERE ID=P_RES_ID;
IF found=0 THEN
LEAVE cursor_loop;
END IF;
END LOOP cursor_loop;
CLOSE rr_cursor;
END;