MARS-1409
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user