开发者

Records are not inserting in to main table while running the mysql stored procedure

Im migrating procedures from oracle to mysql.In that records are not inserting into the main table.But im getting print msg as inserted sucessfully.Im not understanding what's the issue going on here.Plz help me with this issue. Here is my procedure code: In my procedure im declaring the cursor which has flag value 'N' in SD_CHANGE_TMP table.After that i have done some calculations.Based on these values im inserting into main table i.e SD_CHANGE table.Procedure is executed successfully.And im not getting syntax errors.But data is not inserted after calling the procedure.Plz help me out.....

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_L开发者_如何学JAVAOCATION_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;


IDFMA - Insufficient Data For Meaningful Answer

You have not provided nearly enough information for us to help you. Write up a clear description of your issue, provide structures and sample data etc...

delimiter ;

drop procedure if exists insert_sd_change;

delimiter #

-- took a wild stab at your datatypes

create procedure insert_sd_change
(
in p_change_id int unsigned, 
in p_modified_date datetime, 
in p_plan_start_date datetime, 
in p_plan_end_date datetime, 
in p_actual_end_date datetime, 
in p_actual_start_date datetime,
in p_approval_status_id tinyint unsigned, 
in p_assigned_to_id int unsigned, 
in p_change_owner_id int unsigned, 
in p_closure_code_id tinyint unsigned, 
in p_create_date datetime, 
in p_created_by_id int unsigned,
in p_description varchar(255), 
in p_enhancement_audit tinyint unsigned, 
in p_host_id int unsigned, 
in p_impact varchar(255), 
in p_severity_id int unsigned, 
in p_product_cti_id int unsigned, 
in p_operational_cti_id int unsigned,
in p_raised_location_id int unsigned, 
in p_status_id tinyint unsigned, 
in p_sla_id smallint unsigned, 
in p_summary varchar(255), 
in p_change_key int unsigned, 
in p_his_flag tinyint unsigned, 
in p_users_affected int unsigned, 
in p_a_src varchar(255),
in p_ticket_type_id tinyint unsigned
)
proc_main:begin

-- p_ prefix for parameters, v_ prefix for local variables !

declare v_duplicate_key tinyint unsigned default 0;

if not exists (select 1 from sd_change where change_id = p_change_id and modified_date = p_modified_date) then

  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
  (
  p_change_id, p_modified_date, p_plan_start_date, p_plan_end_date, p_actual_end_date, p_actual_start_date,
  p_approval_status_id, p_assigned_to_id, p_change_owner_id, p_closure_code_id, p_create_date, p_created_by_id,
  p_description, p_enhancement_audit, p_host_id, p_impact, p_severity_id, p_product_cti_id, p_operational_cti_id,
  p_raised_location_id, p_status_id, p_sla_id, p_summary, p_change_key, p_his_flag, p_users_affected, p_a_src,
  'N', now(), p_ticket_type_id
  );

  update sd_change_tmp set flag = 'Y' where change_id = p_change_id and modified_date = p_modified_date;

else

 set v_duplicate_key = 1;

 update sd_change_tmp set flag = 'D' where change_id = p_change_id and modified_date = p_modified_date;

end if;

end proc_main#

delimiter ;

call insert_sd_change(...);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜