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
$$
Issue with MySQL Triggers not able to execute cursor with dynamic query
59 Views Asked by Misha At
0