create or replace PROCEDURE PRC_ASDK_RULES_MODIFY_ITEMS AS v_sentence_action VARCHAR2 (4000); v_sentence_action_params VARCHAR2 (4000); v_count_case_modify NUMBER; v_timestamp TIMESTAMP; v_rule_id NUMBER; v_case_id NUMBER; v_action_id NUMBER; v_table_id NUMBER; -- Tipo de registro: Incidente, requerimiento, cambio o problema v_err_cod NUMBER; v_procedure VARCHAR2 (255); v_print_mark VARCHAR2 (4000); v_err_msg VARCHAR2 (4000); v_date_started TIMESTAMP; -- OBTIENE LOS CASOS PARA LOS QUE APLICA LA ACCION, QUE NO ESTAN ABIERTOS EN LA CONSOLA0 CURSOR cur_actions IS SELECT fl_int_rule_id, fl_int_case_id, fl_int_action_id, fl_str_procedure, fl_int_table_id, fl_str_print_mark, fl_exec_timestamp FROM ASDK_RULES_MODIFY_ITEMS a LEFT JOIN ASDK_CONCURRENCY b ON a.fl_int_case_id = TO_NUMBER(b.fl_str_primary_key) AND CASE fl_int_table_id WHEN 1 THEN 'ASDK_INCIDENT' WHEN 2 THEN 'ASDK_PROBLEM' WHEN 3 THEN 'ASDK_CHANGE' WHEN 13 THEN 'ASDK_TASK' WHEN 15 THEN 'ASDK_SERVICE_CALL' END = b.fl_str_table_name WHERE b.fl_str_primary_key IS NULL ORDER BY fl_int_case_id, fl_exec_timestamp ASC; BEGIN -- Recorre las acciones OPEN cur_actions; FETCH cur_actions INTO v_rule_id, v_case_id, v_action_id, v_procedure, v_table_id, v_print_mark, v_timestamp; WHILE (cur_actions%FOUND) LOOP BEGIN SELECT SYSDATE INTO v_date_started FROM DUAL; -- BLOQUEA EL CASO PARA EJECUTAR LA ACCION DE LA REGLA INSERT INTO ASDK_RULES_CONCURRENCY ( fl_int_item_id, fl_str_table_name, fl_dt_start_date, fl_dt_last_access, fl_int_app_id, fl_int_user_id ) VALUES ( v_case_id, CASE v_table_id WHEN 1 THEN 'ASDK_INCIDENT' WHEN 2 THEN 'ASDK_PROBLEM' WHEN 3 THEN 'ASDK_CHANGE' WHEN 13 THEN 'ASDK_TASK' WHEN 15 THEN 'ASDK_SERVICE_CALL' END, v_date_started, SYSDATE, 13, 1 ); v_sentence_action := 'BEGIN ' || v_procedure || '(i_codcaso => :1, i_action_id => :2, i_timestamp => :3); END;'; -- TRACE DE LA SENTENCIA v_sentence_action_params := 'BEGIN ' || v_procedure || '(i_codcaso => ' || v_case_id || ', ' || 'i_action_id =>' || v_action_id || ', ' || 'i_timestamp =>' || v_timestamp || '); END;'; --EJECUTA LA ACCION EXECUTE IMMEDIATE v_sentence_action USING v_case_id, v_action_id, v_timestamp; -- INSERTA MARCA DE LA ACCION EJECUTADA INSERT INTO ASDK_RULES_EXECUTED_ACTION ( exec_id, case_id, case_type_id, rule_id, action_id, executed_date ) VALUES ( SQ_ASDK_RULES_EXECUTED_ACTION.NEXTVAL, v_case_id, v_table_id, v_rule_id, v_action_id, LOCALTIMESTAMP ); -- INSERTA EL HISTORICO DE CADA ACCION INSERT INTO ASDK_RULES_EXECUTED_HIST ( caseid, ruleid, row_timestamp, started, finished, tableid, sql_condition, sql_action, db_error ) VALUES ( v_case_id, v_rule_id, LOCALTIMESTAMP, v_date_started, LOCALTIMESTAMP, v_table_id, v_print_mark, v_sentence_action_params, v_err_msg ); EXCEPTION WHEN OTHERS THEN EXCEPTION_HANDLER ( i_error_procedure => v_procedure, o_return_number => v_err_cod, o_return_message => v_err_msg ); ROLLBACK; END; DELETE FROM ASDK_RULES_CONCURRENCY WHERE FL_INT_ITEM_ID = v_case_id; COMMIT; FETCH cur_actions INTO v_rule_id, v_case_id, v_action_id, v_procedure, v_table_id, v_print_mark, v_timestamp; END LOOP; CLOSE cur_actions; END;