Issue with MySQL Triggers not able to execute cursor with dynamic query

59 Views Asked by At
delimiter $$
CREATE DEFINER = CURRENT_USER TRIGGER `WRT_BEFORE_UPDATE` BEFORE UPDATE ON `WRT` FOR EACH ROW
BEGIN

declare CUR1 cursor for select work_request_type,replace(task_title,'''','$')as task_title,mandatory_critical_task from work_request_detail where work_request_id=new.work_request_id; 
   declare     CUR2 cursor for select trade from work_request_sap_details where work_request_id=new.work_request_id;
     declare    v_work_request_type varchar(100); 
     declare  v_task_title varchar(200); 
     declare  v_mandatory_critical_task varchar(100); 
     declare  v_trade varchar(200); 
     declare  qry_str  varchar(4000);
     declare  v_count decimal(100);
     begin 
       open CUR1; 
       fetch CUR1 into v_work_request_type,v_task_title,v_mandatory_critical_task; 
       open CUR2; 
       fetch CUR2 into v_trade; 
      set v_count=0;
       set qry_str= 'select count(*) from dws_selection_settings where WRT_type=''' || v_work_request_type || '''';
       if(v_task_title is not null and length(trim(v_task_title)) > 0) THEN
          set qry_str = qry_str || ' AND replace(WRT_title,'''''''',''$'')=''' || v_task_title || '''';-- replacing quote symbol with $ if present
       else
         set  qry_str = qry_str || ' AND WRT_title is null';
       END IF;
       if(v_mandatory_critical_task is not null and length(trim(v_mandatory_critical_task)) > 0) THEN
         set  qry_str = qry_str || ' AND mandatory_critical=''' || v_mandatory_critical_task || '''';
       else
          set qry_str = qry_str || ' AND mandatory_critical is null';
       END IF;
       if(new.notification_id is not null and length(trim(new.notification_id)) > 0) THEN
          set qry_str = qry_str || ' AND sap_reference_number=''' || new.notification_id || '''';
       else
         set  qry_str = qry_str || ' AND sap_reference_number is null';
       END IF;
       if(v_trade is not null and length(trim(v_trade)) > 0) THEN
          set qry_str = qry_str || ' AND trade=''' || v_trade || '''';
       else
           set qry_str = qry_str || ' AND trade is null';
       END IF;
       dbms_output.put_line('qry_str' || qry_str);
       
       open search_cursor for qry_str;
       fetch search_cursor into v_count; 
       IF(v_count > 0)THEN
     set      new.auto_select_flag='Y';
           -- update WRT set auto_select_flag='Y' where work_request_id = new.task_id;       
       END IF;
       close CUR1;
       close CUR2;
       close search_cursor;

END
$$
0

There are 0 best solutions below