Compare commits
2 Commits
1c6f552df9
...
7db10725a0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7db10725a0 | ||
|
|
a13a9d415f |
@@ -10,13 +10,14 @@ SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
PROMPT
|
||||
PROMPT Adding A_WORKFLOW_HISTORY_KEY column to A_SOURCE_FILE_RECEIVED...
|
||||
|
||||
-- TODO: Implementation
|
||||
-- ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED ADD (
|
||||
-- A_WORKFLOW_HISTORY_KEY NUMBER,
|
||||
-- CONSTRAINT FK_SFR_WORKFLOW_HISTORY
|
||||
-- FOREIGN KEY (A_WORKFLOW_HISTORY_KEY)
|
||||
-- REFERENCES CT_MRDS.A_WORKFLOW_HISTORY(A_WORKFLOW_HISTORY_KEY)
|
||||
-- );
|
||||
-- Add A_WORKFLOW_HISTORY_KEY column (no FK constraint - workflow history record created later)
|
||||
ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED ADD (
|
||||
A_WORKFLOW_HISTORY_KEY NUMBER
|
||||
);
|
||||
|
||||
PROMPT Column addition placeholder - TO BE IMPLEMENTED
|
||||
-- Add column comment
|
||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_WORKFLOW_HISTORY_KEY IS
|
||||
'Direct link to workflow history - each file has exactly one workflow execution. Populated during VALIDATE_SOURCE_FILE_RECEIVED (MARS-1409)';
|
||||
|
||||
PROMPT A_WORKFLOW_HISTORY_KEY column added successfully!
|
||||
PROMPT
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
-- ============================================================================
|
||||
-- MARS-1409 Installation Script
|
||||
-- ============================================================================
|
||||
-- Script: 01B_MARS_1409_install_CT_MRDS_ENV_MANAGER_SPEC.sql
|
||||
-- Description: Install ENV_MANAGER v3.3.0 package specification
|
||||
-- Author: Grzegorz Michalski
|
||||
-- Date: 2026-02-27
|
||||
-- Dependencies: 01A_MARS_1409_update_existing_workflow_keys.sql
|
||||
-- ============================================================================
|
||||
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 1B: Update ENV_MANAGER package specification
|
||||
PROMPT ============================================================================
|
||||
|
||||
PROMPT Installing ENV_MANAGER package specification...
|
||||
|
||||
@@new_version/ENV_MANAGER.pkg
|
||||
|
||||
PROMPT ENV_MANAGER specification installed
|
||||
|
||||
/
|
||||
@@ -0,0 +1,21 @@
|
||||
-- ============================================================================
|
||||
-- MARS-1409 Installation Script
|
||||
-- ============================================================================
|
||||
-- Script: 01C_MARS_1409_install_CT_MRDS_ENV_MANAGER_BODY.sql
|
||||
-- Description: Install ENV_MANAGER v3.3.0 package body
|
||||
-- Author: Grzegorz Michalski
|
||||
-- Date: 2026-02-27
|
||||
-- Dependencies: 01B_MARS_1409_install_CT_MRDS_ENV_MANAGER_SPEC.sql
|
||||
-- ============================================================================
|
||||
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 1C: Update ENV_MANAGER package body
|
||||
PROMPT ============================================================================
|
||||
|
||||
PROMPT Installing ENV_MANAGER package body...
|
||||
|
||||
@@new_version/ENV_MANAGER.pkb
|
||||
|
||||
PROMPT ENV_MANAGER body installed
|
||||
|
||||
/
|
||||
@@ -0,0 +1,21 @@
|
||||
-- ============================================================================
|
||||
-- MARS-1409 Installation Script
|
||||
-- ============================================================================
|
||||
-- Script: 03A_MARS_1409_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql
|
||||
-- Description: Install FILE_ARCHIVER package specification
|
||||
-- Author: Grzegorz Michalski
|
||||
-- Date: 2026-02-27
|
||||
-- Dependencies: 03_MARS_1409_install_CT_MRDS_FILE_MANAGER_BODY.sql
|
||||
-- ============================================================================
|
||||
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 3A: Update FILE_ARCHIVER package specification
|
||||
PROMPT ============================================================================
|
||||
|
||||
PROMPT Installing FILE_ARCHIVER package specification...
|
||||
|
||||
@@new_version/FILE_ARCHIVER.pkg
|
||||
|
||||
PROMPT FILE_ARCHIVER specification installed
|
||||
|
||||
/
|
||||
@@ -0,0 +1,21 @@
|
||||
-- ============================================================================
|
||||
-- MARS-1409 Installation Script
|
||||
-- ============================================================================
|
||||
-- Script: 03B_MARS_1409_install_CT_MRDS_FILE_ARCHIVER_BODY.sql
|
||||
-- Description: Install FILE_ARCHIVER package body
|
||||
-- Author: Grzegorz Michalski
|
||||
-- Date: 2026-02-27
|
||||
-- Dependencies: 03A_MARS_1409_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql
|
||||
-- ============================================================================
|
||||
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 3B: Update FILE_ARCHIVER package body
|
||||
PROMPT ============================================================================
|
||||
|
||||
PROMPT Installing FILE_ARCHIVER package body...
|
||||
|
||||
@@new_version/FILE_ARCHIVER.pkb
|
||||
|
||||
PROMPT FILE_ARCHIVER body installed
|
||||
|
||||
/
|
||||
@@ -0,0 +1,25 @@
|
||||
-- ============================================================================
|
||||
-- MARS-1409 Step 08: Install TRG_A_WORKFLOW_HISTORY trigger
|
||||
-- ============================================================================
|
||||
-- Purpose: Update trigger to mark A_SOURCE_FILE_RECEIVED as INGESTED
|
||||
-- when WORKFLOW_SUCCESSFUL is set to 'Y'
|
||||
-- ============================================================================
|
||||
|
||||
PROMPT Installing TRG_A_WORKFLOW_HISTORY (new_version)...
|
||||
@@new_version/TRG_A_WORKFLOW_HISTORY.sql
|
||||
|
||||
PROMPT
|
||||
DECLARE
|
||||
v_status VARCHAR2(20);
|
||||
BEGIN
|
||||
SELECT status INTO v_status
|
||||
FROM all_objects
|
||||
WHERE owner = 'CT_MRDS'
|
||||
AND object_name = 'TRG_A_WORKFLOW_HISTORY'
|
||||
AND object_type = 'TRIGGER';
|
||||
DBMS_OUTPUT.PUT_LINE('TRG_A_WORKFLOW_HISTORY status: ' || v_status);
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
RAISE_APPLICATION_ERROR(-20001, 'ERROR: TRG_A_WORKFLOW_HISTORY not found after installation');
|
||||
END;
|
||||
/
|
||||
@@ -0,0 +1,150 @@
|
||||
-- ============================================================================
|
||||
-- MARS-1409 Step 09: Update A_WORKFLOW_HISTORY_KEY for existing records
|
||||
-- ============================================================================
|
||||
-- Purpose: Populate A_WORKFLOW_HISTORY_KEY for existing A_SOURCE_FILE_RECEIVED records
|
||||
-- by extracting values from corresponding ODS tables
|
||||
-- Prerequisites:
|
||||
-- - A_WORKFLOW_HISTORY_KEY column exists in A_SOURCE_FILE_RECEIVED
|
||||
-- - ODS tables contain A_WORKFLOW_HISTORY_KEY and file$name columns
|
||||
-- ============================================================================
|
||||
|
||||
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
|
||||
PROMPT
|
||||
PROMPT Updating A_WORKFLOW_HISTORY_KEY for existing A_SOURCE_FILE_RECEIVED records...
|
||||
|
||||
DECLARE
|
||||
vUpdatedTotal NUMBER := 0;
|
||||
vUpdatedCurrent NUMBER := 0;
|
||||
vFailedConfigs NUMBER := 0;
|
||||
vSkippedConfigs NUMBER := 0;
|
||||
vTableName VARCHAR2(200);
|
||||
vSQL VARCHAR2(4000);
|
||||
vRecordsToUpdate NUMBER := 0;
|
||||
|
||||
BEGIN
|
||||
-- Count total records to update
|
||||
SELECT COUNT(*) INTO vRecordsToUpdate
|
||||
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||
WHERE A_WORKFLOW_HISTORY_KEY IS NULL
|
||||
AND PROCESSING_STATUS IN ('VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED');
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('Found ' || vRecordsToUpdate || ' records with NULL A_WORKFLOW_HISTORY_KEY');
|
||||
DBMS_OUTPUT.PUT_LINE('----------------------------------------');
|
||||
|
||||
-- Process each INPUT configuration
|
||||
FOR config_rec IN (
|
||||
SELECT DISTINCT
|
||||
sfc.A_SOURCE_FILE_CONFIG_KEY,
|
||||
sfc.A_SOURCE_KEY,
|
||||
sfc.SOURCE_FILE_ID,
|
||||
sfc.TABLE_ID,
|
||||
sfc.TEMPLATE_TABLE_NAME,
|
||||
(SELECT COUNT(*)
|
||||
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr
|
||||
WHERE sfr.A_SOURCE_FILE_CONFIG_KEY = sfc.A_SOURCE_FILE_CONFIG_KEY
|
||||
AND sfr.A_WORKFLOW_HISTORY_KEY IS NULL
|
||||
AND sfr.PROCESSING_STATUS IN ('VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED')
|
||||
) as NULL_COUNT
|
||||
FROM CT_MRDS.A_SOURCE_FILE_CONFIG sfc
|
||||
WHERE sfc.SOURCE_FILE_TYPE = 'INPUT'
|
||||
AND sfc.TABLE_ID IS NOT NULL
|
||||
ORDER BY sfc.A_SOURCE_KEY, sfc.SOURCE_FILE_ID, sfc.TABLE_ID
|
||||
) LOOP
|
||||
|
||||
IF config_rec.NULL_COUNT = 0 THEN
|
||||
vSkippedConfigs := vSkippedConfigs + 1;
|
||||
DBMS_OUTPUT.PUT_LINE('SKIP: Config ' || config_rec.A_SOURCE_FILE_CONFIG_KEY ||
|
||||
' (' || config_rec.A_SOURCE_KEY || '/' || config_rec.SOURCE_FILE_ID || '/' || config_rec.TABLE_ID ||
|
||||
') - no records to update');
|
||||
CONTINUE;
|
||||
END IF;
|
||||
|
||||
BEGIN
|
||||
-- Construct ODS table name from TABLE_ID (ODS tables have _ODS suffix)
|
||||
vTableName := 'ODS.' || config_rec.TABLE_ID || '_ODS';
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('Processing config ' || config_rec.A_SOURCE_FILE_CONFIG_KEY ||
|
||||
' (' || config_rec.A_SOURCE_KEY || '/' || config_rec.SOURCE_FILE_ID || '/' || config_rec.TABLE_ID || ')...');
|
||||
|
||||
-- Try to update using ODS table
|
||||
-- Uses MIN to handle edge case of multiple workflow keys (shouldn't happen, but defensive)
|
||||
vSQL :=
|
||||
'UPDATE CT_MRDS.A_SOURCE_FILE_RECEIVED sfr ' ||
|
||||
'SET A_WORKFLOW_HISTORY_KEY = ( ' ||
|
||||
' SELECT MIN(t.A_WORKFLOW_HISTORY_KEY) ' ||
|
||||
' FROM ' || vTableName || ' t ' ||
|
||||
' WHERE t.file$name = sfr.SOURCE_FILE_NAME ' ||
|
||||
' AND t.A_WORKFLOW_HISTORY_KEY IS NOT NULL ' ||
|
||||
') ' ||
|
||||
'WHERE sfr.A_SOURCE_FILE_CONFIG_KEY = :config_key ' ||
|
||||
' AND sfr.A_WORKFLOW_HISTORY_KEY IS NULL ' ||
|
||||
' AND sfr.PROCESSING_STATUS IN (''VALIDATED'', ''READY_FOR_INGESTION'', ''INGESTED'', ''ARCHIVED'', ''ARCHIVED_AND_TRASHED'', ''ARCHIVED_AND_PURGED'') ' ||
|
||||
' AND EXISTS ( ' ||
|
||||
' SELECT 1 FROM ' || vTableName || ' t ' ||
|
||||
' WHERE t.file$name = sfr.SOURCE_FILE_NAME ' ||
|
||||
' AND t.A_WORKFLOW_HISTORY_KEY IS NOT NULL ' ||
|
||||
' )';
|
||||
|
||||
EXECUTE IMMEDIATE vSQL USING config_rec.A_SOURCE_FILE_CONFIG_KEY;
|
||||
|
||||
vUpdatedCurrent := SQL%ROWCOUNT;
|
||||
vUpdatedTotal := vUpdatedTotal + vUpdatedCurrent;
|
||||
|
||||
IF vUpdatedCurrent > 0 THEN
|
||||
DBMS_OUTPUT.PUT_LINE(' SUCCESS: Updated ' || vUpdatedCurrent || ' record(s)');
|
||||
ELSE
|
||||
DBMS_OUTPUT.PUT_LINE(' INFO: No matching records found in ODS table (files may not be ingested yet)');
|
||||
END IF;
|
||||
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
vFailedConfigs := vFailedConfigs + 1;
|
||||
DBMS_OUTPUT.PUT_LINE(' ERROR: Failed for config ' || config_rec.A_SOURCE_FILE_CONFIG_KEY ||
|
||||
' (table: ' || vTableName || ')');
|
||||
DBMS_OUTPUT.PUT_LINE(' Reason: ' || SQLERRM);
|
||||
-- Continue processing other configurations despite this failure
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
COMMIT;
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('----------------------------------------');
|
||||
DBMS_OUTPUT.PUT_LINE('Update Summary:');
|
||||
DBMS_OUTPUT.PUT_LINE(' Total records updated: ' || vUpdatedTotal);
|
||||
DBMS_OUTPUT.PUT_LINE(' Configurations skipped (no NULL records): ' || vSkippedConfigs);
|
||||
DBMS_OUTPUT.PUT_LINE(' Configurations failed: ' || vFailedConfigs);
|
||||
|
||||
-- Check remaining NULL records
|
||||
SELECT COUNT(*) INTO vRecordsToUpdate
|
||||
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||
WHERE A_WORKFLOW_HISTORY_KEY IS NULL
|
||||
-- AND PROCESSING_STATUS IN ('VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED')
|
||||
;
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE(' Remaining NULL records: ' || vRecordsToUpdate);
|
||||
|
||||
IF vRecordsToUpdate > 0 THEN
|
||||
DBMS_OUTPUT.PUT_LINE('');
|
||||
DBMS_OUTPUT.PUT_LINE('NOTE: Some records still have NULL A_WORKFLOW_HISTORY_KEY.');
|
||||
DBMS_OUTPUT.PUT_LINE(' This is expected for:');
|
||||
DBMS_OUTPUT.PUT_LINE(' - Files not yet ingested into ODS tables');
|
||||
DBMS_OUTPUT.PUT_LINE(' - Files with status RECEIVED or VALIDATION_FAILED');
|
||||
DBMS_OUTPUT.PUT_LINE(' - ODS tables that do not exist or have different structure');
|
||||
DBMS_OUTPUT.PUT_LINE(' These records will be populated when files are processed through VALIDATE_SOURCE_FILE_RECEIVED');
|
||||
END IF;
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('----------------------------------------');
|
||||
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
ROLLBACK;
|
||||
DBMS_OUTPUT.PUT_LINE('FATAL ERROR: ' || SQLERRM);
|
||||
DBMS_OUTPUT.PUT_LINE('Transaction rolled back');
|
||||
RAISE;
|
||||
END;
|
||||
/
|
||||
|
||||
PROMPT
|
||||
PROMPT Existing workflow keys update completed!
|
||||
PROMPT
|
||||
@@ -21,8 +21,9 @@ SELECT
|
||||
data_type,
|
||||
data_length,
|
||||
nullable
|
||||
FROM user_tab_columns
|
||||
WHERE table_name = 'A_SOURCE_FILE_RECEIVED'
|
||||
FROM all_tab_columns
|
||||
WHERE owner = 'CT_MRDS'
|
||||
AND table_name = 'A_SOURCE_FILE_RECEIVED'
|
||||
AND column_name = 'A_WORKFLOW_HISTORY_KEY';
|
||||
|
||||
-- Check foreign key constraint
|
||||
@@ -33,8 +34,9 @@ SELECT
|
||||
constraint_type,
|
||||
r_constraint_name,
|
||||
status
|
||||
FROM user_constraints
|
||||
WHERE table_name = 'A_SOURCE_FILE_RECEIVED'
|
||||
FROM all_constraints
|
||||
WHERE owner = 'CT_MRDS'
|
||||
AND table_name = 'A_SOURCE_FILE_RECEIVED'
|
||||
AND constraint_type = 'R'
|
||||
AND constraint_name LIKE '%WORKFLOW_HISTORY%';
|
||||
|
||||
@@ -46,8 +48,9 @@ SELECT
|
||||
object_type,
|
||||
status,
|
||||
last_ddl_time
|
||||
FROM user_objects
|
||||
WHERE object_name = 'FILE_MANAGER'
|
||||
FROM all_objects
|
||||
WHERE owner = 'CT_MRDS'
|
||||
AND object_name = 'FILE_MANAGER'
|
||||
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
|
||||
ORDER BY object_type;
|
||||
|
||||
@@ -60,15 +63,56 @@ SELECT
|
||||
line,
|
||||
position,
|
||||
text
|
||||
FROM user_errors
|
||||
WHERE name = 'FILE_MANAGER'
|
||||
FROM all_errors
|
||||
WHERE owner = 'CT_MRDS'
|
||||
AND name = 'FILE_MANAGER'
|
||||
ORDER BY type, line, position;
|
||||
|
||||
-- Verify package version
|
||||
-- Check FILE_ARCHIVER compilation status
|
||||
PROMPT
|
||||
PROMPT 5. Verifying package version...
|
||||
SELECT CT_MRDS.FILE_MANAGER.GET_VERSION() AS VERSION FROM DUAL;
|
||||
SELECT CT_MRDS.FILE_MANAGER.GET_BUILD_INFO() AS BUILD_INFO FROM DUAL;
|
||||
PROMPT 5. Checking FILE_ARCHIVER package compilation...
|
||||
SELECT
|
||||
object_name,
|
||||
object_type,
|
||||
status,
|
||||
last_ddl_time
|
||||
FROM all_objects
|
||||
WHERE owner = 'CT_MRDS'
|
||||
AND object_name = 'FILE_ARCHIVER'
|
||||
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
|
||||
ORDER BY object_type;
|
||||
|
||||
SELECT
|
||||
name,
|
||||
type,
|
||||
line,
|
||||
position,
|
||||
text
|
||||
FROM all_errors
|
||||
WHERE owner = 'CT_MRDS'
|
||||
AND name = 'FILE_ARCHIVER'
|
||||
ORDER BY type, line, position;
|
||||
|
||||
-- Check trigger status
|
||||
PROMPT
|
||||
PROMPT 5B. Checking TRG_A_WORKFLOW_HISTORY trigger...
|
||||
SELECT
|
||||
trigger_name,
|
||||
trigger_type,
|
||||
triggering_event,
|
||||
status
|
||||
FROM all_triggers
|
||||
WHERE owner = 'CT_MRDS'
|
||||
AND trigger_name = 'TRG_A_WORKFLOW_HISTORY';
|
||||
|
||||
-- Verify package versions
|
||||
PROMPT
|
||||
PROMPT 6. Verifying package versions...
|
||||
SELECT 'FILE_MANAGER' AS PACKAGE_NAME, CT_MRDS.FILE_MANAGER.GET_VERSION() AS VERSION FROM DUAL
|
||||
UNION ALL
|
||||
SELECT 'ENV_MANAGER' AS PACKAGE_NAME, CT_MRDS.ENV_MANAGER.GET_VERSION() AS VERSION FROM DUAL
|
||||
UNION ALL
|
||||
SELECT 'FILE_ARCHIVER' AS PACKAGE_NAME, CT_MRDS.FILE_ARCHIVER.GET_VERSION() AS VERSION FROM DUAL;
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
@@ -19,8 +19,9 @@ DECLARE
|
||||
BEGIN
|
||||
SELECT COUNT(*)
|
||||
INTO v_count
|
||||
FROM user_tab_columns
|
||||
WHERE table_name = 'A_SOURCE_FILE_RECEIVED'
|
||||
FROM all_tab_columns
|
||||
WHERE owner = 'CT_MRDS'
|
||||
AND table_name = 'A_SOURCE_FILE_RECEIVED'
|
||||
AND column_name = 'A_WORKFLOW_HISTORY_KEY';
|
||||
|
||||
IF v_count = 0 THEN
|
||||
@@ -31,21 +32,55 @@ BEGIN
|
||||
END;
|
||||
/
|
||||
|
||||
-- Check package versions
|
||||
-- Check trigger was restored
|
||||
PROMPT
|
||||
PROMPT 2. Verifying FILE_MANAGER package version...
|
||||
SELECT CT_MRDS.FILE_MANAGER.GET_VERSION() AS VERSION FROM DUAL;
|
||||
PROMPT 1B. Checking TRG_A_WORKFLOW_HISTORY trigger status...
|
||||
DECLARE
|
||||
v_status VARCHAR2(20);
|
||||
BEGIN
|
||||
SELECT status INTO v_status
|
||||
FROM all_objects
|
||||
WHERE owner = 'CT_MRDS'
|
||||
AND object_name = 'TRG_A_WORKFLOW_HISTORY'
|
||||
AND object_type = 'TRIGGER';
|
||||
DBMS_OUTPUT.PUT_LINE('TRG_A_WORKFLOW_HISTORY status: ' || v_status);
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
DBMS_OUTPUT.PUT_LINE('WARNING: TRG_A_WORKFLOW_HISTORY not found');
|
||||
END;
|
||||
/
|
||||
|
||||
-- Check compilation status
|
||||
PROMPT
|
||||
PROMPT 3. Checking package compilation status...
|
||||
PROMPT 2. Checking package compilation status...
|
||||
SELECT
|
||||
object_name,
|
||||
object_type,
|
||||
status
|
||||
FROM user_objects
|
||||
WHERE object_name = 'FILE_MANAGER'
|
||||
AND object_type IN ('PACKAGE', 'PACKAGE BODY');
|
||||
status,
|
||||
last_ddl_time
|
||||
FROM all_objects
|
||||
WHERE owner = 'CT_MRDS'
|
||||
AND object_name IN ('FILE_MANAGER', 'ENV_MANAGER', 'FILE_ARCHIVER')
|
||||
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
|
||||
ORDER BY object_name, object_type;
|
||||
|
||||
-- Check for compilation errors
|
||||
PROMPT
|
||||
PROMPT 3. Checking for compilation errors...
|
||||
SELECT name, type, line, position, text
|
||||
FROM all_errors
|
||||
WHERE owner = 'CT_MRDS'
|
||||
AND name IN ('FILE_MANAGER', 'ENV_MANAGER', 'FILE_ARCHIVER')
|
||||
ORDER BY name, type, line, position;
|
||||
|
||||
-- Verify package versions
|
||||
PROMPT
|
||||
PROMPT 4. Verifying package versions after rollback...
|
||||
SELECT 'FILE_MANAGER' AS PACKAGE_NAME, CT_MRDS.FILE_MANAGER.GET_VERSION() AS VERSION FROM DUAL
|
||||
UNION ALL
|
||||
SELECT 'ENV_MANAGER' AS PACKAGE_NAME, CT_MRDS.ENV_MANAGER.GET_VERSION() AS VERSION FROM DUAL
|
||||
UNION ALL
|
||||
SELECT 'FILE_ARCHIVER' AS PACKAGE_NAME, CT_MRDS.FILE_ARCHIVER.GET_VERSION() AS VERSION FROM DUAL;
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
-- ============================================================================
|
||||
-- MARS-1409 Rollback Script
|
||||
-- ============================================================================
|
||||
-- Script: 93B_MARS_1409_rollback_FILE_ARCHIVER_SPEC.sql
|
||||
-- Description: Restore FILE_ARCHIVER package specification (previous version)
|
||||
-- Author: Grzegorz Michalski
|
||||
-- Date: 2026-02-27
|
||||
-- ============================================================================
|
||||
|
||||
PROMPT ============================================================================
|
||||
PROMPT Restoring FILE_ARCHIVER package specification...
|
||||
PROMPT ============================================================================
|
||||
|
||||
@@rollback_version/FILE_ARCHIVER.pkg
|
||||
|
||||
PROMPT FILE_ARCHIVER specification restored
|
||||
|
||||
/
|
||||
@@ -0,0 +1,18 @@
|
||||
-- ============================================================================
|
||||
-- MARS-1409 Rollback Script
|
||||
-- ============================================================================
|
||||
-- Script: 93A_MARS_1409_rollback_FILE_ARCHIVER_BODY.sql
|
||||
-- Description: Restore FILE_ARCHIVER package body (previous version)
|
||||
-- Author: Grzegorz Michalski
|
||||
-- Date: 2026-02-27
|
||||
-- ============================================================================
|
||||
|
||||
PROMPT ============================================================================
|
||||
PROMPT Restoring FILE_ARCHIVER package body...
|
||||
PROMPT ============================================================================
|
||||
|
||||
@@rollback_version/FILE_ARCHIVER.pkb
|
||||
|
||||
PROMPT FILE_ARCHIVER body restored
|
||||
|
||||
/
|
||||
@@ -0,0 +1,18 @@
|
||||
-- ============================================================================
|
||||
-- MARS-1409 Rollback Script
|
||||
-- ============================================================================
|
||||
-- Script: 92A_MARS_1409_rollback_ENV_MANAGER_SPEC.sql
|
||||
-- Description: Restore ENV_MANAGER v3.2.0 package specification (previous version)
|
||||
-- Author: Grzegorz Michalski
|
||||
-- Date: 2026-02-27
|
||||
-- ============================================================================
|
||||
|
||||
PROMPT ============================================================================
|
||||
PROMPT Restoring ENV_MANAGER package specification...
|
||||
PROMPT ============================================================================
|
||||
|
||||
@@rollback_version/ENV_MANAGER.pkg
|
||||
|
||||
PROMPT ENV_MANAGER specification restored
|
||||
|
||||
/
|
||||
@@ -0,0 +1,18 @@
|
||||
-- ============================================================================
|
||||
-- MARS-1409 Rollback Script
|
||||
-- ============================================================================
|
||||
-- Script: 92B_MARS_1409_rollback_ENV_MANAGER_BODY.sql
|
||||
-- Description: Restore ENV_MANAGER v3.2.0 package body (previous version)
|
||||
-- Author: Grzegorz Michalski
|
||||
-- Date: 2026-02-27
|
||||
-- ============================================================================
|
||||
|
||||
PROMPT ============================================================================
|
||||
PROMPT Restoring ENV_MANAGER package body...
|
||||
PROMPT ============================================================================
|
||||
|
||||
@@rollback_version/ENV_MANAGER.pkb
|
||||
|
||||
PROMPT ENV_MANAGER body restored
|
||||
|
||||
/
|
||||
@@ -0,0 +1,25 @@
|
||||
-- ============================================================================
|
||||
-- MARS-1409 Rollback 93C: Restore TRG_A_WORKFLOW_HISTORY trigger
|
||||
-- ============================================================================
|
||||
-- Purpose: Restore trigger to pre-MARS-1409 state
|
||||
-- Removes INGESTED status update logic from A_SOURCE_FILE_RECEIVED
|
||||
-- ============================================================================
|
||||
|
||||
PROMPT Restoring TRG_A_WORKFLOW_HISTORY (rollback_version)...
|
||||
@@rollback_version/TRG_A_WORKFLOW_HISTORY.sql
|
||||
|
||||
PROMPT
|
||||
DECLARE
|
||||
v_status VARCHAR2(20);
|
||||
BEGIN
|
||||
SELECT status INTO v_status
|
||||
FROM all_objects
|
||||
WHERE owner = 'CT_MRDS'
|
||||
AND object_name = 'TRG_A_WORKFLOW_HISTORY'
|
||||
AND object_type = 'TRIGGER';
|
||||
DBMS_OUTPUT.PUT_LINE('TRG_A_WORKFLOW_HISTORY restored, status: ' || v_status);
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
RAISE_APPLICATION_ERROR(-20001, 'ERROR: TRG_A_WORKFLOW_HISTORY not found after rollback');
|
||||
END;
|
||||
/
|
||||
@@ -0,0 +1,54 @@
|
||||
-- ============================================================================
|
||||
-- MARS-1409 Rollback 91A: Clear A_WORKFLOW_HISTORY_KEY for existing records
|
||||
-- ============================================================================
|
||||
-- Purpose: Set A_WORKFLOW_HISTORY_KEY to NULL for all existing records
|
||||
-- This is part of rollback process - restores state before migration
|
||||
-- Note: Cannot restore exact previous values (we don't track which were NULL)
|
||||
-- This script sets ALL values to NULL to ensure clean rollback state
|
||||
-- ============================================================================
|
||||
|
||||
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
|
||||
PROMPT
|
||||
PROMPT Clearing A_WORKFLOW_HISTORY_KEY for all A_SOURCE_FILE_RECEIVED records...
|
||||
|
||||
DECLARE
|
||||
vTotalRecords NUMBER := 0;
|
||||
vClearedRecords NUMBER := 0;
|
||||
|
||||
BEGIN
|
||||
-- Count total records
|
||||
SELECT COUNT(*) INTO vTotalRecords
|
||||
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED;
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('Total records in A_SOURCE_FILE_RECEIVED: ' || vTotalRecords);
|
||||
DBMS_OUTPUT.PUT_LINE('----------------------------------------');
|
||||
|
||||
-- Clear A_WORKFLOW_HISTORY_KEY for all records
|
||||
UPDATE CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||
SET A_WORKFLOW_HISTORY_KEY = NULL
|
||||
WHERE A_WORKFLOW_HISTORY_KEY IS NOT NULL;
|
||||
|
||||
vClearedRecords := SQL%ROWCOUNT;
|
||||
|
||||
COMMIT;
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('Rollback Summary:');
|
||||
DBMS_OUTPUT.PUT_LINE(' Records with A_WORKFLOW_HISTORY_KEY cleared: ' || vClearedRecords);
|
||||
DBMS_OUTPUT.PUT_LINE(' Records already NULL: ' || (vTotalRecords - vClearedRecords));
|
||||
DBMS_OUTPUT.PUT_LINE('----------------------------------------');
|
||||
DBMS_OUTPUT.PUT_LINE('NOTE: All A_WORKFLOW_HISTORY_KEY values set to NULL');
|
||||
DBMS_OUTPUT.PUT_LINE(' Original values cannot be restored (not tracked before migration)');
|
||||
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
ROLLBACK;
|
||||
DBMS_OUTPUT.PUT_LINE('ERROR: ' || SQLERRM);
|
||||
DBMS_OUTPUT.PUT_LINE('Transaction rolled back');
|
||||
RAISE;
|
||||
END;
|
||||
/
|
||||
|
||||
PROMPT
|
||||
PROMPT Workflow keys cleared successfully!
|
||||
PROMPT
|
||||
@@ -9,9 +9,9 @@ SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
PROMPT
|
||||
PROMPT Dropping A_WORKFLOW_HISTORY_KEY column from A_SOURCE_FILE_RECEIVED...
|
||||
|
||||
-- TODO: Implementation
|
||||
-- ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||
-- DROP COLUMN A_WORKFLOW_HISTORY_KEY;
|
||||
-- Drop A_WORKFLOW_HISTORY_KEY column (no FK constraint to drop first)
|
||||
ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||
DROP COLUMN A_WORKFLOW_HISTORY_KEY;
|
||||
|
||||
PROMPT Column drop placeholder - TO BE IMPLEMENTED
|
||||
PROMPT A_WORKFLOW_HISTORY_KEY column dropped successfully!
|
||||
PROMPT
|
||||
@@ -10,37 +10,201 @@ Direct tracking of workflow history keys in file registration for improved diagn
|
||||
```
|
||||
MARS-1409/
|
||||
├── .gitignore
|
||||
├── install_mars1409.sql # Master installation script
|
||||
├── rollback_mars1409.sql # Master rollback script
|
||||
├── install_mars1409.sql # Master installation script (8 steps)
|
||||
├── rollback_mars1409.sql # Master rollback script (5 steps)
|
||||
├── verify_packages_version.sql # Version verification
|
||||
├── track_package_versions.sql # Version tracking
|
||||
├── 01_MARS_1409_add_workflow_history_key_column.sql
|
||||
├── 01A_MARS_1409_update_existing_workflow_keys.sql # Update existing records
|
||||
├── 01B_MARS_1409_install_CT_MRDS_ENV_MANAGER_SPEC.sql # ENV_MANAGER v3.3.0 spec
|
||||
├── 01C_MARS_1409_install_CT_MRDS_ENV_MANAGER_BODY.sql # ENV_MANAGER v3.3.0 body
|
||||
├── 02_MARS_1409_install_CT_MRDS_FILE_MANAGER_SPEC.sql
|
||||
├── 03_MARS_1409_install_CT_MRDS_FILE_MANAGER_BODY.sql
|
||||
├── 04_MARS_1409_verify_installation.sql
|
||||
├── 90_MARS_1409_verify_rollback.sql
|
||||
├── 91_MARS_1409_rollback_workflow_history_key_column.sql
|
||||
├── 91A_MARS_1409_rollback_existing_workflow_keys.sql # Clear existing values
|
||||
├── 92_MARS_1409_rollback_FILE_MANAGER_SPEC.sql
|
||||
├── 92A_MARS_1409_rollback_ENV_MANAGER_SPEC.sql # ENV_MANAGER v3.2.0 spec
|
||||
├── 92B_MARS_1409_rollback_ENV_MANAGER_BODY.sql # ENV_MANAGER v3.2.0 body
|
||||
├── 93_MARS_1409_rollback_FILE_MANAGER_BODY.sql
|
||||
├── new_version/ # Updated packages
|
||||
│ ├── FILE_MANAGER.pkg # TO BE COPIED
|
||||
│ └── FILE_MANAGER.pkb # TO BE COPIED
|
||||
│ ├── A_SOURCE_FILE_RECEIVED.sql # Updated table definition
|
||||
│ ├── ENV_MANAGER.pkg # v3.3.0
|
||||
│ ├── ENV_MANAGER.pkb # v3.3.0
|
||||
│ ├── FILE_MANAGER.pkg # v3.6.0
|
||||
│ ├── FILE_MANAGER.pkb # v3.6.0
|
||||
│ └── FILE_ARCHIVER.pkb # Current version
|
||||
├── rollback_version/ # Previous versions
|
||||
│ ├── FILE_MANAGER.pkg # TO BE COPIED
|
||||
│ └── FILE_MANAGER.pkb # TO BE COPIED
|
||||
│ ├── A_SOURCE_FILE_RECEIVED.sql # Original table definition
|
||||
│ ├── ENV_MANAGER.pkg # v3.2.0
|
||||
│ ├── ENV_MANAGER.pkb # v3.2.0
|
||||
│ ├── FILE_MANAGER.pkg # v3.5.1
|
||||
│ ├── FILE_MANAGER.pkb # v3.5.1
|
||||
│ └── FILE_ARCHIVER.pkb # Previous version
|
||||
└── log/ # Installation logs
|
||||
```
|
||||
|
||||
## Status
|
||||
**SCAFFOLD CREATED** - Ready for implementation
|
||||
**TESTED & VERIFIED** - Installation and rollback validated in DEV environment (2026-02-27)
|
||||
- ✅ Installation: SUCCESS (8 steps)
|
||||
- ✅ Rollback: SUCCESS (5 steps)
|
||||
- ✅ Package compilation: ALL VALID
|
||||
- ✅ Version tracking: Working correctly
|
||||
- ⚠️ Prerequisite: MARS-828 column rename must be applied first
|
||||
|
||||
## Implementation Details
|
||||
|
||||
### Database Changes
|
||||
- Added `A_WORKFLOW_HISTORY_KEY NUMBER` column to `CT_MRDS.A_SOURCE_FILE_RECEIVED`
|
||||
- No FK constraint (workflow history record created later in processing)
|
||||
- Column populated during VALIDATE_SOURCE_FILE_RECEIVED procedure
|
||||
- **Migration script** (01A): Updates A_WORKFLOW_HISTORY_KEY for existing records by extracting values from ODS tables
|
||||
|
||||
### Package Changes
|
||||
- **ENV_MANAGER v3.3.0**: Added error codes CODE_WORKFLOW_KEY_NULL (-20035) and CODE_MULTIPLE_WORKFLOW_KEYS (-20036)
|
||||
- **FILE_MANAGER v3.6.0**: Enhanced VALIDATE_SOURCE_FILE_RECEIVED to extract and validate A_WORKFLOW_HISTORY_KEY from external tables
|
||||
|
||||
### Validation Rules
|
||||
- **NULL values**: Fatal error - file must contain A_WORKFLOW_HISTORY_KEY
|
||||
- **Multiple values**: Fatal error - each file must have exactly one workflow execution key
|
||||
- **Single value**: Value extracted and stored in A_SOURCE_FILE_RECEIVED
|
||||
|
||||
### Migration of Existing Data (01A Script)
|
||||
The installation includes automatic migration of A_WORKFLOW_HISTORY_KEY for existing records:
|
||||
- **Scope**: Updates records with status VALIDATED, READY_FOR_INGESTION, INGESTED, ARCHIVED*
|
||||
- **Method**: Extracts A_WORKFLOW_HISTORY_KEY from ODS tables by matching file$name with SOURCE_FILE_NAME
|
||||
- **Safety**: Uses TRY-CATCH for each configuration - continues if ODS table doesn't exist
|
||||
- **Logging**: Detailed output showing success/failure for each configuration
|
||||
- **Expected behavior**: Some records may remain NULL if:
|
||||
- Files not yet ingested into ODS tables
|
||||
- Files with status RECEIVED or VALIDATION_FAILED
|
||||
- ODS tables don't exist or have different structure
|
||||
- These NULL records will be populated when files are reprocessed
|
||||
|
||||
## Next Steps
|
||||
1. Copy current FILE_MANAGER packages to rollback_version/
|
||||
2. Implement column addition (01_*.sql)
|
||||
3. Update FILE_MANAGER package to populate A_WORKFLOW_HISTORY_KEY
|
||||
4. Test and validate changes
|
||||
5. Complete rollback scripts
|
||||
1. **Test installation** in DEV environment:
|
||||
```sql
|
||||
@install_mars1409.sql
|
||||
```
|
||||
2. **Review migration results**: Check how many existing records were updated
|
||||
3. **Validate new files**: Test with sample files containing A_WORKFLOW_HISTORY_KEY
|
||||
4. **Test rollback** procedure to ensure clean restoration
|
||||
5. **Deploy to higher environments** after successful DEV validation
|
||||
|
||||
## Installation Flow
|
||||
```
|
||||
install_mars1409.sql (MASTER - 8 steps)
|
||||
│
|
||||
├─ 01: Add A_WORKFLOW_HISTORY_KEY column (DDL)
|
||||
├─ 01A: Update existing records (Migration)
|
||||
├─ 01B: Install ENV_MANAGER.pkg (v3.3.0)
|
||||
├─ 01C: Install ENV_MANAGER.pkb (v3.3.0)
|
||||
├─ 02: Install FILE_MANAGER.pkg (v3.6.0)
|
||||
├─ 03: Install FILE_MANAGER.pkb (v3.6.0)
|
||||
├─ 04: Verify installation
|
||||
└─ 05: Track package versions
|
||||
```
|
||||
|
||||
## Rollback Flow
|
||||
```
|
||||
rollback_mars1409.sql (MASTER - 5 steps)
|
||||
│
|
||||
├─ 01: Restore FILE_MANAGER.pkb (v3.5.1)
|
||||
├─ 02: Restore FILE_MANAGER.pkg (v3.5.1)
|
||||
├─ 02A: Restore ENV_MANAGER.pkb (v3.2.0)
|
||||
├─ 02B: Restore ENV_MANAGER.pkg (v3.2.0)
|
||||
├─ 03: Clear A_WORKFLOW_HISTORY_KEY values
|
||||
├─ 04: Drop A_WORKFLOW_HISTORY_KEY column
|
||||
└─ 05: Verify rollback
|
||||
```
|
||||
|
||||
## Post-Installation Verification
|
||||
|
||||
### Check migration results:
|
||||
```sql
|
||||
-- Count updated records
|
||||
SELECT
|
||||
CASE WHEN A_WORKFLOW_HISTORY_KEY IS NOT NULL THEN 'POPULATED' ELSE 'NULL' END as STATUS,
|
||||
COUNT(*) as RECORD_COUNT
|
||||
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||
GROUP BY CASE WHEN A_WORKFLOW_HISTORY_KEY IS NOT NULL THEN 'POPULATED' ELSE 'NULL' END;
|
||||
|
||||
-- Check by configuration
|
||||
SELECT
|
||||
sfc.A_SOURCE_KEY,
|
||||
sfc.SOURCE_FILE_ID,
|
||||
sfc.TABLE_ID,
|
||||
COUNT(*) as TOTAL_FILES,
|
||||
SUM(CASE WHEN sfr.A_WORKFLOW_HISTORY_KEY IS NOT NULL THEN 1 ELSE 0 END) as POPULATED,
|
||||
SUM(CASE WHEN sfr.A_WORKFLOW_HISTORY_KEY IS NULL THEN 1 ELSE 0 END) as NULL_COUNT
|
||||
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr
|
||||
JOIN CT_MRDS.A_SOURCE_FILE_CONFIG sfc ON sfr.A_SOURCE_FILE_CONFIG_KEY = sfc.A_SOURCE_FILE_CONFIG_KEY
|
||||
GROUP BY sfc.A_SOURCE_KEY, sfc.SOURCE_FILE_ID, sfc.TABLE_ID
|
||||
ORDER BY sfc.A_SOURCE_KEY, sfc.SOURCE_FILE_ID;
|
||||
```
|
||||
|
||||
### Test new file processing:
|
||||
```sql
|
||||
-- Process a test file (will populate A_WORKFLOW_HISTORY_KEY automatically)
|
||||
EXEC FILE_MANAGER.PROCESS_SOURCE_FILE('INBOX/TEST/TEST_FILE/TEST_TABLE/test_file.csv');
|
||||
|
||||
-- Verify A_WORKFLOW_HISTORY_KEY was populated
|
||||
SELECT A_SOURCE_FILE_RECEIVED_KEY, SOURCE_FILE_NAME, A_WORKFLOW_HISTORY_KEY, PROCESSING_STATUS
|
||||
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||
WHERE SOURCE_FILE_NAME LIKE '%test_file.csv%';
|
||||
```
|
||||
|
||||
## Related Tickets
|
||||
- Based on MARS-828 package structure
|
||||
- Supports FILE_ARCHIVER workflow tracking improvements
|
||||
## Test Results (2026-02-27)
|
||||
|
||||
### ✅ Installation Test
|
||||
**Environment**: DEV (ggmichalski_high)
|
||||
**Status**: SUCCESS
|
||||
|
||||
**Installation Steps**:
|
||||
1. Step 1: Add A_WORKFLOW_HISTORY_KEY column - ✅ SUCCESS
|
||||
2. Step 1A: Migrate existing records - ✅ SUCCESS (0 updated, 47 NULL expected)
|
||||
3. Step 1B: Install ENV_MANAGER v3.3.0 specification - ✅ SUCCESS
|
||||
4. Step 1C: Install ENV_MANAGER v3.3.0 body - ✅ SUCCESS
|
||||
5. Step 2: Install FILE_MANAGER v3.6.0 specification - ✅ SUCCESS
|
||||
6. Step 3: Install FILE_MANAGER v3.6.0 body - ✅ SUCCESS
|
||||
7. Step 4: Verification - ✅ SUCCESS
|
||||
8. Step 5: Version tracking - ✅ SUCCESS
|
||||
|
||||
**Post-Installation State**:
|
||||
- FILE_MANAGER version: 3.6.0
|
||||
- ENV_MANAGER version: 3.3.0
|
||||
- A_WORKFLOW_HISTORY_KEY column: EXISTS (NUMBER, NULLABLE)
|
||||
- Package compilation: ALL VALID
|
||||
- Migration results: 0 records updated (expected - no data in ODS tables)
|
||||
|
||||
### ✅ Rollback Test
|
||||
**Status**: SUCCESS
|
||||
|
||||
**Rollback Steps**:
|
||||
1. Step 1: Restore FILE_MANAGER body v3.5.1 - ✅ SUCCESS
|
||||
2. Step 2: Restore FILE_MANAGER spec v3.5.1 - ✅ SUCCESS
|
||||
3. Step 2A: Restore ENV_MANAGER body v3.2.0 - ✅ SUCCESS
|
||||
4. Step 2B: Restore ENV_MANAGER spec v3.2.0 - ✅ SUCCESS
|
||||
5. Step 3: Clear A_WORKFLOW_HISTORY_KEY values - ✅ SUCCESS (0 cleared, 47 already NULL)
|
||||
6. Step 4: Drop A_WORKFLOW_HISTORY_KEY column - ✅ SUCCESS
|
||||
7. Step 5: Verification - ✅ SUCCESS
|
||||
|
||||
**Post-Rollback State**:
|
||||
- FILE_MANAGER version: 3.5.1 (restored)
|
||||
- ENV_MANAGER version: 3.2.0 (restored)
|
||||
- A_WORKFLOW_HISTORY_KEY column: REMOVED
|
||||
- Package compilation: ALL VALID
|
||||
|
||||
**Critical Findings**:
|
||||
- ⚠️ **Prerequisite**: MARS-828 column rename must be applied first (ARCHIVE_THRESHOLD_DAYS)
|
||||
- ⚠️ **Database State**: rollback_version packages require MARS-828 naming conventions
|
||||
- ✅ **Solution**: Applied MARS-828 01a script before testing - now works correctly
|
||||
|
||||
**Package Ready for**:
|
||||
- ✅ DEV deployment (tested successfully)
|
||||
- ✅ QA deployment (after DEV validation)
|
||||
- ⏳ PROD deployment (pending higher environment validation)
|
||||
@@ -33,7 +33,7 @@ PROMPT =========================================================================
|
||||
PROMPT Package: CT_MRDS.FILE_MANAGER v3.X.X
|
||||
PROMPT Change: Add A_WORKFLOW_HISTORY_KEY to A_SOURCE_FILE_RECEIVED
|
||||
PROMPT Purpose: Direct tracking of workflow history keys in file registration
|
||||
PROMPT Steps: TBD (DDL, Package updates, Verification)
|
||||
PROMPT Steps: 11 (DDL, ENV_MANAGER Update, FILE_MANAGER Update, FILE_ARCHIVER Update, Trigger Update, Existing Records Backfill, Verification, Tracking)
|
||||
PROMPT Timestamp:
|
||||
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS install_start FROM DUAL;
|
||||
PROMPT ============================================================================
|
||||
@@ -56,25 +56,61 @@ PROMPT =========================================================================
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 2: Update FILE_MANAGER package specification
|
||||
PROMPT STEP 2: Update ENV_MANAGER package specification
|
||||
PROMPT ============================================================================
|
||||
@@02_MARS_1409_install_CT_MRDS_FILE_MANAGER_SPEC.sql
|
||||
@@02_MARS_1409_install_CT_MRDS_ENV_MANAGER_SPEC.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 3: Update FILE_MANAGER package body
|
||||
PROMPT STEP 3: Update ENV_MANAGER package body
|
||||
PROMPT ============================================================================
|
||||
@@03_MARS_1409_install_CT_MRDS_FILE_MANAGER_BODY.sql
|
||||
@@03_MARS_1409_install_CT_MRDS_ENV_MANAGER_BODY.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 4: Verify installation
|
||||
PROMPT STEP 4: Update FILE_MANAGER package specification
|
||||
PROMPT ============================================================================
|
||||
@@04_MARS_1409_verify_installation.sql
|
||||
@@04_MARS_1409_install_CT_MRDS_FILE_MANAGER_SPEC.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 5: Track package versions
|
||||
PROMPT STEP 5: Update FILE_MANAGER package body
|
||||
PROMPT ============================================================================
|
||||
@@05_MARS_1409_install_CT_MRDS_FILE_MANAGER_BODY.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 6: Update FILE_ARCHIVER package specification
|
||||
PROMPT ============================================================================
|
||||
@@06_MARS_1409_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 7: Update FILE_ARCHIVER package body
|
||||
PROMPT ============================================================================
|
||||
@@07_MARS_1409_install_CT_MRDS_FILE_ARCHIVER_BODY.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 8: Update TRG_A_WORKFLOW_HISTORY trigger
|
||||
PROMPT ============================================================================
|
||||
@@08_MARS_1409_install_CT_MRDS_TRG_A_WORKFLOW_HISTORY.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 9: Update A_WORKFLOW_HISTORY_KEY for existing records
|
||||
PROMPT ============================================================================
|
||||
@@09_MARS_1409_update_existing_workflow_keys.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 10: Verify installation
|
||||
PROMPT ============================================================================
|
||||
@@10_MARS_1409_verify_installation.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 11: Track package versions
|
||||
PROMPT ============================================================================
|
||||
@@track_package_versions.sql
|
||||
|
||||
|
||||
@@ -16,10 +16,12 @@ CREATE TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED (
|
||||
EXTERNAL_TABLE_NAME VARCHAR2(200),
|
||||
PARTITION_YEAR VARCHAR2(4),
|
||||
PARTITION_MONTH VARCHAR2(2),
|
||||
ARCH_FILE_NAME VARCHAR2(1000),
|
||||
ARCH_PATH VARCHAR2(1000),
|
||||
PROCESS_NAME VARCHAR2(200),
|
||||
A_WORKFLOW_HISTORY_KEY NUMBER,
|
||||
CONSTRAINT A_SOURCE_FILE_RECEIVED_PK PRIMARY KEY (A_SOURCE_FILE_RECEIVED_KEY),
|
||||
CONSTRAINT ASFR_A_SOURCE_FILE_CONFIG_KEY_FK FOREIGN KEY(A_SOURCE_FILE_CONFIG_KEY) REFERENCES CT_MRDS.A_SOURCE_FILE_CONFIG(A_SOURCE_FILE_CONFIG_KEY),
|
||||
CONSTRAINT A_SOURCE_FILE_RECEIVED_CHK CHECK (PROCESSING_STATUS IN ('RECEIVED', 'VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED'))
|
||||
CONSTRAINT A_SOURCE_FILE_RECEIVED_CHK CHECK (PROCESSING_STATUS IN ('RECEIVED', 'VALIDATION_FAILED', 'VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED'))
|
||||
) TABLESPACE "DATA";
|
||||
|
||||
-- Unique index for file identification (workaround for TIMESTAMP WITH TIMEZONE constraint limitation)
|
||||
@@ -49,7 +51,7 @@ COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.RECEPTION_DATE IS
|
||||
'Date when file was registered in the system (extracted from CREATED timestamp)';
|
||||
|
||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PROCESSING_STATUS IS
|
||||
'Current processing status: RECEIVED → VALIDATED → READY_FOR_INGESTION → INGESTED → ARCHIVED_AND_TRASHED → ARCHIVED_AND_PURGED';
|
||||
'Current processing status: RECEIVED → VALIDATED (or VALIDATION_FAILED if errors) → READY_FOR_INGESTION → INGESTED → ARCHIVED → ARCHIVED_AND_TRASHED → ARCHIVED_AND_PURGED';
|
||||
|
||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.EXTERNAL_TABLE_NAME IS
|
||||
'Name of temporary external table created for file validation (dropped after validation)';
|
||||
@@ -60,7 +62,13 @@ COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PARTITION_YEAR IS
|
||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PARTITION_MONTH IS
|
||||
'Month partition value (MM format) when file was archived to ARCHIVE bucket with Hive-style partitioning';
|
||||
|
||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.ARCH_FILE_NAME IS
|
||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.ARCH_PATH IS
|
||||
'Archive directory prefix in ARCHIVE bucket containing archived Parquet files (supports multiple files from parallel DBMS_CLOUD.EXPORT_DATA)';
|
||||
|
||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PROCESS_NAME IS
|
||||
'Name of the process or DBT model that ingested this file (populated during ingestion workflow)';
|
||||
|
||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_WORKFLOW_HISTORY_KEY IS
|
||||
'Direct link to workflow history - each file has exactly one workflow execution. Populated during VALIDATE_SOURCE_FILE_RECEIVED (MARS-1409)';
|
||||
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON CT_MRDS.A_SOURCE_FILE_RECEIVED TO MRDS_LOADER_ROLE;
|
||||
@@ -39,6 +39,8 @@ AS
|
||||
Errors(CODE_MOVE_FILE_TO_TRASH_FAILED) := Error_Record(CODE_MOVE_FILE_TO_TRASH_FAILED, MSG_MOVE_FILE_TO_TRASH_FAILED); -- -20032
|
||||
Errors(CODE_DROP_EXPORTED_FILES_FAILED) := Error_Record(CODE_DROP_EXPORTED_FILES_FAILED, MSG_DROP_EXPORTED_FILES_FAILED); -- -20033
|
||||
Errors(CODE_INVALID_BUCKET_AREA) := Error_Record(CODE_INVALID_BUCKET_AREA, MSG_INVALID_BUCKET_AREA); -- -20034
|
||||
Errors(CODE_WORKFLOW_KEY_NULL) := Error_Record(CODE_WORKFLOW_KEY_NULL, MSG_WORKFLOW_KEY_NULL); -- -20035
|
||||
Errors(CODE_MULTIPLE_WORKFLOW_KEYS) := Error_Record(CODE_MULTIPLE_WORKFLOW_KEYS, MSG_MULTIPLE_WORKFLOW_KEYS); -- -20036
|
||||
Errors(CODE_INVALID_PARALLEL_DEGREE) := Error_Record(CODE_INVALID_PARALLEL_DEGREE, MSG_INVALID_PARALLEL_DEGREE); -- -20110
|
||||
Errors(CODE_PARALLEL_EXECUTION_FAILED) := Error_Record(CODE_PARALLEL_EXECUTION_FAILED, MSG_PARALLEL_EXECUTION_FAILED); -- -20111
|
||||
|
||||
|
||||
@@ -17,12 +17,13 @@ AS
|
||||
**/
|
||||
|
||||
-- Package Version Information (Semantic Versioning: MAJOR.MINOR.PATCH)
|
||||
PACKAGE_VERSION CONSTANT VARCHAR2(10) := '3.2.0';
|
||||
PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2025-12-20 10:00:00';
|
||||
PACKAGE_VERSION CONSTANT VARCHAR2(10) := '3.3.0';
|
||||
PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2026-02-27 09:00:00';
|
||||
PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
|
||||
|
||||
-- Version History (Latest changes first)
|
||||
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
|
||||
'3.3.0 (2026-02-27): MARS-1409 - Added error codes for A_WORKFLOW_HISTORY_KEY validation (CODE_WORKFLOW_KEY_NULL -20035, CODE_MULTIPLE_WORKFLOW_KEYS -20036)' || CHR(13)||CHR(10) ||
|
||||
'3.2.0 (2025-12-20): Added error codes for parallel execution support (CODE_INVALID_PARALLEL_DEGREE -20110, CODE_PARALLEL_EXECUTION_FAILED -20111)' || CHR(13)||CHR(10) ||
|
||||
'3.1.0 (2025-10-22): Added package hash tracking and automatic change detection system (SHA256 hashing)' || CHR(13)||CHR(10) ||
|
||||
'3.0.0 (2025-10-22): Added package versioning system with centralized version management functions' || CHR(13)||CHR(10) ||
|
||||
@@ -297,6 +298,18 @@ AS
|
||||
PRAGMA EXCEPTION_INIT( ERR_INVALID_BUCKET_AREA
|
||||
,CODE_INVALID_BUCKET_AREA);
|
||||
|
||||
ERR_WORKFLOW_KEY_NULL EXCEPTION;
|
||||
CODE_WORKFLOW_KEY_NULL CONSTANT PLS_INTEGER := -20035;
|
||||
MSG_WORKFLOW_KEY_NULL VARCHAR2(4000) := 'File validation failed: A_WORKFLOW_HISTORY_KEY column contains NULL value';
|
||||
PRAGMA EXCEPTION_INIT( ERR_WORKFLOW_KEY_NULL
|
||||
,CODE_WORKFLOW_KEY_NULL);
|
||||
|
||||
ERR_MULTIPLE_WORKFLOW_KEYS EXCEPTION;
|
||||
CODE_MULTIPLE_WORKFLOW_KEYS CONSTANT PLS_INTEGER := -20036;
|
||||
MSG_MULTIPLE_WORKFLOW_KEYS VARCHAR2(4000) := 'File validation failed: Multiple distinct A_WORKFLOW_HISTORY_KEY values found in file. Each file must contain exactly one workflow execution key';
|
||||
PRAGMA EXCEPTION_INIT( ERR_MULTIPLE_WORKFLOW_KEYS
|
||||
,CODE_MULTIPLE_WORKFLOW_KEYS);
|
||||
|
||||
ERR_INVALID_PARALLEL_DEGREE EXCEPTION;
|
||||
CODE_INVALID_PARALLEL_DEGREE CONSTANT PLS_INTEGER := -20110;
|
||||
MSG_INVALID_PARALLEL_DEGREE VARCHAR2(4000) := 'Invalid parallel degree parameter. Must be between 1 and 16';
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -17,12 +17,13 @@ AS
|
||||
**/
|
||||
|
||||
-- Package Version Information (Semantic Versioning: MAJOR.MINOR.PATCH)
|
||||
PACKAGE_VERSION CONSTANT VARCHAR2(10) := '3.5.1';
|
||||
PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2026-02-24 13:35:00';
|
||||
PACKAGE_VERSION CONSTANT VARCHAR2(10) := '3.6.0';
|
||||
PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2026-02-27 09:00:00';
|
||||
PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
|
||||
|
||||
-- Version History (Latest changes first)
|
||||
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
|
||||
'3.6.0 (2026-02-27): MARS-1409 - Added A_WORKFLOW_HISTORY_KEY tracking in A_SOURCE_FILE_RECEIVED. Each file now stores its workflow execution key extracted during VALIDATE_SOURCE_FILE_RECEIVED' || CHR(13)||CHR(10) ||
|
||||
'3.5.1 (2026-02-24): Fixed TIMESTAMP field syntax in GENERATE_EXTERNAL_TABLE_PARAMS for SQL*Loader compatibility (CHAR(35) DATE_FORMAT TIMESTAMP MASK format)' || CHR(13)||CHR(10) ||
|
||||
'3.3.2 (2026-02-20): MARS-828 - Fixed threshold column names in GET_DET_SOURCE_FILE_CONFIG_INFO for MARS-828 compatibility' || CHR(13)||CHR(10) ||
|
||||
'3.3.1 (2025-11-27): MARS-1046 - Fixed ISO 8601 datetime format parsing with milliseconds and timezone (e.g., 2012-03-02T14:16:23.798+01:00)' || CHR(13)||CHR(10) ||
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
-- ====================================================================
|
||||
-- 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
|
||||
-- ====================================================================
|
||||
|
||||
CREATE OR REPLACE EDITIONABLE TRIGGER "CT_MRDS"."TRG_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';
|
||||
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
|
||||
) 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'
|
||||
);
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
-- MARS-1409: When workflow completes successfully, mark linked files as INGESTED
|
||||
IF :new.workflow_successful = 'Y' THEN
|
||||
IF INSERTING OR (UPDATING AND (:old.workflow_successful IS NULL OR :old.workflow_successful != 'Y')) THEN
|
||||
UPDATE CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||
SET PROCESSING_STATUS = 'INGESTED',
|
||||
PROCESS_NAME = :new.service_name
|
||||
WHERE A_WORKFLOW_HISTORY_KEY = :new.a_workflow_history_key;
|
||||
END IF;
|
||||
END IF;
|
||||
END;
|
||||
|
||||
/
|
||||
@@ -32,7 +32,7 @@ PROMPT MARS-1409 Rollback Starting
|
||||
PROMPT ============================================================================
|
||||
PROMPT Package: CT_MRDS.FILE_MANAGER
|
||||
PROMPT Change: Remove A_WORKFLOW_HISTORY_KEY column and restore previous version
|
||||
PROMPT Steps: TBD (Restore packages, Drop column, Verify)
|
||||
PROMPT Steps: 10 (Restore FILE_ARCHIVER, Restore FILE_MANAGER, Restore ENV_MANAGER, Restore trigger, Clear data, Drop column, Verify)
|
||||
PROMPT Timestamp:
|
||||
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS rollback_start FROM DUAL;
|
||||
PROMPT ============================================================================
|
||||
@@ -49,25 +49,61 @@ END;
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 1: Restore FILE_MANAGER package body (previous version)
|
||||
PROMPT STEP 1: Restore FILE_ARCHIVER package specification (previous version)
|
||||
PROMPT ============================================================================
|
||||
@@93_MARS_1409_rollback_FILE_MANAGER_BODY.sql
|
||||
@@91_MARS_1409_rollback_CT_MRDS_FILE_ARCHIVER_SPEC.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 2: Restore FILE_MANAGER package specification (previous version)
|
||||
PROMPT STEP 2: Restore FILE_ARCHIVER package body (previous version)
|
||||
PROMPT ============================================================================
|
||||
@@92_MARS_1409_rollback_FILE_MANAGER_SPEC.sql
|
||||
@@92_MARS_1409_rollback_CT_MRDS_FILE_ARCHIVER_BODY.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 3: Drop A_WORKFLOW_HISTORY_KEY column
|
||||
PROMPT STEP 3: Restore FILE_MANAGER package specification (previous version)
|
||||
PROMPT ============================================================================
|
||||
@@91_MARS_1409_rollback_workflow_history_key_column.sql
|
||||
@@93_MARS_1409_rollback_CT_MRDS_FILE_MANAGER_SPEC.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 4: Verify rollback
|
||||
PROMPT STEP 4: Restore FILE_MANAGER package body (previous version)
|
||||
PROMPT ============================================================================
|
||||
@@94_MARS_1409_rollback_CT_MRDS_FILE_MANAGER_BODY.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 5: Restore ENV_MANAGER package specification (previous version)
|
||||
PROMPT ============================================================================
|
||||
@@95_MARS_1409_rollback_CT_MRDS_ENV_MANAGER_SPEC.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 6: Restore ENV_MANAGER package body (previous version)
|
||||
PROMPT ============================================================================
|
||||
@@96_MARS_1409_rollback_CT_MRDS_ENV_MANAGER_BODY.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 7: Restore TRG_A_WORKFLOW_HISTORY trigger (previous version)
|
||||
PROMPT ============================================================================
|
||||
@@97_MARS_1409_rollback_CT_MRDS_TRG_A_WORKFLOW_HISTORY.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 8: Clear A_WORKFLOW_HISTORY_KEY values from existing records
|
||||
PROMPT ============================================================================
|
||||
@@98_MARS_1409_rollback_existing_workflow_keys.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 9: Drop A_WORKFLOW_HISTORY_KEY column
|
||||
PROMPT ============================================================================
|
||||
@@99_MARS_1409_rollback_workflow_history_key_column.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT STEP 10: Verify rollback
|
||||
PROMPT ============================================================================
|
||||
@@90_MARS_1409_verify_rollback.sql
|
||||
|
||||
|
||||
@@ -16,10 +16,11 @@ CREATE TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED (
|
||||
EXTERNAL_TABLE_NAME VARCHAR2(200),
|
||||
PARTITION_YEAR VARCHAR2(4),
|
||||
PARTITION_MONTH VARCHAR2(2),
|
||||
ARCH_FILE_NAME VARCHAR2(1000),
|
||||
ARCH_PATH VARCHAR2(1000),
|
||||
PROCESS_NAME VARCHAR2(200),
|
||||
CONSTRAINT A_SOURCE_FILE_RECEIVED_PK PRIMARY KEY (A_SOURCE_FILE_RECEIVED_KEY),
|
||||
CONSTRAINT ASFR_A_SOURCE_FILE_CONFIG_KEY_FK FOREIGN KEY(A_SOURCE_FILE_CONFIG_KEY) REFERENCES CT_MRDS.A_SOURCE_FILE_CONFIG(A_SOURCE_FILE_CONFIG_KEY),
|
||||
CONSTRAINT A_SOURCE_FILE_RECEIVED_CHK CHECK (PROCESSING_STATUS IN ('RECEIVED', 'VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED'))
|
||||
CONSTRAINT A_SOURCE_FILE_RECEIVED_CHK CHECK (PROCESSING_STATUS IN ('RECEIVED', 'VALIDATION_FAILED', 'VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED'))
|
||||
) TABLESPACE "DATA";
|
||||
|
||||
-- Unique index for file identification (workaround for TIMESTAMP WITH TIMEZONE constraint limitation)
|
||||
@@ -49,7 +50,7 @@ COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.RECEPTION_DATE IS
|
||||
'Date when file was registered in the system (extracted from CREATED timestamp)';
|
||||
|
||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PROCESSING_STATUS IS
|
||||
'Current processing status: RECEIVED → VALIDATED → READY_FOR_INGESTION → INGESTED → ARCHIVED_AND_TRASHED → ARCHIVED_AND_PURGED';
|
||||
'Current processing status: RECEIVED → VALIDATED (or VALIDATION_FAILED if errors) → READY_FOR_INGESTION → INGESTED → ARCHIVED → ARCHIVED_AND_TRASHED → ARCHIVED_AND_PURGED';
|
||||
|
||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.EXTERNAL_TABLE_NAME IS
|
||||
'Name of temporary external table created for file validation (dropped after validation)';
|
||||
@@ -60,7 +61,10 @@ COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PARTITION_YEAR IS
|
||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PARTITION_MONTH IS
|
||||
'Month partition value (MM format) when file was archived to ARCHIVE bucket with Hive-style partitioning';
|
||||
|
||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.ARCH_FILE_NAME IS
|
||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.ARCH_PATH IS
|
||||
'Archive directory prefix in ARCHIVE bucket containing archived Parquet files (supports multiple files from parallel DBMS_CLOUD.EXPORT_DATA)';
|
||||
|
||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PROCESS_NAME IS
|
||||
'Name of the process or DBT model that ingested this file (populated during ingestion workflow)';
|
||||
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON CT_MRDS.A_SOURCE_FILE_RECEIVED TO MRDS_LOADER_ROLE;
|
||||
@@ -0,0 +1,40 @@
|
||||
-- ====================================================================
|
||||
-- TRG_A_WORKFLOW_HISTORY Trigger Definition (rollback version)
|
||||
-- ====================================================================
|
||||
-- Purpose: Restore trigger to pre-MARS-1409 state
|
||||
-- Handles only CT_ODS.A_LOAD_HISTORY inserts for ODS workflows
|
||||
-- ====================================================================
|
||||
|
||||
CREATE OR REPLACE EDITIONABLE TRIGGER "CT_MRDS"."TRG_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
|
||||
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';
|
||||
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
|
||||
) 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'
|
||||
);
|
||||
END IF;
|
||||
END IF;
|
||||
END;
|
||||
|
||||
/
|
||||
@@ -1,7 +1,7 @@
|
||||
-- ============================================================================
|
||||
-- MARS-1409 Package Version Tracking
|
||||
-- ============================================================================
|
||||
-- Purpose: Record package versions in A_PACKAGE_VERSION_HISTORY table
|
||||
-- Purpose: Record package versions in A_PACKAGE_VERSION_TRACKING table
|
||||
-- ============================================================================
|
||||
|
||||
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
@@ -16,6 +16,8 @@ DECLARE
|
||||
v_file_manager_build VARCHAR2(100);
|
||||
v_env_manager_version VARCHAR2(50);
|
||||
v_env_manager_build VARCHAR2(100);
|
||||
v_file_archiver_version VARCHAR2(50);
|
||||
v_file_archiver_build VARCHAR2(100);
|
||||
BEGIN
|
||||
-- Get FILE_MANAGER version
|
||||
BEGIN
|
||||
@@ -41,23 +43,47 @@ BEGIN
|
||||
DBMS_OUTPUT.PUT_LINE('WARNING: Could not retrieve ENV_MANAGER version');
|
||||
END;
|
||||
|
||||
-- Insert version records (if A_PACKAGE_VERSION_HISTORY table exists)
|
||||
-- Get FILE_ARCHIVER version
|
||||
BEGIN
|
||||
EXECUTE IMMEDIATE 'INSERT INTO CT_MRDS.A_PACKAGE_VERSION_HISTORY
|
||||
(PACKAGE_NAME, PACKAGE_VERSION, BUILD_INFO, DEPLOYMENT_DATE, DEPLOYMENT_USER, MARS_TICKET)
|
||||
VALUES (:1, :2, :3, SYSDATE, USER, :4)'
|
||||
USING 'FILE_MANAGER', v_file_manager_version, v_file_manager_build, 'MARS-1409';
|
||||
v_file_archiver_version := CT_MRDS.FILE_ARCHIVER.GET_VERSION();
|
||||
v_file_archiver_build := CT_MRDS.FILE_ARCHIVER.GET_BUILD_INFO();
|
||||
|
||||
EXECUTE IMMEDIATE 'INSERT INTO CT_MRDS.A_PACKAGE_VERSION_HISTORY
|
||||
(PACKAGE_NAME, PACKAGE_VERSION, BUILD_INFO, DEPLOYMENT_DATE, DEPLOYMENT_USER, MARS_TICKET)
|
||||
VALUES (:1, :2, :3, SYSDATE, USER, :4)'
|
||||
USING 'ENV_MANAGER', v_env_manager_version, v_env_manager_build, 'MARS-1409';
|
||||
|
||||
COMMIT;
|
||||
DBMS_OUTPUT.PUT_LINE('Package version history recorded successfully');
|
||||
DBMS_OUTPUT.PUT_LINE('FILE_ARCHIVER Version: ' || v_file_archiver_version);
|
||||
DBMS_OUTPUT.PUT_LINE('FILE_ARCHIVER Build: ' || v_file_archiver_build);
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE('INFO: A_PACKAGE_VERSION_HISTORY table not available - skipping version tracking');
|
||||
DBMS_OUTPUT.PUT_LINE('WARNING: Could not retrieve FILE_ARCHIVER version');
|
||||
END;
|
||||
|
||||
-- Insert version records into A_PACKAGE_VERSION_TRACKING
|
||||
BEGIN
|
||||
EXECUTE IMMEDIATE 'INSERT INTO CT_MRDS.A_PACKAGE_VERSION_TRACKING
|
||||
(PACKAGE_OWNER, PACKAGE_NAME, PACKAGE_TYPE, PACKAGE_VERSION,
|
||||
PACKAGE_BUILD_DATE, PACKAGE_AUTHOR, TRACKING_DATE, TRACKED_BY_USER, TRACKED_BY_MODULE)
|
||||
VALUES (:1, :2, :3, :4, :5, :6, SYSTIMESTAMP, USER, :7)'
|
||||
USING 'CT_MRDS', 'FILE_MANAGER', 'BOTH', v_file_manager_version,
|
||||
'', '', 'MARS-1409';
|
||||
|
||||
EXECUTE IMMEDIATE 'INSERT INTO CT_MRDS.A_PACKAGE_VERSION_TRACKING
|
||||
(PACKAGE_OWNER, PACKAGE_NAME, PACKAGE_TYPE, PACKAGE_VERSION,
|
||||
PACKAGE_BUILD_DATE, PACKAGE_AUTHOR, TRACKING_DATE, TRACKED_BY_USER, TRACKED_BY_MODULE)
|
||||
VALUES (:1, :2, :3, :4, :5, :6, SYSTIMESTAMP, USER, :7)'
|
||||
USING 'CT_MRDS', 'ENV_MANAGER', 'BOTH', v_env_manager_version,
|
||||
'', '', 'MARS-1409';
|
||||
|
||||
EXECUTE IMMEDIATE 'INSERT INTO CT_MRDS.A_PACKAGE_VERSION_TRACKING
|
||||
(PACKAGE_OWNER, PACKAGE_NAME, PACKAGE_TYPE, PACKAGE_VERSION,
|
||||
PACKAGE_BUILD_DATE, PACKAGE_AUTHOR, TRACKING_DATE, TRACKED_BY_USER, TRACKED_BY_MODULE)
|
||||
VALUES (:1, :2, :3, :4, :5, :6, SYSTIMESTAMP, USER, :7)'
|
||||
USING 'CT_MRDS', 'FILE_ARCHIVER', 'BOTH', v_file_archiver_version,
|
||||
'', '', 'MARS-1409';
|
||||
|
||||
COMMIT;
|
||||
DBMS_OUTPUT.PUT_LINE('Package version tracking recorded successfully');
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE('ERROR: Could not record version tracking - ' || SQLERRM);
|
||||
RAISE;
|
||||
END;
|
||||
END;
|
||||
/
|
||||
|
||||
@@ -31,7 +31,7 @@ PROMPT
|
||||
PROMPT Package Compilation Status:
|
||||
SELECT object_name, object_type, status, last_ddl_time
|
||||
FROM user_objects
|
||||
WHERE object_name IN ('FILE_MANAGER', 'ENV_MANAGER')
|
||||
WHERE object_name IN ('FILE_MANAGER', 'ENV_MANAGER', 'FILE_ARCHIVER')
|
||||
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
|
||||
ORDER BY object_name, object_type;
|
||||
|
||||
@@ -40,7 +40,7 @@ PROMPT
|
||||
PROMPT Compilation Errors (if any):
|
||||
SELECT name, type, line, position, text
|
||||
FROM user_errors
|
||||
WHERE name IN ('FILE_MANAGER', 'ENV_MANAGER')
|
||||
WHERE name IN ('FILE_MANAGER', 'ENV_MANAGER', 'FILE_ARCHIVER')
|
||||
ORDER BY name, type, line, position;
|
||||
|
||||
PROMPT
|
||||
|
||||
@@ -16,10 +16,11 @@ CREATE TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED (
|
||||
EXTERNAL_TABLE_NAME VARCHAR2(200),
|
||||
PARTITION_YEAR VARCHAR2(4),
|
||||
PARTITION_MONTH VARCHAR2(2),
|
||||
ARCH_FILE_NAME VARCHAR2(1000),
|
||||
ARCH_PATH VARCHAR2(1000),
|
||||
PROCESS_NAME VARCHAR2(200),
|
||||
CONSTRAINT A_SOURCE_FILE_RECEIVED_PK PRIMARY KEY (A_SOURCE_FILE_RECEIVED_KEY),
|
||||
CONSTRAINT ASFR_A_SOURCE_FILE_CONFIG_KEY_FK FOREIGN KEY(A_SOURCE_FILE_CONFIG_KEY) REFERENCES CT_MRDS.A_SOURCE_FILE_CONFIG(A_SOURCE_FILE_CONFIG_KEY),
|
||||
CONSTRAINT A_SOURCE_FILE_RECEIVED_CHK CHECK (PROCESSING_STATUS IN ('RECEIVED', 'VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED'))
|
||||
CONSTRAINT A_SOURCE_FILE_RECEIVED_CHK CHECK (PROCESSING_STATUS IN ('RECEIVED', 'VALIDATION_FAILED', 'VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED'))
|
||||
) TABLESPACE "DATA";
|
||||
|
||||
-- Unique index for file identification (workaround for TIMESTAMP WITH TIMEZONE constraint limitation)
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
-- ====================================================================
|
||||
-- TRG_A_WORKFLOW_HISTORY Trigger Definition
|
||||
-- ====================================================================
|
||||
-- Purpose: Trigger to insert workflow completion data to CT_ODS.A_LOAD_HISTORY
|
||||
-- Source: new_EXP.sql export from production database
|
||||
-- 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
|
||||
-- ====================================================================
|
||||
|
||||
CREATE OR REPLACE EDITIONABLE TRIGGER "CT_MRDS"."TRG_A_WORKFLOW_HISTORY"
|
||||
@@ -13,6 +14,7 @@ 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
|
||||
@@ -35,6 +37,16 @@ BEGIN
|
||||
);
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
-- MARS-1409: When workflow completes successfully, mark linked files as INGESTED
|
||||
IF :new.workflow_successful = 'Y' THEN
|
||||
IF INSERTING OR (UPDATING AND (:old.workflow_successful IS NULL OR :old.workflow_successful != 'Y')) THEN
|
||||
UPDATE CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||
SET PROCESSING_STATUS = 'INGESTED',
|
||||
PROCESS_NAME = :new.service_name
|
||||
WHERE A_WORKFLOW_HISTORY_KEY = :new.a_workflow_history_key;
|
||||
END IF;
|
||||
END IF;
|
||||
END;
|
||||
|
||||
/
|
||||
@@ -83,3 +83,8 @@ cd .\MARS_Packages\REL02_POST\MARS-956
|
||||
echo 'yes' | sql "ADMIN/Cloudpass#34@ggmichalski_high" "@install_mars956.sql"
|
||||
echo 'yes' | sql "ADMIN/Cloudpass#34@ggmichalski_high" "@rollback_mars956.sql"
|
||||
7z a -pMojeSuperHaslo#123 -mhe=on M956_arch.7z MARS-956
|
||||
|
||||
cd .\MARS_Packages\REL02_POST\MARS-1409
|
||||
echo 'yes' | sql "ADMIN/Cloudpass#34@ggmichalski_high" "@install_mars1409.sql"
|
||||
echo 'yes' | sql "ADMIN/Cloudpass#34@ggmichalski_high" "@rollback_mars1409.sql"
|
||||
7z a -pMojeSuperHaslo#123 -mhe=on M1409_arch.7z MARS-1409
|
||||
|
||||
@@ -1390,10 +1390,4 @@ ORDER BY SIZE_GB DESC;
|
||||
└── *.parquet -- Archived data
|
||||
```
|
||||
|
||||
## Author
|
||||
|
||||
Created by: Grzegorz Michalski
|
||||
Date: 2026-02-11
|
||||
Schema: CT_MRDS
|
||||
Package: FILE_ARCHIVER
|
||||
Version: 3.3.0
|
||||
|
||||
Reference in New Issue
Block a user