MARS-1409

This commit is contained in:
Grzegorz Michalski
2026-03-02 10:15:22 +01:00
parent a13a9d415f
commit 7db10725a0
36 changed files with 1059 additions and 99 deletions

View File

@@ -683,6 +683,64 @@ AS
FROM USER_LOAD_OPERATIONS
WHERE ID = vOperationId;
-- MARS-1409: Extract and validate A_WORKFLOW_HISTORY_KEY from external table
DECLARE
vWorkflowHistoryKey NUMBER;
vWorkflowKeyCount NUMBER;
vWorkflowKeyDistinct NUMBER;
vDynamicSQL VARCHAR2(1000);
BEGIN
-- Build dynamic SQL to count distinct A_WORKFLOW_HISTORY_KEY values
vDynamicSQL := 'SELECT COUNT(*), COUNT(DISTINCT A_WORKFLOW_HISTORY_KEY) FROM ' || vSourceFileReceived.EXTERNAL_TABLE_NAME;
ENV_MANAGER.LOG_PROCESS_EVENT('MARS-1409: Extracting A_WORKFLOW_HISTORY_KEY from external table', 'DEBUG', vParameters);
-- Count total rows and distinct workflow keys
EXECUTE IMMEDIATE vDynamicSQL INTO vWorkflowKeyCount, vWorkflowKeyDistinct;
ENV_MANAGER.LOG_PROCESS_EVENT('MARS-1409: Total rows: ' || vWorkflowKeyCount || ', Distinct A_WORKFLOW_HISTORY_KEY values: ' || vWorkflowKeyDistinct, 'DEBUG', vParameters);
-- Validate workflow key presence and uniqueness
IF vWorkflowKeyDistinct = 0 OR vWorkflowKeyDistinct IS NULL THEN
-- No A_WORKFLOW_HISTORY_KEY found or all values are NULL
vgMsgTmp := ENV_MANAGER.MSG_WORKFLOW_KEY_NULL || ' [File: ' || vSourceFileReceived.SOURCE_FILE_NAME || ']';
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_WORKFLOW_KEY_NULL, vgMsgTmp);
ELSIF vWorkflowKeyDistinct > 1 THEN
-- Multiple different A_WORKFLOW_HISTORY_KEY values found
vgMsgTmp := ENV_MANAGER.MSG_MULTIPLE_WORKFLOW_KEYS || ' [Found: ' || vWorkflowKeyDistinct || ' distinct values in file: ' || vSourceFileReceived.SOURCE_FILE_NAME || ']';
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_MULTIPLE_WORKFLOW_KEYS, vgMsgTmp);
ELSE
-- Exactly one A_WORKFLOW_HISTORY_KEY value - fetch and save it
vDynamicSQL := 'SELECT DISTINCT A_WORKFLOW_HISTORY_KEY FROM ' || vSourceFileReceived.EXTERNAL_TABLE_NAME;
EXECUTE IMMEDIATE vDynamicSQL INTO vWorkflowHistoryKey;
ENV_MANAGER.LOG_PROCESS_EVENT('MARS-1409: Extracted A_WORKFLOW_HISTORY_KEY: ' || vWorkflowHistoryKey, 'DEBUG', vParameters);
-- Update A_SOURCE_FILE_RECEIVED with workflow history key
UPDATE CT_MRDS.A_SOURCE_FILE_RECEIVED
SET A_WORKFLOW_HISTORY_KEY = vWorkflowHistoryKey
WHERE A_SOURCE_FILE_RECEIVED_KEY = pSourceFileReceivedKey;
ENV_MANAGER.LOG_PROCESS_EVENT('MARS-1409: Updated A_SOURCE_FILE_RECEIVED with A_WORKFLOW_HISTORY_KEY: ' || vWorkflowHistoryKey, 'INFO', vParameters);
END IF;
EXCEPTION
WHEN ENV_MANAGER.ERR_WORKFLOW_KEY_NULL THEN
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATION_FAILED');
RAISE;
WHEN ENV_MANAGER.ERR_MULTIPLE_WORKFLOW_KEYS THEN
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATION_FAILED');
RAISE;
WHEN OTHERS THEN
vgMsgTmp := 'MARS-1409: Error extracting A_WORKFLOW_HISTORY_KEY: ' || SQLERRM;
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATION_FAILED');
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_FILE_VALIDATION_FAILED, vgMsgTmp);
END;
-- DBMS_OUTPUT.PUT_LINE(vStatus);
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATED');
ENV_MANAGER.LOG_PROCESS_EVENT('File status changed to VALIDATED','DEBUG', vParameters);
@@ -700,6 +758,18 @@ AS
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATION_FAILED');
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_FILE_VALIDATION_FAILED, vgMsgTmp);
WHEN ENV_MANAGER.ERR_WORKFLOW_KEY_NULL THEN
vgMsgTmp := ENV_MANAGER.MSG_WORKFLOW_KEY_NULL;
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATION_FAILED');
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_WORKFLOW_KEY_NULL, vgMsgTmp);
WHEN ENV_MANAGER.ERR_MULTIPLE_WORKFLOW_KEYS THEN
vgMsgTmp := ENV_MANAGER.MSG_MULTIPLE_WORKFLOW_KEYS;
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATION_FAILED');
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_MULTIPLE_WORKFLOW_KEYS, vgMsgTmp);
WHEN OTHERS THEN
IF SQLCODE = -20404 THEN
vgMsgTmp := ENV_MANAGER.MSG_FILE_NOT_FOUND_ON_CLOUD||cgBL||SQLERRM;