Refactor MARS-1409 SQL scripts for workflow history key management
- Added checks for existing columns before adding or dropping A_WORKFLOW_HISTORY_KEY in relevant scripts to prevent errors. - Updated rollback scripts to ensure proper restoration of previous states, including recompilation of dependent packages. - Introduced a diagnostic script to assess the status of workflow keys against ODS tables, providing detailed reporting on discrepancies. - Adjusted trigger definitions to accommodate new workflow names and ensure correct handling of workflow history. - Modified master rollback script to streamline the rollback process and improve clarity in step descriptions.
This commit is contained in:
@@ -1,39 +1,55 @@
|
||||
-- ====================================================================
|
||||
WHENEVER SQLERROR CONTINUE
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON ct_ods.a_load_history TO ct_mrds;
|
||||
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||
|
||||
-- ============================================================================
|
||||
-- TRG_A_WORKFLOW_HISTORY Trigger Definition
|
||||
-- ====================================================================
|
||||
-- Purpose: Trigger to:
|
||||
-- 1. Insert workflow completion data to CT_ODS.A_LOAD_HISTORY
|
||||
-- 2. MARS-1409: Mark linked A_SOURCE_FILE_RECEIVED records as INGESTED
|
||||
-- ====================================================================
|
||||
-- ============================================================================
|
||||
|
||||
-- Drop old trigger (different name) to ensure clean rename; ignore error if not exists
|
||||
WHENEVER SQLERROR CONTINUE
|
||||
drop TRIGGER ct_mrds.a_workflow_history;
|
||||
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||
|
||||
|
||||
CREATE OR REPLACE EDITIONABLE TRIGGER "CT_MRDS"."TRG_A_WORKFLOW_HISTORY"
|
||||
AFTER INSERT OR UPDATE OF workflow_successful ON CT_MRDS.A_WORKFLOW_HISTORY
|
||||
AFTER INSERT OR UPDATE OF workflow_successful ON ct_mrds.a_workflow_history
|
||||
REFERENCING NEW AS new OLD AS old
|
||||
FOR EACH ROW
|
||||
DECLARE
|
||||
v_workflow_name VARCHAR2(128);
|
||||
v_wla_id NUMBER;
|
||||
BEGIN
|
||||
-- Original logic: Insert into CT_ODS.A_LOAD_HISTORY for specific ODS workflows
|
||||
IF :new.workflow_name IN ('w_ODS_LM_STANDING_FACILITIES', 'w_ODS_CSDB_DEBT', 'w_ODS_CSDB_DEBT_DAILY', 'w_ODS_CSDB_RATINGS_FULL') AND :new.service_name = 'ODS' THEN
|
||||
IF :new.workflow_successful <> :old.workflow_successful AND :new.workflow_successful = 'Y' THEN
|
||||
IF :new.workflow_name = 'w_ODS_LM_STANDING_FACILITIES' THEN
|
||||
v_workflow_name := 'w_ODS_LM_STANDING_FACILITY';
|
||||
IF :new.service_name = 'ODS' AND :new.workflow_name IN (
|
||||
'w_ODS_LM_STANDING_FACILITIES', 'w_ODS_CSDB_DEBT', 'w_ODS_CSDB_DEBT_DAILY', 'w_ODS_CSDB_RATINGS_FULL',
|
||||
'w_ODS_TMS_LIMIT_ACCESS', 'w_ODS_TMS_PORTFOLIO_ACCESS', 'w_ODS_TMS_PORTFOLIO_TREE',
|
||||
'w_ODS_TMS_COLLATERAL_INVENTORY', 'w_ODS_TOP_FULLBIDARRAY_COMPILED', 'w_ODS_TOP_ANNOUNCEMENT',
|
||||
'w_ODS_TOP_ALLOTMENT_MODIFICATIONS', 'w_ODS_TOP_ALLOTMENT', 'w_ODS_CEPH_PRICING', 'w_ODS_C2D_MPEC'
|
||||
) THEN
|
||||
IF :new.workflow_successful = 'Y' AND :new.workflow_successful <> NVL(:old.workflow_successful, 'N') THEN
|
||||
CASE
|
||||
WHEN :new.workflow_name = 'w_ODS_LM_STANDING_FACILITIES' THEN v_workflow_name := 'w_ODS_LM_STANDING_FACILITY';
|
||||
WHEN :new.workflow_name = 'w_ODS_TMS_LIMIT_ACCESS' THEN v_workflow_name := 'w_ODS_TMS_RAR_LIMITACCESS';
|
||||
WHEN :new.workflow_name = 'w_ODS_TMS_PORTFOLIO_ACCESS' THEN v_workflow_name := 'w_ODS_TMS_RAR_PORTFOLIOACCESS';
|
||||
WHEN :new.workflow_name = 'w_ODS_TMS_PORTFOLIO_TREE' THEN v_workflow_name := 'w_ODS_TMS_RAR_PORTFOLIOTREE';
|
||||
WHEN :new.workflow_name = 'w_ODS_TMS_COLLATERAL_INVENTORY' THEN v_workflow_name := 'w_ODS_TMS_RAR_RARCOLLATERALINVENTORY';
|
||||
WHEN :new.workflow_name = 'w_ODS_TOP_FULLBIDARRAY_COMPILED' THEN v_workflow_name := 'w_ODS_TOP_FULLBIDARRAY_COMPILED';
|
||||
WHEN :new.workflow_name = 'w_ODS_TOP_ANNOUNCEMENT' THEN v_workflow_name := 'w_ODS_TOP_ANNOUNCEMENT';
|
||||
WHEN :new.workflow_name = 'w_ODS_TOP_ALLOTMENT_MODIFICATIONS' THEN v_workflow_name := 'w_ODS_TOP_ALLOTMENT_MODIFICATIONS';
|
||||
WHEN :new.workflow_name = 'w_ODS_TOP_ALLOTMENT' THEN v_workflow_name := 'w_ODS_TOP_ALLOTMENT';
|
||||
WHEN :new.workflow_name = 'w_ODS_CEPH_PRICING' THEN v_workflow_name := 'w_ODS_CEPH_PRICING';
|
||||
WHEN :new.workflow_name = 'w_ODS_C2D_MPEC' THEN v_workflow_name := 'w_ODS_C2D_MPEC';
|
||||
ELSE
|
||||
v_workflow_name := :new.workflow_name;
|
||||
END IF;
|
||||
BEGIN
|
||||
v_wla_id := TO_NUMBER(:new.orchestration_run_id);
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
NULL;
|
||||
END;
|
||||
INSERT INTO CT_ODS.A_LOAD_HISTORY (
|
||||
a_etl_load_set_key, workflow_name, infa_run_id, load_start, load_end,
|
||||
exdi_appl_req_id, exdi_correlation_id, load_successful, wla_run_id, dq_flag
|
||||
END CASE;
|
||||
BEGIN
|
||||
v_wla_id := TO_NUMBER(:new.orchestration_run_id);
|
||||
EXCEPTION WHEN OTHERS THEN NULL;
|
||||
END;
|
||||
INSERT INTO ct_ods.a_load_history (
|
||||
a_etl_load_set_key, workflow_name, infa_run_id, load_start, load_end, exdi_appl_req_id, exdi_correlation_id, load_successful, wla_run_id, dq_flag
|
||||
) VALUES (
|
||||
:new.a_workflow_history_key, v_workflow_name, NULL, :new.workflow_start, :new.workflow_end,
|
||||
NULL, NULL, :new.workflow_successful, v_wla_id, 'F'
|
||||
:new.a_workflow_history_key, v_workflow_name, NULL, :new.workflow_start, :new.workflow_end, NULL, NULL, :new.workflow_successful, v_wla_id, 'F'
|
||||
);
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
Reference in New Issue
Block a user