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 2f2891c..1bfed46 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 @@ -58,14 +58,15 @@ AS BEGIN vParameters := CT_MRDS.ENV_MANAGER.FORMAT_PARAMETERS(SYS.ODCIVARCHAR2LIST('pSourceFileConfigKey => '||nvl(to_char(pSourceFileConfigKey),NULL))); CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('Start','DEBUG', vParameters); - SELECT count(*) , min(SOURCE_FILE_TYPE) + -- LEFT JOIN ensures SOURCE_FILE_TYPE is retrieved from config even when no stats exist yet + SELECT count(s.A_SOURCE_FILE_CONFIG_KEY), min(c.SOURCE_FILE_TYPE) INTO vCount, vSourceFileType - FROM CT_MRDS.A_TABLE_STAT s - JOIN CT_MRDS.A_SOURCE_FILE_CONFIG c + FROM CT_MRDS.A_SOURCE_FILE_CONFIG c + LEFT JOIN CT_MRDS.A_TABLE_STAT s ON s.A_SOURCE_FILE_CONFIG_KEY = c.A_SOURCE_FILE_CONFIG_KEY - WHERE s.A_SOURCE_FILE_CONFIG_KEY = pSourceFileConfigKey; + WHERE c.A_SOURCE_FILE_CONFIG_KEY = pSourceFileConfigKey; - IF vCount=0 and vSourceFileType='INPUT' THEN + IF vCount = 0 AND vSourceFileType = 'INPUT' THEN GATHER_TABLE_STAT(pSourceFileConfigKey); END IF; @@ -74,9 +75,13 @@ AS INTO vTableStat FROM CT_MRDS.A_TABLE_STAT WHERE A_SOURCE_FILE_CONFIG_KEY = pSourceFileConfigKey; --- EXCEPTION --- WHEN NO_DATA_FOUND THEN --- + EXCEPTION + WHEN NO_DATA_FOUND THEN + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT( + 'No statistics found in A_TABLE_STAT for config key ' || pSourceFileConfigKey + || ' (SOURCE_FILE_TYPE=' || NVL(vSourceFileType, 'NULL') || '). Cannot proceed with archival.', + 'ERROR', vParameters); + RAISE; END; CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('End','DEBUG',vParameters); @@ -171,13 +176,14 @@ AS ; -- Get all files that will be archived into "vfiles" collection ("regular data files") - -- MARS-1468: Handle ORA-29913 - no files in ODS bucket (empty external table location) + -- MARS-1468: Handle ORA-29913/ORA-12801 - no files in ODS bucket (empty external table location) + -- ORA-29913 may come directly or wrapped in ORA-12801 (parallel query) with KUP-05002 root cause 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); + IF SQLCODE IN (-29913, -12801) AND DBMS_UTILITY.FORMAT_ERROR_STACK LIKE '%KUP-05002%' THEN + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('No files found in ODS bucket (empty location, SQLCODE=' || SQLCODE || '). Nothing to archive.', 'INFO', vParameters); CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('End','INFO',vParameters); RETURN; ELSE @@ -185,6 +191,18 @@ AS END IF; END; + -- Check if any files match archival criteria + IF vfiles.COUNT = 0 THEN + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT( + 'No files matching archival criteria found (strategy: ' || vSourceFileConfig.ARCHIVAL_STRATEGY + || ', IS_WORKFLOW_SUCCESS_REQUIRED: ' || vSourceFileConfig.IS_WORKFLOW_SUCCESS_REQUIRED || '). Nothing to archive.', + 'INFO', vParameters); + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('End','INFO',vParameters); + RETURN; + END IF; + + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('Files matching archival criteria: ' || vfiles.COUNT, 'INFO', vParameters); + -- 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 dbms_output.put_line('year: '||ym_loop.year||' - '||'month: '||ym_loop.month); @@ -538,13 +556,14 @@ AS on t.filename = r.object_name' ; CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('vQuery:', 'DEBUG', vQuery); - -- MARS-1468: Handle ORA-29913 - no files in ODS bucket (empty external table location) + -- MARS-1468: Handle ORA-29913/ORA-12801 - no files in ODS bucket (empty external table location) + -- ORA-29913 may come directly or wrapped in ORA-12801 (parallel query) with KUP-05002 root cause 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); + IF SQLCODE IN (-29913, -12801) AND DBMS_UTILITY.FORMAT_ERROR_STACK LIKE '%KUP-05002%' THEN + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('No files found in ODS bucket (empty location, SQLCODE=' || SQLCODE || '). Saving zero statistics.', 'INFO', vParameters); vStats.A_SOURCE_FILE_CONFIG_KEY := pSourceFileConfigKey; vStats.TABLE_NAME := vTableName; vStats.FILE_COUNT := 0;