0
将Oracle从oracle迁移到mysql。在那些记录中没有插入到主表中。但是im得到了print msg作为插入成功。我不明白什么是问题在这里进行。Plz帮助我处理这个问题。 这里是我的程序代码: 在我的程序im声明在SD_CHANGE_TMP表中有标志值'N'的游标。之后我做了一些计算。基于这些值插入主表即SD_CHANGE表。执行过程successfully.And IM没有得到语法errors.But数据调用procedure.Plz帮我出去后没有插入.....运行mysql存储过程时记录没有插入到主表中
CREATE PROCEDURE HIS_CHANGE()
BEGIN
declare v_CHANGE_ID DECIMAL(25,0);
declare v_MODIFIED_DATE DATETIME;
declare v_PLAN_START_DATE DATETIME;
declare v_PLAN_END_DATE DATETIME;
declare v_ACTUAL_END_DATE DATETIME;
declare v_ACTUAL_START_DATE DATETIME;
declare v_APPROVAL_STATUS_ID DECIMAL(25,0);
declare v_ASSIGNED_TO_ID DECIMAL(25,0);
declare v_CHANGE_OWNER_ID DECIMAL(25,0);
declare v_CLOSURE_CODE_ID DECIMAL(25,0);
declare v_CREATE_DATE DATETIME;
declare v_CREATED_BY_ID DECIMAL(25,0);
declare v_DESCRIPTION VARCHAR(4000);
declare v_ENHANCEMENT_AUDIT VARCHAR(30);
declare v_HOST_ID DECIMAL(25,0);
declare v_HOST_NAME VARCHAR(255);
declare v_IMPACT VARCHAR(64);
declare v_SEVERITY_ID DECIMAL(25,0);
declare v_PRODUCT_CTI_ID DECIMAL(25,0);
declare v_OPERATIONAL_CTI_ID DECIMAL(25,0);
declare v_RAISED_LOCATION_ID DECIMAL(25,0);
declare v_STATUS_ID DECIMAL(25,0);
declare v_SLA_ID DECIMAL(25,0);
declare v_SUMMARY VARCHAR(128);
declare v_CHANGE_KEY VARCHAR(128);
declare v_USERS_AFFECTED VARCHAR(60);
declare v_A_SRC DECIMAL(25,0);
declare v_TICKET_TYPE_ID DECIMAL(25,0);
declare v_FLAG CHAR(1) ;
declare v_A_CREATION_TIME TIMESTAMP;
declare temp DOUBLE;
declare t_his VARCHAR(2);
declare t_max_d DATETIME;
declare t_count DOUBLE DEFAULT 0;
declare t_hosti DOUBLE;
DECLARE duplicate_key INT DEFAULT 0;
declare done int default 0;
declare done1 int default 0;
declare done2 int default 0;
declare no_data int default 0;
declare ERROR int default 0;
DECLARE CHG_CUR CURSOR FOR SELECT * FROM SD_CHANGE_TMP WHERE FLAG = 'N' ORDER BY CHANGE_ID,MODIFIED_DATE;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
DECLARE continue HANDLER FOR 1062 SET duplicate_key=1;
DECLARE continue HANDLER for 1328 SET no_data = 1;
DECLARE continue HANDLER for SQLEXCEPTION SET ERROR = 1;
SELECT "OPENING THE CURSOR...";
OPEN CHG_CUR;
SELECT "before the loop....";
LOOP1:LOOP
outer_block:BEGIN
FETCH CHG_CUR INTO v_CHANGE_ID,v_MODIFIED_DATE,v_PLAN_START_DATE,v_PLAN_END_DATE,v_ACTUAL_END_DATE,v_ACTUAL_START_DATE,
v_APPROVAL_STATUS_ID,v_ASSIGNED_TO_ID,v_CHANGE_OWNER_ID,v_CLOSURE_CODE_ID,v_CREATE_DATE,v_CREATED_BY_ID,v_DESCRIPTION,
v_ENHANCEMENT_AUDIT,v_HOST_ID,v_HOST_NAME,v_IMPACT,v_SEVERITY_ID,v_PRODUCT_CTI_ID,v_OPERATIONAL_CTI_ID,v_RAISED_LOCATION_ID,
v_STATUS_ID,v_SLA_ID,v_SUMMARY,v_CHANGE_KEY,v_USERS_AFFECTED,v_A_SRC,v_TICKET_TYPE_ID,v_FLAG,v_A_CREATION_TIME;
select "Inside the loop";
inner_block:begin
BEGIN
SELECT COUNT(*) INTO temp FROM SD_CHANGE WHERE CHANGE_ID = v_CHANGE_ID;
IF temp = 0 THEN
select temp;
SET t_his = 'Y';
ELSE
SELECT MAX(MODIFIED_DATE) INTO t_max_d FROM SD_CHANGE WHERE CHANGE_ID= v_CHANGE_ID;
IF v_MODIFIED_DATE > t_max_d
THEN
select temp;
SET t_his = 'Y';
UPDATE SD_CHANGE SET HIS_FLAG = 'N' WHERE HIS_FLAG = 'Y' AND CHANGE_ID = v_CHANGE_ID;
ELSE
SET t_his = 'N';
END IF;
END IF;
END;
BEGIN
select concat('Inserting into SD_CHANGE table');
insert into SD_CHANGE(CHANGE_ID,MODIFIED_DATE,PLAN_START_DATE,PLAN_END_DATE,ACTUAL_END_DATE,ACTUAL_START_DATE,APPROVAL_STATUS_ID,ASSIGNED_TO_ID,CHANGE_OWNER_ID,
CLOSURE_CODE_ID,CREATE_DATE,CREATED_BY_ID,DESCRIPTION,ENHANCEMENT_AUDIT,HOST_ID,IMPACT,SEVERITY_ID,PRODUCT_CTI_ID,
OPERATIONAL_CTI_ID,RAISED_LOCATION_ID,STATUS_ID,SLA_ID,SUMMARY,CHANGE_KEY,HIS_FLAG,USERS_AFFECTED,A_SRC,FLAG,A_CREATION_TIME,TICKET_TYPE_ID)
values(v_CHANGE_ID,v_MODIFIED_DATE,v_PLAN_START_DATE,v_PLAN_END_DATE,v_ACTUAL_END_DATE,v_ACTUAL_START_DATE,v_APPROVAL_STATUS_ID,v_ASSIGNED_TO_ID,v_CHANGE_OWNER_ID,
v_CLOSURE_CODE_ID,v_CREATE_DATE,v_CREATED_BY_ID,v_DESCRIPTION,v_ENHANCEMENT_AUDIT,v_HOST_ID,v_IMPACT,v_SEVERITY_ID,v_PRODUCT_CTI_ID,
v_OPERATIONAL_CTI_ID,v_RAISED_LOCATION_ID,v_STATUS_ID,v_SLA_ID,v_SUMMARY,v_CHANGE_KEY,t_his,v_USERS_AFFECTED,v_A_SRC,'N',CURRENT_TIMESTAMP,v_TICKET_TYPE_ID);
SELECT CONCAT('Inserted Successfully 1 ',v_change_id) as "Result";
COMMIT;
UPDATE SD_CHANGE_TMP SET FLAG = 'Y' WHERE CHANGE_ID = v_CHANGE_ID AND MODIFIED_DATE = v_MODIFIED_DATE;
IF duplicate_key=1 then
begin
select CONCAT('Rejected id and last mod time ',v_change_id, v_modified_date);
UPDATE SD_CHANGE_TMP SET FLAG = 'D' WHERE CHANGE_ID = v_CHANGE_ID AND MODIFIED_DATE = v_MODIFIED_DATE;
end;
else
SELECT CONCAT('Inserted Successfully 2 ',v_change_id) as "Result";
END IF;
SET duplicate_key=0;
END;
if no_data=1 then
leave loop1;
end if;
END inner_block;
IF (done=1) then
leave loop1;
end if;
end outer_block;
select concat('loop ending.....');
IF(t_count = 1000)
THEN
COMMIT;
select t_count;
SET t_count = 0;
ELSE
SET t_count = t_count+1;
END IF;
END LOOP LOOP1;
CLOSE CHG_CUR;
select concat('close the cursor....');
UPDATE TIMELOG SET ETIME = CURRENT_TIMESTAMP WHERE PROCNAME = 'SD_CHANGE';
COMMIT;
END;