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_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 CONSOLA 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 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_TIME_STAMP 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; 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 );END;'; -- TRACE DE LA SENTENCIA v_sentence_action_params := 'BEGIN ' || v_procedure || '( i_codcaso => ' || v_case_id || ' , ' || 'i_action_id =>' || v_action_id || ');END;'; BEGIN --EJECUTA LA ACCION EXECUTE IMMEDIATE v_sentence_action USING v_case_id, v_action_id; -- 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 ); EXCEPTION WHEN OTHERS THEN BEGIN EXCEPTION_HANDLER (i_error_procedure => v_procedure, o_return_number => v_err_cod, o_return_message => v_err_msg); END; END; BEGIN -- 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 ); -- LIBERA LOS CASOS BLOQUEADOS DELETE FROM ASDK_RULES_CONCURRENCY WHERE FL_INT_ITEM_ID = v_case_id; END; COMMIT; END; FETCH cur_actions INTO v_rule_id, v_case_id, v_action_id, v_procedure, v_table_id, v_print_mark; END LOOP; CLOSE cur_actions; EXCEPTION WHEN OTHERS THEN BEGIN EXCEPTION_HANDLER (i_error_procedure => 'PRC_ASDK_RULES_MODIFY_ITEMS', o_return_number => v_err_cod, o_return_message => v_err_msg ); END; END;