Files
mars/MARS_Packages/REL01/MARS-1011/WORKFLOW_MANAGER_BODY.sql
Grzegorz Michalski ecd833f682 Init
2026-02-02 10:59:29 +01:00

216 lines
8.3 KiB
MySQL

CREATE OR REPLACE PACKAGE BODY CT_MRDS.WORKFLOW_MANAGER
IS
FUNCTION INIT_WORKFLOW(pServiceName IN VARCHAR2, pWorkflowRunId IN VARCHAR2, pWorkflowName in VARCHAR2)
RETURN NUMBER
IS
vWorkflowHistoryKey NUMBER;
BEGIN
vWorkflowHistoryKey := A_WORKFLOW_HISTORY_KEY_SEQ.NEXTVAL;
INSERT INTO CT_MRDS.A_WORKFLOW_HISTORY (SERVICE_NAME, A_WORKFLOW_HISTORY_KEY, ORCHESTRATION_RUN_ID,
WORKFLOW_NAME, WORKFLOW_START, WORKFLOW_SUCCESSFUL)
VALUES (pServiceName, vWorkflowHistoryKey, pWorkflowRunId,
pWorkflowName, SYSTIMESTAMP, vpRunningStatus);
return vWorkflowHistoryKey;
END INIT_WORKFLOW;
--
-- Overload without service name for backward compatability, to be cleaned up later
--
PROCEDURE FINALISE_WORKFLOW(pWorkflowHistoryKey IN NUMBER, pWorkflowStatus IN VARCHAR2)
IS
BEGIN
FINALISE_WORKFLOW(pWorkflowHistoryKey, NULL, pWorkflowStatus);
END;
PROCEDURE FINALISE_WORKFLOW(pWorkflowHistoryKey IN NUMBER, pServiceName IN VARCHAR2, pWorkflowStatus IN VARCHAR2)
IS
BEGIN
UPDATE CT_MRDS.A_WORKFLOW_HISTORY SET WORKFLOW_SUCCESSFUL = pWorkflowStatus,
WORKFLOW_END = SYSTIMESTAMP
WHERE A_WORKFLOW_HISTORY_KEY = pWorkflowHistoryKey
AND SERVICE_NAME = NVL(pServiceName,SERVICE_NAME);
END FINALISE_WORKFLOW;
FUNCTION INIT_TASK(pTaskRunId IN VARCHAR2, pTaskName in VARCHAR2, pWorkflowHistoryKey IN NUMBER)
RETURN NUMBER
IS
vTaskHistoryKey NUMBER;
BEGIN
vTaskHistoryKey := A_TASK_HISTORY_KEY_SEQ.NEXTVAL;
INSERT INTO CT_MRDS.A_TASK_HISTORY (A_TASK_HISTORY_KEY, TASK_RUN_ID, A_WORKFLOW_HISTORY_KEY,
TASK_NAME, TASK_START, TASK_SUCCESSFUL, SERVICE_NAME)
VALUES (vTaskHistoryKey, pTaskRunId, pWorkflowHistoryKey,
pTaskName, SYSTIMESTAMP, vpRunningStatus, 'ODS');
return vTaskHistoryKey;
END INIT_TASK;
PROCEDURE FINALISE_TASK(pTaskHistoryKey IN NUMBER, pTaskStatus IN VARCHAR2)
IS
BEGIN
UPDATE CT_MRDS.A_TASK_HISTORY SET TASK_SUCCESSFUL = pTaskStatus,
TASK_END = SYSTIMESTAMP
WHERE A_TASK_HISTORY_KEY = pTaskHistoryKey;
END FINALISE_TASK;
-- Internal helper function without COMMIT for use within other functions
FUNCTION STORE_TASK_SOURCE_INFO_INTERNAL(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2, pNumRows IN NUMBER)
RETURN NUMBER
IS
vTaskHistorySourceKey NUMBER;
BEGIN
vTaskHistorySourceKey := A_TASK_HISTORY_SOURCE_KEY_SEQ.NEXTVAL;
INSERT INTO CT_MRDS.A_TASK_HISTORY_SOURCE (A_TASK_HISTORY_SOURCE_KEY, A_TASK_HISTORY_KEY,
SOURCE_NAME, ROW_COUNT)
VALUES (vTaskHistorySourceKey, pTaskHistoryKey,
pSourceName, pNumRows);
RETURN vTaskHistorySourceKey;
END;
FUNCTION STORE_TASK_SOURCE_INFO(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2, pNumRows IN NUMBER)
RETURN NUMBER
IS
vTaskHistorySourceKey NUMBER;
BEGIN
vTaskHistorySourceKey := STORE_TASK_SOURCE_INFO_INTERNAL(pTaskHistoryKey, pSourceName, pNumRows);
COMMIT;
RETURN vTaskHistorySourceKey;
END;
-- Internal helper function without COMMIT for use within other functions
FUNCTION STORE_TASK_TARGET_INFO_INTERNAL(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2,
pNumRowsApplied IN NUMBER, pNumRowsRejected IN NUMBER,
pLoadSuccessful IN VARCHAR2, pServiceName IN VARCHAR2)
RETURN NUMBER
IS
vTaskHistoryTargetKey NUMBER;
BEGIN
vTaskHistoryTargetKey := A_TASK_HISTORY_TARGET_KEY_SEQ.NEXTVAL;
INSERT INTO CT_MRDS.A_TASK_HISTORY_TARGET (A_TASK_HISTORY_TARGET_KEY, A_TASK_HISTORY_KEY,
TARGET_NAME, ROW_COUNT_APPLIED, ROW_COUNT_REJECTED,
LOAD_SUCCESSFUL, SERVICE_NAME)
VALUES (vTaskHistoryTargetKey, pTaskHistoryKey,
pSourceName, pNumRowsApplied, pNumRowsRejected,
pLoadSuccessful, pServiceName);
RETURN vTaskHistoryTargetKey;
END;
FUNCTION STORE_TASK_TARGET_INFO(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2,
pNumRowsApplied IN NUMBER, pNumRowsRejected IN NUMBER,
pLoadSuccessful IN VARCHAR2, pServiceName IN VARCHAR2)
RETURN NUMBER
IS
vTaskHistoryTargetKey NUMBER;
BEGIN
vTaskHistoryTargetKey := STORE_TASK_TARGET_INFO_INTERNAL(
pTaskHistoryKey, pSourceName, pNumRowsApplied,
pNumRowsRejected, pLoadSuccessful, pServiceName
);
COMMIT;
RETURN vTaskHistoryTargetKey;
END;
FUNCTION FINALISE_TASK_WITH_TARGET_INFO(pTaskHistoryKey IN NUMBER, pTaskStatus IN VARCHAR2,
pTargetName IN VARCHAR2, pNumRowsApplied IN NUMBER,
pNumRowsRejected IN NUMBER, pLoadSuccessful IN VARCHAR2,
pServiceName IN VARCHAR2)
RETURN NUMBER
IS
vTaskHistoryTargetKey NUMBER;
BEGIN
-- Store target information using internal function (without COMMIT)
vTaskHistoryTargetKey := STORE_TASK_TARGET_INFO_INTERNAL(
pTaskHistoryKey => pTaskHistoryKey,
pSourceName => pTargetName,
pNumRowsApplied => pNumRowsApplied,
pNumRowsRejected => pNumRowsRejected,
pLoadSuccessful => pLoadSuccessful,
pServiceName => pServiceName
);
-- Finalize the task using existing procedure (no COMMIT in procedure)
FINALISE_TASK(pTaskHistoryKey, pTaskStatus);
-- Single COMMIT for the entire atomic operation
COMMIT;
RETURN vTaskHistoryTargetKey;
END;
PROCEDURE SET_WORKFLOW_PROPERTY(
pWorkflowHistoryKey IN NUMBER
,pServiceName IN VARCHAR2
,pProperty IN VARCHAR2
,pValue IN VARCHAR2
) IS
BEGIN
INSERT INTO CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY (A_WORKFLOW_HISTORY_KEY, SERVICE_NAME, PROPERTY, VALUE)
VALUES (pWorkflowHistoryKey, pServiceName, pProperty, pValue);
END;
FUNCTION GET_WORKFLOW_PROPERTY(
pWorkflowHistoryKey IN NUMBER
,pServiceName IN VARCHAR2
,pProperty IN VARCHAR2
) RETURN VARCHAR2
IS
vValue CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY.VALUE%TYPE;
BEGIN
SELECT VALUE
INTO vValue
FROM CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY
WHERE A_WORKFLOW_HISTORY_KEY = pWorkflowHistoryKey
AND SERVICE_NAME = pServiceName
AND PROPERTY = pProperty;
RETURN vValue;
END;
----------------------------------------------------------------------------------------------------
-- PACKAGE VERSION MANAGEMENT FUNCTIONS IMPLEMENTATION
----------------------------------------------------------------------------------------------------
FUNCTION GET_VERSION
RETURN VARCHAR2
IS
BEGIN
RETURN PACKAGE_VERSION;
END GET_VERSION;
----------------------------------------------------------------------------------------------------
FUNCTION GET_BUILD_INFO
RETURN VARCHAR2
IS
BEGIN
RETURN ENV_MANAGER.GET_PACKAGE_VERSION_INFO(
pPackageName => 'WORKFLOW_MANAGER',
pVersion => PACKAGE_VERSION,
pBuildDate => PACKAGE_BUILD_DATE,
pAuthor => PACKAGE_AUTHOR
);
END GET_BUILD_INFO;
----------------------------------------------------------------------------------------------------
FUNCTION GET_VERSION_HISTORY
RETURN VARCHAR2
IS
BEGIN
RETURN ENV_MANAGER.FORMAT_VERSION_HISTORY(
pPackageName => 'WORKFLOW_MANAGER',
pVersionHistory => VERSION_HISTORY
);
END GET_VERSION_HISTORY;
----------------------------------------------------------------------------------------------------
END WORKFLOW_MANAGER;
/