This commit is contained in:
Grzegorz Michalski
2026-02-02 10:59:29 +01:00
commit ecd833f682
679 changed files with 122717 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
SET SERVEROUTPUT ON;
SET ECHO ON;
prompt ========================================
prompt Installing WORKFLOW_MANAGER Package Specification
prompt MARS-1011: Update WORKFLOW_MANAGER v1.7.1
prompt ========================================
@@WORKFLOW_MANAGER_SPEC.sql
prompt ========================================
prompt WORKFLOW_MANAGER Package Specification installed successfully
prompt ========================================

View File

@@ -0,0 +1,14 @@
SET SERVEROUTPUT ON;
SET ECHO ON;
prompt ========================================
prompt Installing WORKFLOW_MANAGER Package Body
prompt MARS-1011: Update WORKFLOW_MANAGER v1.7.1
prompt Adding SERVICE_NAME='ODS' to INIT_TASK function
prompt ========================================
@@WORKFLOW_MANAGER_BODY.sql
prompt ========================================
prompt WORKFLOW_MANAGER Package Body installed successfully
prompt ========================================

View File

@@ -0,0 +1,24 @@
SET SERVEROUTPUT ON;
SET ECHO ON;
prompt ========================================
prompt Verifying WORKFLOW_MANAGER Package Installation
prompt MARS-1011: Update WORKFLOW_MANAGER v1.7.1
prompt ========================================
prompt Checking package compilation status...
SELECT object_name, object_type, status
FROM user_objects
WHERE object_name = 'WORKFLOW_MANAGER'
AND object_type IN ('PACKAGE', 'PACKAGE BODY');
prompt Checking package version...
SELECT CT_MRDS.WORKFLOW_MANAGER.GET_VERSION() AS VERSION FROM DUAL;
prompt Checking build info...
SELECT CT_MRDS.WORKFLOW_MANAGER.GET_BUILD_INFO() AS BUILD_INFO FROM DUAL;
prompt ========================================
prompt WORKFLOW_MANAGER Package verification completed
prompt Expected version: 1.7.1
prompt ========================================

View File

@@ -0,0 +1,32 @@
SET SERVEROUTPUT ON;
SET ECHO ON;
prompt ========================================
prompt Tracking WORKFLOW_MANAGER Package Version
prompt MARS-1011: Record version 1.7.1 in tracking system
prompt ========================================
BEGIN
DBMS_OUTPUT.PUT_LINE('Tracking WORKFLOW_MANAGER version...');
CT_MRDS.ENV_MANAGER.TRACK_PACKAGE_VERSION(
pPackageOwner => 'CT_MRDS',
pPackageName => 'WORKFLOW_MANAGER',
pPackageVersion => CT_MRDS.WORKFLOW_MANAGER.PACKAGE_VERSION,
pPackageBuildDate => CT_MRDS.WORKFLOW_MANAGER.PACKAGE_BUILD_DATE,
pPackageAuthor => CT_MRDS.WORKFLOW_MANAGER.PACKAGE_AUTHOR
);
DBMS_OUTPUT.PUT_LINE('WORKFLOW_MANAGER version tracked successfully.');
-- Display current version info
DBMS_OUTPUT.PUT_LINE('Current Version: ' || CT_MRDS.WORKFLOW_MANAGER.GET_VERSION());
DBMS_OUTPUT.PUT_LINE('Build Info: ' || CT_MRDS.WORKFLOW_MANAGER.GET_BUILD_INFO());
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR tracking WORKFLOW_MANAGER: ' || SQLERRM);
RAISE;
END;
/
prompt ========================================
prompt WORKFLOW_MANAGER Package version tracking completed
prompt ========================================

View File

@@ -0,0 +1,201 @@
SET SERVEROUTPUT ON;
SET ECHO ON;
prompt ========================================
prompt Rollback: WORKFLOW_MANAGER Package Body
prompt MARS-1011: Rollback to version 1.7.0 (Remove SERVICE_NAME from INIT_TASK)
prompt ========================================
-- Create package body with INIT_TASK without SERVICE_NAME (rollback to v1.7.0 behavior)
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;
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;
-- ROLLBACK: INIT_TASK without SERVICE_NAME (version 1.7.0 behavior)
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)
VALUES (vTaskHistoryKey, pTaskRunId, pWorkflowHistoryKey,
pTaskName, SYSTIMESTAMP, vpRunningStatus);
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;
-- Other functions remain the same as current version
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;
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
vTaskHistoryTargetKey := STORE_TASK_TARGET_INFO_INTERNAL(
pTaskHistoryKey => pTaskHistoryKey,
pSourceName => pTargetName,
pNumRowsApplied => pNumRowsApplied,
pNumRowsRejected => pNumRowsRejected,
pLoadSuccessful => pLoadSuccessful,
pServiceName => pServiceName
);
FINALISE_TASK(pTaskHistoryKey, pTaskStatus);
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;
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;
/
prompt ========================================
prompt WORKFLOW_MANAGER Package Body rolled back to v1.7.0
prompt INIT_TASK function no longer includes SERVICE_NAME
prompt ========================================

View File

@@ -0,0 +1,78 @@
SET SERVEROUTPUT ON;
SET ECHO ON;
prompt ========================================
prompt Rollback: WORKFLOW_MANAGER Package Specification
prompt MARS-1011: Rollback to version 1.7.0 (2025-10-31)
prompt ========================================
-- Rollback WORKFLOW_MANAGER specification to version 1.7.0
CREATE OR REPLACE PACKAGE CT_MRDS.WORKFLOW_MANAGER
IS
-- Package Version Information (Semantic Versioning: MAJOR.MINOR.PATCH)
PACKAGE_VERSION CONSTANT VARCHAR2(10) := '1.7.0';
PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2025-10-31 16:00:00';
PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
-- Version History (Latest changes first)
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
'1.7.0 (2025-10-31): Added FINALISE_TASK_WITH_TARGET_INFO function for atomic task completion with target info' || CHR(13)||CHR(10) ||
'1.6.0 (2025-10-31): Converted STORE_TASK_SOURCE_INFO and STORE_TASK_TARGET_INFO from procedures to functions returning sequence keys' || CHR(13)||CHR(10) ||
'1.5.0 (2025-10-22): Added package versioning system using centralized ENV_MANAGER functions' || CHR(13)||CHR(10) ||
'1.2.0 (2025-10-05): Added workflow property management (SET/GET_WORKFLOW_PROPERTY)' || CHR(13)||CHR(10) ||
'1.0.0 (2025-09-10): Initial release with workflow and task lifecycle management';
-- Line break constant for consistent CRLF formatting across Windows environments
cgBL CONSTANT VARCHAR2(2) := CHR(13)||CHR(10);
FUNCTION INIT_WORKFLOW(pServiceName IN VARCHAR2, pWorkflowRunId IN VARCHAR2, pWorkflowName in VARCHAR2)
RETURN NUMBER;
PROCEDURE FINALISE_WORKFLOW(pWorkflowHistoryKey IN NUMBER, pWorkflowStatus IN VARCHAR2);
PROCEDURE FINALISE_WORKFLOW(pWorkflowHistoryKey IN NUMBER, pServiceName IN VARCHAR2, pWorkflowStatus IN VARCHAR2);
FUNCTION INIT_TASK(pTaskRunId IN VARCHAR2, pTaskName in VARCHAR2, pWorkflowHistoryKey IN NUMBER)
RETURN NUMBER;
PROCEDURE FINALISE_TASK(pTaskHistoryKey IN NUMBER, pTaskStatus IN VARCHAR2);
FUNCTION STORE_TASK_SOURCE_INFO(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2, pNumRows IN NUMBER)
RETURN NUMBER;
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;
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;
vpRunningStatus CT_MRDS.A_WORKFLOW_HISTORY.WORKFLOW_SUCCESSFUL%TYPE := 'R';
PROCEDURE SET_WORKFLOW_PROPERTY(
pWorkflowHistoryKey IN NUMBER
,pServiceName IN VARCHAR2
,pProperty IN VARCHAR2
,pValue IN VARCHAR2
);
FUNCTION GET_WORKFLOW_PROPERTY(
pWorkflowHistoryKey IN NUMBER
,pServiceName IN VARCHAR2
,pProperty IN VARCHAR2)
RETURN VARCHAR2;
FUNCTION GET_VERSION RETURN VARCHAR2;
FUNCTION GET_BUILD_INFO RETURN VARCHAR2;
FUNCTION GET_VERSION_HISTORY RETURN VARCHAR2;
END WORKFLOW_MANAGER;
/
prompt ========================================
prompt WORKFLOW_MANAGER Package Specification rolled back to v1.7.0
prompt ========================================

View File

@@ -0,0 +1,36 @@
SET SERVEROUTPUT ON;
SET ECHO ON;
prompt ========================================
prompt Tracking WORKFLOW_MANAGER Package Version After Rollback
prompt MARS-1011: Record rollback to version 1.7.0
prompt ========================================
BEGIN
DBMS_OUTPUT.PUT_LINE('Tracking WORKFLOW_MANAGER rollback version...');
-- Track the rolled-back version (1.7.0)
CT_MRDS.ENV_MANAGER.TRACK_PACKAGE_VERSION(
pPackageOwner => 'CT_MRDS',
pPackageName => 'WORKFLOW_MANAGER',
pPackageVersion => CT_MRDS.WORKFLOW_MANAGER.PACKAGE_VERSION,
pPackageBuildDate => CT_MRDS.WORKFLOW_MANAGER.PACKAGE_BUILD_DATE,
pPackageAuthor => CT_MRDS.WORKFLOW_MANAGER.PACKAGE_AUTHOR
);
DBMS_OUTPUT.PUT_LINE('WORKFLOW_MANAGER rollback version tracked successfully.');
-- Display rollback version info
DBMS_OUTPUT.PUT_LINE('Rollback Version: ' || CT_MRDS.WORKFLOW_MANAGER.GET_VERSION());
DBMS_OUTPUT.PUT_LINE('Build Info: ' || CT_MRDS.WORKFLOW_MANAGER.GET_BUILD_INFO());
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR tracking WORKFLOW_MANAGER rollback: ' || SQLERRM);
RAISE;
END;
/
prompt ========================================
prompt WORKFLOW_MANAGER Package rollback version tracking completed
prompt Rolled back to version 1.7.0 (2025-10-31)
prompt ========================================

View File

@@ -0,0 +1,54 @@
# MARS-1011: WORKFLOW_MANAGER Package Update v1.7.1
## Description
Updates WORKFLOW_MANAGER package to version 1.7.1, adding automatic SERVICE_NAME='ODS' assignment in INIT_TASK function.
## Changes
- Modified `INIT_TASK` function to automatically set `SERVICE_NAME='ODS'` when inserting into `CT_MRDS.A_TASK_HISTORY`
- Updated package version from 1.7.0 to 1.7.1
- Updated build date to 2025-11-18
## Installation Files
1. `01_MARS_1011_install_CT_MRDS_WORKFLOW_MANAGER_SPEC.sql` - Package specification
2. `02_MARS_1011_install_CT_MRDS_WORKFLOW_MANAGER_BODY.sql` - Package body with SERVICE_NAME modification
3. `03_MARS_1011_verify_CT_MRDS_WORKFLOW_MANAGER.sql` - Verification and version check
4. `04_MARS_1011_track_CT_MRDS_WORKFLOW_MANAGER_version.sql` - Package version tracking in A_PACKAGE_VERSION_TRACKING
## Rollback Files
1. `91_MARS_1011_rollback_CT_MRDS_WORKFLOW_MANAGER_SPEC.sql` - Rollback package specification to v1.7.0
2. `91_MARS_1011_rollback_CT_MRDS_WORKFLOW_MANAGER_BODY.sql` - Rollback package body (removes SERVICE_NAME from INIT_TASK)
3. `92_MARS_1011_track_rollback_version.sql` - Track rollback version in A_PACKAGE_VERSION_TRACKING
## Installation
```bash
sqlplus CT_MRDS/password@database @install_mars1011.sql
```
## Rollback
```bash
sqlplus CT_MRDS/password@database @rollback_mars1011.sql
```
## Dependencies
- Requires CT_MRDS schema
- Requires A_TASK_HISTORY table with SERVICE_NAME column
- Requires ENV_MANAGER package for version management functions
- Requires A_PACKAGE_VERSION_TRACKING table for version tracking
## Testing
After installation, verify:
1. Package compiles successfully (check `03_MARS_1011_verify_CT_MRDS_WORKFLOW_MANAGER.sql` output)
2. Version shows as 1.7.1
3. INIT_TASK function properly inserts SERVICE_NAME='ODS'
4. Package version is tracked in A_PACKAGE_VERSION_TRACKING table
5. Check tracking: `SELECT * FROM CT_MRDS.A_PACKAGE_VERSION_TRACKING WHERE PACKAGE_NAME='WORKFLOW_MANAGER' ORDER BY TRACKING_DATE DESC;`
After rollback, verify:
1. Version shows as 1.7.0 (rolled back)
2. INIT_TASK function no longer includes SERVICE_NAME column
3. Rollback is tracked in A_PACKAGE_VERSION_TRACKING with CHANGE_STATUS='ROLLBACK'
## Impact
- Low risk change - only affects new task records
- Backward compatible - existing functionality unchanged
- No breaking changes to function signatures

View File

@@ -0,0 +1,216 @@
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;
/

View File

@@ -0,0 +1,100 @@
CREATE OR REPLACE PACKAGE CT_MRDS.WORKFLOW_MANAGER
IS
-- Package Version Information (Semantic Versioning: MAJOR.MINOR.PATCH)
PACKAGE_VERSION CONSTANT VARCHAR2(10) := '1.7.1';
PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2025-11-18 12:00:00';
PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
-- Version History (Latest changes first)
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
'1.7.1 (2025-11-18): Added SERVICE_NAME column with hardcoded ''ODS'' value to INIT_TASK function' || CHR(13)||CHR(10) ||
'1.7.0 (2025-10-31): Added FINALISE_TASK_WITH_TARGET_INFO function for atomic task completion with target info' || CHR(13)||CHR(10) ||
'1.6.0 (2025-10-31): Converted STORE_TASK_SOURCE_INFO and STORE_TASK_TARGET_INFO from procedures to functions returning sequence keys' || CHR(13)||CHR(10) ||
'1.5.0 (2025-10-22): Added package versioning system using centralized ENV_MANAGER functions' || CHR(13)||CHR(10) ||
'1.2.0 (2025-10-05): Added workflow property management (SET/GET_WORKFLOW_PROPERTY)' || CHR(13)||CHR(10) ||
'1.0.0 (2025-09-10): Initial release with workflow and task lifecycle management';
-- Line break constant for consistent CRLF formatting across Windows environments
cgBL CONSTANT VARCHAR2(2) := CHR(13)||CHR(10);
FUNCTION INIT_WORKFLOW(pServiceName IN VARCHAR2, pWorkflowRunId IN VARCHAR2, pWorkflowName in VARCHAR2)
RETURN NUMBER;
PROCEDURE FINALISE_WORKFLOW(pWorkflowHistoryKey IN NUMBER, pWorkflowStatus IN VARCHAR2);
PROCEDURE FINALISE_WORKFLOW(pWorkflowHistoryKey IN NUMBER, pServiceName IN VARCHAR2, pWorkflowStatus IN VARCHAR2);
FUNCTION INIT_TASK(pTaskRunId IN VARCHAR2, pTaskName in VARCHAR2, pWorkflowHistoryKey IN NUMBER)
RETURN NUMBER;
PROCEDURE FINALISE_TASK(pTaskHistoryKey IN NUMBER, pTaskStatus IN VARCHAR2);
FUNCTION STORE_TASK_SOURCE_INFO(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2, pNumRows IN NUMBER)
RETURN NUMBER;
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;
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;
vpRunningStatus CT_MRDS.A_WORKFLOW_HISTORY.WORKFLOW_SUCCESSFUL%TYPE := 'R';
--
-- Set and get information on workflow level
--
PROCEDURE SET_WORKFLOW_PROPERTY(
pWorkflowHistoryKey IN NUMBER
,pServiceName IN VARCHAR2
,pProperty IN VARCHAR2
,pValue IN VARCHAR2
);
FUNCTION GET_WORKFLOW_PROPERTY(
pWorkflowHistoryKey IN NUMBER
,pServiceName IN VARCHAR2
,pProperty IN VARCHAR2)
RETURN VARCHAR2;
---------------------------------------------------------------------------------------------------------------------------
-- PACKAGE VERSION MANAGEMENT FUNCTIONS
---------------------------------------------------------------------------------------------------------------------------
/**
* @name GET_VERSION
* @desc Returns the current version number of the WORKFLOW_MANAGER package.
* Uses semantic versioning format (MAJOR.MINOR.PATCH).
* @example SELECT WORKFLOW_MANAGER.GET_VERSION() FROM DUAL;
* @ex_rslt 1.5.0
**/
FUNCTION GET_VERSION RETURN VARCHAR2;
/**
* @name GET_BUILD_INFO
* @desc Returns comprehensive build information including version, build date, and author.
* Uses centralized ENV_MANAGER.GET_PACKAGE_VERSION_INFO function.
* @example SELECT WORKFLOW_MANAGER.GET_BUILD_INFO() FROM DUAL;
* @ex_rslt Package: WORKFLOW_MANAGER
* Version: 1.5.0
* Build Date: 2025-10-22 17:00:00
* Author: Grzegorz Michalski
**/
FUNCTION GET_BUILD_INFO RETURN VARCHAR2;
/**
* @name GET_VERSION_HISTORY
* @desc Returns complete version history with all releases and changes.
* Uses centralized ENV_MANAGER.FORMAT_VERSION_HISTORY function.
* @example SELECT WORKFLOW_MANAGER.GET_VERSION_HISTORY() FROM DUAL;
* @ex_rslt WORKFLOW_MANAGER Version History:
* 1.5.0 (2025-10-22): Added package versioning system...
**/
FUNCTION GET_VERSION_HISTORY RETURN VARCHAR2;
END WORKFLOW_MANAGER;
/

View File

@@ -0,0 +1,40 @@
WHENEVER SQLERROR EXIT FAILURE
SET SERVEROUTPUT ON
SET TIMING ON
SET ECHO ON
SET HEADING OFF
SET FEEDBACK ON
SET VERIFY OFF
-- Simple filename without PDB reference
var filename VARCHAR2(100)
BEGIN
SELECT 'INSTALL_MARS_1011_' || TO_CHAR(SYSDATE,'YYYYMMDD_HH24MISS')||'.log' INTO :filename from DUAL;
END;
/
column filename new_value _filename
select :filename filename from dual;
spool &_filename
prompt ##### started at time #####
select systimestamp from dual;
prompt ##### database name #####
SELECT SYS_CONTEXT('USERENV', 'DB_NAME') AS DATABASE_NAME FROM DUAL;
prompt ========================================
prompt MARS-1011: Installing WORKFLOW_MANAGER v1.7.1
prompt Description: Add SERVICE_NAME='ODS' to INIT_TASK function
prompt ========================================
@@01_MARS_1011_install_CT_MRDS_WORKFLOW_MANAGER_SPEC.sql
@@02_MARS_1011_install_CT_MRDS_WORKFLOW_MANAGER_BODY.sql
@@03_MARS_1011_verify_CT_MRDS_WORKFLOW_MANAGER.sql
@@04_MARS_1011_track_CT_MRDS_WORKFLOW_MANAGER_version.sql
SET ECHO OFF
prompt ##### completed at time #####
select systimestamp from dual;
SPOOL OFF
EXIT

View File

@@ -0,0 +1,39 @@
WHENEVER SQLERROR EXIT FAILURE
SET SERVEROUTPUT ON
SET TIMING ON
SET ECHO ON
SET HEADING OFF
SET FEEDBACK ON
SET VERIFY OFF
-- Simple filename without PDB reference
var filename VARCHAR2(100)
BEGIN
SELECT 'ROLLBACK_MARS_1011_' || TO_CHAR(SYSDATE,'YYYYMMDD_HH24MISS')||'.log' INTO :filename from DUAL;
END;
/
column filename new_value _filename
select :filename filename from dual;
spool &_filename
prompt ##### started at time #####
select systimestamp from dual;
prompt ##### database name #####
SELECT SYS_CONTEXT('USERENV', 'DB_NAME') AS DATABASE_NAME FROM DUAL;
prompt ========================================
prompt MARS-1011: Rolling back WORKFLOW_MANAGER changes
prompt Description: Rollback to previous version 1.7.0
prompt ========================================
@@91_MARS_1011_rollback_CT_MRDS_WORKFLOW_MANAGER_SPEC.sql
@@91_MARS_1011_rollback_CT_MRDS_WORKFLOW_MANAGER_BODY.sql
@@92_MARS_1011_track_rollback_version.sql
SET ECHO OFF
prompt ##### completed at time #####
select systimestamp from dual;
SPOOL OFF
EXIT