From 6b2f60f4132a0ae3958b338e84c15c58a1521fc3 Mon Sep 17 00:00:00 2001 From: Grzegorz Michalski Date: Fri, 13 Mar 2026 11:40:19 +0100 Subject: [PATCH] feat: Update FILE_ARCHIVER package to version 3.3.1 with improved handling for empty ODS bucket scenarios --- .../MARS-1409/new_version/FILE_ARCHIVER.pkb | 36 +++++++++++++++++-- .../MARS-1409/new_version/FILE_ARCHIVER.pkg | 5 +-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkb b/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkb index 1c9f880..92990eb 100644 --- a/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkb +++ b/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkb @@ -171,7 +171,19 @@ AS ; -- Get all files that will be archived into "vfiles" collection ("regular data files") - execute immediate vQuery bulk collect into vfiles; + -- MARS-1468: Handle ORA-29913 - no files in ODS bucket (empty external table location) + BEGIN + execute immediate vQuery bulk collect into vfiles; + EXCEPTION + WHEN OTHERS THEN + IF SQLCODE = -29913 THEN + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('No files found in ODS bucket (ORA-29913: empty location). Nothing to archive.', 'INFO', vParameters); + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('End','INFO',vParameters); + RETURN; + ELSE + RAISE; + END IF; + END; -- Start EXPORT "regular data files" to parquet and DROP "csv" FOR ym_loop IN (select distinct year, month from table(vfiles) order by 1,2) LOOP @@ -495,7 +507,27 @@ AS on t.filename = r.object_name' ; CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('vQuery','DEBUG',vQuery); - execute immediate vQuery into vStats; + -- MARS-1468: Handle ORA-29913 - no files in ODS bucket (empty external table location) + BEGIN + execute immediate vQuery into vStats; + EXCEPTION + WHEN OTHERS THEN + IF SQLCODE = -29913 THEN + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('No files found in ODS bucket (ORA-29913: empty location). Saving zero statistics.', 'INFO', vParameters); + vStats.A_SOURCE_FILE_CONFIG_KEY := pSourceFileConfigKey; + vStats.TABLE_NAME := vTableName; + vStats.FILE_COUNT := 0; + vStats.OLD_FILE_COUNT := 0; + vStats.ROW_COUNT := 0; + vStats.OLD_ROW_COUNT := 0; + vStats.BYTES := 0; + vStats.OLD_BYTES := 0; + vStats.ARCHIVE_THRESHOLD_DAYS := vSourceFileConfig.ARCHIVE_THRESHOLD_DAYS; + vStats.CREATED := SYSTIMESTAMP; + ELSE + RAISE; + END IF; + END; vStats.A_TABLE_STAT_KEY := CT_MRDS.A_TABLE_STAT_KEY_SEQ.NEXTVAL; insert into CT_MRDS.A_TABLE_STAT_HIST values vStats; diff --git a/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkg b/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkg index 8b14196..69a09e1 100644 --- a/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkg +++ b/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkg @@ -17,12 +17,13 @@ AS **/ -- Package Version Information (Semantic Versioning: MAJOR.MINOR.PATCH) - PACKAGE_VERSION CONSTANT VARCHAR2(10) := '3.3.0'; - PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2026-02-11 12:00:00'; + PACKAGE_VERSION CONSTANT VARCHAR2(10) := '3.3.1'; + PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2026-03-13 09:00:00'; PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski'; -- Version History (Latest changes first) VERSION_HISTORY CONSTANT VARCHAR2(4000) := + '3.3.1 (2026-03-13): MARS-1468 - Fixed ORA-29913 handling in ARCHIVE_TABLE_DATA (graceful RETURN when ODS bucket is empty) and GATHER_TABLE_STAT (saves zero statistics instead of raising error)' || CHR(13)||CHR(10) || '3.3.0 (2026-02-11): Added IS_ARCHIVE_ENABLED and IS_KEEP_IN_TRASH columns to A_SOURCE_FILE_CONFIG for selective archiving and config-based TRASH policy. Removed pKeepInTrash parameter (now from config). Added ARCHIVE_ALL batch procedure with 3-level granularity (config/source/all). Added GATHER_TABLE_STAT_ALL batch statistics procedure with 3-level granularity. Added RESTORE_FILE_FROM_TRASH and PURGE_TRASH_FOLDER with 3-level granularity' || CHR(13)||CHR(10) || '3.2.1 (2026-02-10): Fixed status update - ARCHIVED → ARCHIVED_AND_TRASHED when moving files to TRASH folder (critical bug fix)' || CHR(13)||CHR(10) || '3.2.0 (2026-02-06): Added pKeepInTrash parameter (DEFAULT TRUE) to ARCHIVE_TABLE_DATA for TRASH folder retention control - files kept in TRASH subfolder (DATA bucket) by default for safety and compliance' || CHR(13)||CHR(10) ||