From b353fb38f598343a9952534cb1edf54a1499d2bc Mon Sep 17 00:00:00 2001 From: Grzegorz Michalski Date: Tue, 3 Feb 2026 11:08:12 +0100 Subject: [PATCH] Add installation script for ODS.FILE_MANAGER_ODS Package Specification v2.2.0 --- ...1057_install_ODS_FILE_MANAGER_ODS_SPEC.sql | 46 ++++ ...1057_install_ODS_FILE_MANAGER_ODS_BODY.sql | 47 ++++ ...057_rollback_ODS_FILE_MANAGER_ODS_BODY.sql | 46 ++++ ...057_rollback_ODS_FILE_MANAGER_ODS_SPEC.sql | 45 ++++ MARS_Packages/REL03/MARS-1057/README.md | 128 +++++++++-- .../REL03/MARS-1057/install_mars1057.sql | 20 +- .../MARS-1057/new_version/FILE_MANAGER.pkb | 6 +- .../new_version/FILE_MANAGER_ODS.pkb | 216 ++++++++++++++++++ .../new_version/FILE_MANAGER_ODS.pkg | 168 ++++++++++++++ .../REL03/MARS-1057/rollback_mars1057.sql | 30 ++- .../rollback_version/FILE_MANAGER_ODS.pkb | 118 ++++++++++ .../rollback_version/FILE_MANAGER_ODS.pkg | 116 ++++++++++ .../MARS-1057/track_package_versions.sql | 3 +- 13 files changed, 952 insertions(+), 37 deletions(-) create mode 100644 MARS_Packages/REL03/MARS-1057/03_MARS_1057_install_ODS_FILE_MANAGER_ODS_SPEC.sql create mode 100644 MARS_Packages/REL03/MARS-1057/04_MARS_1057_install_ODS_FILE_MANAGER_ODS_BODY.sql create mode 100644 MARS_Packages/REL03/MARS-1057/93_MARS_1057_rollback_ODS_FILE_MANAGER_ODS_BODY.sql create mode 100644 MARS_Packages/REL03/MARS-1057/94_MARS_1057_rollback_ODS_FILE_MANAGER_ODS_SPEC.sql create mode 100644 MARS_Packages/REL03/MARS-1057/new_version/FILE_MANAGER_ODS.pkb create mode 100644 MARS_Packages/REL03/MARS-1057/new_version/FILE_MANAGER_ODS.pkg create mode 100644 MARS_Packages/REL03/MARS-1057/rollback_version/FILE_MANAGER_ODS.pkb create mode 100644 MARS_Packages/REL03/MARS-1057/rollback_version/FILE_MANAGER_ODS.pkg diff --git a/MARS_Packages/REL03/MARS-1057/03_MARS_1057_install_ODS_FILE_MANAGER_ODS_SPEC.sql b/MARS_Packages/REL03/MARS-1057/03_MARS_1057_install_ODS_FILE_MANAGER_ODS_SPEC.sql new file mode 100644 index 0000000..723c316 --- /dev/null +++ b/MARS_Packages/REL03/MARS-1057/03_MARS_1057_install_ODS_FILE_MANAGER_ODS_SPEC.sql @@ -0,0 +1,46 @@ +-- =================================================================== +-- MARS-1057: Install ODS.FILE_MANAGER_ODS Package Specification +-- =================================================================== +-- Purpose: Deploy FILE_MANAGER_ODS package specification v2.2.0 +-- Author: Grzegorz Michalski +-- Date: 2025-11-27 +-- Package: ODS.FILE_MANAGER_ODS +-- Version: 2.1.0 -> 2.2.0 +-- Changes: Added CREATE_EXTERNAL_TABLES_SET and CREATE_EXTERNAL_TABLES_BATCH wrappers + +SET ECHO ON +SET DEFINE OFF + +PROMPT Installing ODS.FILE_MANAGER_ODS Package Specification v2.2.0... + +@@new_version/FILE_MANAGER_ODS.pkg + +PROMPT Checking for compilation errors... +SELECT + LINE, + POSITION, + TEXT AS ERROR_MESSAGE +FROM ALL_ERRORS +WHERE OWNER = 'ODS' + AND NAME = 'FILE_MANAGER_ODS' + AND TYPE = 'PACKAGE' +ORDER BY SEQUENCE; + +PROMPT Verifying package status... +SELECT + OBJECT_NAME, + OBJECT_TYPE, + STATUS, + TO_CHAR(LAST_DDL_TIME, 'YYYY-MM-DD HH24:MI:SS') AS LAST_MODIFIED +FROM ALL_OBJECTS +WHERE OWNER = 'ODS' + AND OBJECT_NAME = 'FILE_MANAGER_ODS' + AND OBJECT_TYPE = 'PACKAGE'; + +PROMPT +PROMPT FILE_MANAGER_ODS Package Specification installation completed. +PROMPT + +SET DEFINE ON + +/ diff --git a/MARS_Packages/REL03/MARS-1057/04_MARS_1057_install_ODS_FILE_MANAGER_ODS_BODY.sql b/MARS_Packages/REL03/MARS-1057/04_MARS_1057_install_ODS_FILE_MANAGER_ODS_BODY.sql new file mode 100644 index 0000000..ac6218e --- /dev/null +++ b/MARS_Packages/REL03/MARS-1057/04_MARS_1057_install_ODS_FILE_MANAGER_ODS_BODY.sql @@ -0,0 +1,47 @@ +-- =================================================================== +-- MARS-1057: Install ODS.FILE_MANAGER_ODS Package Body +-- =================================================================== +-- Purpose: Deploy FILE_MANAGER_ODS package body v2.2.0 +-- Author: Grzegorz Michalski +-- Date: 2025-11-27 +-- Package: ODS.FILE_MANAGER_ODS +-- Version: 2.1.0 -> 2.2.0 +-- Changes: Added CREATE_EXTERNAL_TABLES_SET and CREATE_EXTERNAL_TABLES_BATCH wrapper implementations + +SET ECHO ON +SET DEFINE OFF + +PROMPT Installing ODS.FILE_MANAGER_ODS Package Body v2.2.0... + +@@new_version/FILE_MANAGER_ODS.pkb + +PROMPT Checking for compilation errors... +SELECT + LINE, + POSITION, + TEXT AS ERROR_MESSAGE +FROM ALL_ERRORS +WHERE OWNER = 'ODS' + AND NAME = 'FILE_MANAGER_ODS' + AND TYPE = 'PACKAGE BODY' +ORDER BY SEQUENCE; + +PROMPT Verifying package status... +SELECT + OBJECT_NAME, + OBJECT_TYPE, + STATUS, + TO_CHAR(LAST_DDL_TIME, 'YYYY-MM-DD HH24:MI:SS') AS LAST_MODIFIED +FROM ALL_OBJECTS +WHERE OWNER = 'ODS' + AND OBJECT_NAME = 'FILE_MANAGER_ODS' + AND OBJECT_TYPE IN ('PACKAGE', 'PACKAGE BODY') +ORDER BY OBJECT_TYPE; + +PROMPT +PROMPT FILE_MANAGER_ODS Package Body installation completed. +PROMPT + +SET DEFINE ON + +/ diff --git a/MARS_Packages/REL03/MARS-1057/93_MARS_1057_rollback_ODS_FILE_MANAGER_ODS_BODY.sql b/MARS_Packages/REL03/MARS-1057/93_MARS_1057_rollback_ODS_FILE_MANAGER_ODS_BODY.sql new file mode 100644 index 0000000..8f8de59 --- /dev/null +++ b/MARS_Packages/REL03/MARS-1057/93_MARS_1057_rollback_ODS_FILE_MANAGER_ODS_BODY.sql @@ -0,0 +1,46 @@ +-- =================================================================== +-- MARS-1057: Rollback ODS.FILE_MANAGER_ODS Package Body +-- =================================================================== +-- Purpose: Restore FILE_MANAGER_ODS package body to v2.1.0 +-- Author: Grzegorz Michalski +-- Date: 2025-11-27 +-- Package: ODS.FILE_MANAGER_ODS +-- Version: 2.2.0 -> 2.1.0 (rollback) + +SET ECHO ON +SET DEFINE OFF + +PROMPT Rolling back ODS.FILE_MANAGER_ODS Package Body to v2.1.0... + +@@rollback_version/FILE_MANAGER_ODS.pkb + +PROMPT Checking for compilation errors... +SELECT + LINE, + POSITION, + TEXT AS ERROR_MESSAGE +FROM ALL_ERRORS +WHERE OWNER = 'ODS' + AND NAME = 'FILE_MANAGER_ODS' + AND TYPE = 'PACKAGE BODY' +ORDER BY SEQUENCE; + +PROMPT Verifying package status... +SELECT + OBJECT_NAME, + OBJECT_TYPE, + STATUS, + TO_CHAR(LAST_DDL_TIME, 'YYYY-MM-DD HH24:MI:SS') AS LAST_MODIFIED +FROM ALL_OBJECTS +WHERE OWNER = 'ODS' + AND OBJECT_NAME = 'FILE_MANAGER_ODS' + AND OBJECT_TYPE IN ('PACKAGE', 'PACKAGE BODY') +ORDER BY OBJECT_TYPE; + +PROMPT +PROMPT FILE_MANAGER_ODS Package Body rollback completed. +PROMPT + +SET DEFINE ON + +/ diff --git a/MARS_Packages/REL03/MARS-1057/94_MARS_1057_rollback_ODS_FILE_MANAGER_ODS_SPEC.sql b/MARS_Packages/REL03/MARS-1057/94_MARS_1057_rollback_ODS_FILE_MANAGER_ODS_SPEC.sql new file mode 100644 index 0000000..de742e2 --- /dev/null +++ b/MARS_Packages/REL03/MARS-1057/94_MARS_1057_rollback_ODS_FILE_MANAGER_ODS_SPEC.sql @@ -0,0 +1,45 @@ +-- =================================================================== +-- MARS-1057: Rollback ODS.FILE_MANAGER_ODS Package Specification +-- =================================================================== +-- Purpose: Restore FILE_MANAGER_ODS package specification to v2.1.0 +-- Author: Grzegorz Michalski +-- Date: 2025-11-27 +-- Package: ODS.FILE_MANAGER_ODS +-- Version: 2.2.0 -> 2.1.0 (rollback) + +SET ECHO ON +SET DEFINE OFF + +PROMPT Rolling back ODS.FILE_MANAGER_ODS Package Specification to v2.1.0... + +@@rollback_version/FILE_MANAGER_ODS.pkg + +PROMPT Checking for compilation errors... +SELECT + LINE, + POSITION, + TEXT AS ERROR_MESSAGE +FROM ALL_ERRORS +WHERE OWNER = 'ODS' + AND NAME = 'FILE_MANAGER_ODS' + AND TYPE = 'PACKAGE' +ORDER BY SEQUENCE; + +PROMPT Verifying package status... +SELECT + OBJECT_NAME, + OBJECT_TYPE, + STATUS, + TO_CHAR(LAST_DDL_TIME, 'YYYY-MM-DD HH24:MI:SS') AS LAST_MODIFIED +FROM ALL_OBJECTS +WHERE OWNER = 'ODS' + AND OBJECT_NAME = 'FILE_MANAGER_ODS' + AND OBJECT_TYPE = 'PACKAGE'; + +PROMPT +PROMPT FILE_MANAGER_ODS Package Specification rollback completed. +PROMPT + +SET DEFINE ON + +/ diff --git a/MARS_Packages/REL03/MARS-1057/README.md b/MARS_Packages/REL03/MARS-1057/README.md index cf2f016..7331493 100644 --- a/MARS_Packages/REL03/MARS-1057/README.md +++ b/MARS_Packages/REL03/MARS-1057/README.md @@ -1,32 +1,37 @@ # MARS-1057: Batch External Table Creation ## Overview -This MARS package adds batch external table creation capabilities to the FILE_MANAGER package, enabling automatic creation of external table sets (INBOX, ODS, ARCHIVE) based on A_SOURCE_FILE_CONFIG metadata. +This MARS package adds batch external table creation capabilities to the FILE_MANAGER and FILE_MANAGER_ODS packages, enabling automatic creation of external table sets (INBOX, ODS, ARCHIVE) based on A_SOURCE_FILE_CONFIG metadata. **Jira Issue:** MARS-1057 -**Package Version:** FILE_MANAGER 3.4.0 +**Package Version:** FILE_MANAGER 3.4.0, FILE_MANAGER_ODS 2.2.0 **Author:** Grzegorz Michalski **Date:** 2025-11-27 ## Contents - `install_mars1057.sql` - Master installation script with SPOOL logging - `rollback_mars1057.sql` - Master rollback script -- `01_MARS_1057_install_CT_MRDS_FILE_MANAGER_SPEC.sql` - Install package specification -- `02_MARS_1057_install_CT_MRDS_FILE_MANAGER_BODY.sql` - Install package body -- `91_MARS_1057_rollback_CT_MRDS_FILE_MANAGER_BODY.sql` - Rollback package body -- `92_MARS_1057_rollback_CT_MRDS_FILE_MANAGER_SPEC.sql` - Rollback package specification +- `01_MARS_1057_install_CT_MRDS_FILE_MANAGER_SPEC.sql` - Install FILE_MANAGER package specification +- `02_MARS_1057_install_CT_MRDS_FILE_MANAGER_BODY.sql` - Install FILE_MANAGER package body +- `03_MARS_1057_install_ODS_FILE_MANAGER_ODS_SPEC.sql` - Install FILE_MANAGER_ODS package specification +- `04_MARS_1057_install_ODS_FILE_MANAGER_ODS_BODY.sql` - Install FILE_MANAGER_ODS package body +- `91_MARS_1057_rollback_CT_MRDS_FILE_MANAGER_SPEC.sql` - Rollback FILE_MANAGER package specification +- `92_MARS_1057_rollback_CT_MRDS_FILE_MANAGER_BODY.sql` - Rollback FILE_MANAGER package body +- `93_MARS_1057_rollback_ODS_FILE_MANAGER_ODS_BODY.sql` - Rollback FILE_MANAGER_ODS package body +- `94_MARS_1057_rollback_ODS_FILE_MANAGER_ODS_SPEC.sql` - Rollback FILE_MANAGER_ODS package specification - `track_package_versions.sql` - Universal package version tracking - `verify_packages_version.sql` - Universal package verification -- `current_version/` - FILE_MANAGER v3.3.0 (before MARS-1057) -- `new_version/` - FILE_MANAGER v3.4.0 (after MARS-1057) +- `rollback_version/` - FILE_MANAGER v3.3.0, FILE_MANAGER_ODS v2.1.0 (before MARS-1057) +- `new_version/` - FILE_MANAGER v3.4.0, FILE_MANAGER_ODS v2.2.0 (after MARS-1057) - `.gitignore` - Git exclusions for temporary files ## Prerequisites - Oracle Database 23ai - FILE_MANAGER package v3.3.0 installed +- FILE_MANAGER_ODS package v2.1.0 installed - ENV_MANAGER package v3.1.0+ with version tracking - ADMIN user access for deployment -- ODS.FILE_MANAGER_ODS package available +- ODS schema with necessary privileges ## New Features @@ -105,12 +110,36 @@ END; - Returns summary (Total/Processed/Failed) - Comprehensive logging +### 3. FILE_MANAGER_ODS Wrapper Procedures +The ODS.FILE_MANAGER_ODS package now includes DEFINER rights wrappers for the new batch procedures. + +**New Wrappers:** +```sql +-- Create single external table set via ODS wrapper +EXEC ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLES_SET( + pSourceFileConfigKey => 123, + pRecreate => FALSE +); + +-- Create batch external tables via ODS wrapper +EXEC ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLES_BATCH( + pSourceKey => 'C2D', + pRecreate => FALSE +); +``` + +**Benefits:** +- Objects created in ODS schema regardless of execution user +- Same functionality as CT_MRDS.FILE_MANAGER with DEFINER rights +- Full logging and error handling +- Consistent API with original package + ## Installation ### Option 1: Master Script (Recommended) ```powershell # IMPORTANT: Execute as ADMIN user -Get-Content "MARS_Packages/REL01/MARS-1057/install_mars1057.sql" | sql "ADMIN/password@service" +Get-Content "MARS_Packages/REL03/MARS-1057/install_mars1057.sql" | sql "ADMIN/password@service" # Log file created: log/INSTALL_MARS_1057__.log ``` @@ -118,30 +147,39 @@ Get-Content "MARS_Packages/REL01/MARS-1057/install_mars1057.sql" | sql "ADMIN/pa **Installation Steps:** 1. Install FILE_MANAGER package specification v3.4.0 2. Install FILE_MANAGER package body v3.4.0 -3. Track version in A_PACKAGE_VERSION_TRACKING -4. Verify all tracked packages for untracked changes +3. Install FILE_MANAGER_ODS package specification v2.2.0 +4. Install FILE_MANAGER_ODS package body v2.2.0 +5. Track versions in A_PACKAGE_VERSION_TRACKING +6. Verify all tracked packages for untracked changes ### Option 2: Individual Scripts ```powershell # IMPORTANT: Execute as ADMIN user Get-Content "01_MARS_1057_install_CT_MRDS_FILE_MANAGER_SPEC.sql" | sql "ADMIN/password@service" Get-Content "02_MARS_1057_install_CT_MRDS_FILE_MANAGER_BODY.sql" | sql "ADMIN/password@service" +Get-Content "03_MARS_1057_install_ODS_FILE_MANAGER_ODS_SPEC.sql" | sql "ADMIN/password@service" +Get-Content "04_MARS_1057_install_ODS_FILE_MANAGER_ODS_BODY.sql" | sql "ADMIN/password@service" Get-Content "track_package_versions.sql" | sql "ADMIN/password@service" Get-Content "verify_packages_version.sql" | sql "ADMIN/password@service" ``` ## Verification ```sql --- Check package version +-- Check FILE_MANAGER version SELECT CT_MRDS.FILE_MANAGER.GET_VERSION() FROM DUAL; -- Expected: 3.4.0 +-- Check FILE_MANAGER_ODS version +SELECT ODS.FILE_MANAGER_ODS.GET_VERSION() FROM DUAL; +-- Expected: 2.2.0 + -- Check for errors (ADMIN user checks specific schema) SELECT * FROM ALL_ERRORS -WHERE OWNER = 'CT_MRDS' AND NAME = 'FILE_MANAGER'; +WHERE OWNER IN ('CT_MRDS', 'ODS') + AND NAME IN ('FILE_MANAGER', 'FILE_MANAGER_ODS'); -- Expected: No rows --- Verify new procedures exist +-- Verify new FILE_MANAGER procedures exist SELECT procedure_name FROM ALL_PROCEDURES WHERE OWNER = 'CT_MRDS' @@ -149,32 +187,78 @@ WHERE OWNER = 'CT_MRDS' AND procedure_name IN ('CREATE_EXTERNAL_TABLES_SET', 'CREATE_EXTERNAL_TABLES_BATCH'); -- Expected: 2 rows +-- Verify new FILE_MANAGER_ODS procedures exist +SELECT procedure_name +FROM ALL_PROCEDURES +WHERE OWNER = 'ODS' + AND object_name = 'FILE_MANAGER_ODS' + AND procedure_name IN ('CREATE_EXTERNAL_TABLES_SET', 'CREATE_EXTERNAL_TABLES_BATCH'); +-- Expected: 2 rows + -- Check for untracked changes SELECT CT_MRDS.ENV_MANAGER.CHECK_PACKAGE_CHANGES('CT_MRDS', 'FILE_MANAGER') FROM DUAL; -- Expected: OK: Package CT_MRDS.FILE_MANAGER has not changed. + +SELECT CT_MRDS.ENV_MANAGER.CHECK_PACKAGE_CHANGES('ODS', 'FILE_MANAGER_ODS') FROM DUAL; +-- Expected: OK: Package ODS.FILE_MANAGER_ODS has not changed. ``` ## Rollback ```powershell # IMPORTANT: Execute as ADMIN user -Get-Content "MARS_Packages/REL01/MARS-1057/rollback_mars1057.sql" | sql "ADMIN/password@service" +Get-Content "MARS_Packages/REL03/MARS-1057/rollback_mars1057.sql" | sql "ADMIN/password@service" ``` **Rollback restores:** - FILE_MANAGER package specification v3.3.0 - FILE_MANAGER package body v3.3.0 -- Removes CREATE_EXTERNAL_TABLES_SET procedure -- Removes CREATE_EXTERNAL_TABLES_BATCH procedure +- FILE_MANAGER_ODS package specification v2.1.0 +- FILE_MANAGER_ODS package body v2.1.0 +- Removes CREATE_EXTERNAL_TABLES_SET procedures from both packages +- Removes CREATE_EXTERNAL_TABLES_BATCH procedures from both packages ## Expected Changes - **FILE_MANAGER package**: v3.3.0 → v3.4.0 -- **New procedures**: CREATE_EXTERNAL_TABLES_SET, CREATE_EXTERNAL_TABLES_BATCH -- **SPEC size**: +3.3 KB (declaration and documentation) -- **BODY size**: +8.6 KB (implementation with logging) +- **FILE_MANAGER_ODS package**: v2.1.0 → v2.2.0 +- **New procedures in FILE_MANAGER**: CREATE_EXTERNAL_TABLES_SET, CREATE_EXTERNAL_TABLES_BATCH +- **New procedures in FILE_MANAGER_ODS**: CREATE_EXTERNAL_TABLES_SET, CREATE_EXTERNAL_TABLES_BATCH +- **FILE_MANAGER SPEC size**: +3.3 KB (declaration and documentation) +- **FILE_MANAGER BODY size**: +8.6 KB (implementation with logging) +- **FILE_MANAGER_ODS SPEC size**: +2.8 KB (wrapper declarations) +- **FILE_MANAGER_ODS BODY size**: +4.5 KB (wrapper implementations) ## Testing -### Test 1: Create Single Set +### Test 1: Create Single Set (CT_MRDS.FILE_MANAGER) +```sql +BEGIN + CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLES_SET( + pSourceFileConfigKey => 123 + ); +END; +/ + +-- Verify tables created +SELECT table_name +FROM ALL_TABLES +WHERE OWNER = 'ODS' + AND (table_name LIKE '%_INBOX' + OR table_name LIKE '%_ODS' + OR table_name LIKE '%_ARCHIVE'); +``` + +### Test 2: Create Single Set (ODS.FILE_MANAGER_ODS) +```sql +BEGIN + ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLES_SET( + pSourceFileConfigKey => 123, + pRecreate => TRUE + ); +END; +/ +``` + +### Test 3: Batch Creation (CT_MRDS.FILE_MANAGER) ```sql BEGIN FILE_MANAGER.CREATE_EXTERNAL_TABLES_SET( diff --git a/MARS_Packages/REL03/MARS-1057/install_mars1057.sql b/MARS_Packages/REL03/MARS-1057/install_mars1057.sql index 7119fd9..1347817 100644 --- a/MARS_Packages/REL03/MARS-1057/install_mars1057.sql +++ b/MARS_Packages/REL03/MARS-1057/install_mars1057.sql @@ -36,9 +36,13 @@ PROMPT This script will install FILE_MANAGER package v3.4.0 with new features: PROMPT - CREATE_EXTERNAL_TABLES_SET procedure PROMPT - CREATE_EXTERNAL_TABLES_BATCH procedure PROMPT +PROMPT And FILE_MANAGER_ODS package v2.2.0 with wrapper procedures. +PROMPT PROMPT Changes: PROMPT - FILE_MANAGER package specification (3.3.0 -> 3.4.0) PROMPT - FILE_MANAGER package body (3.3.0 -> 3.4.0) +PROMPT - FILE_MANAGER_ODS package specification (2.1.0 -> 2.2.0) +PROMPT - FILE_MANAGER_ODS package body (2.1.0 -> 2.2.0) PROMPT PROMPT Expected Duration: 1-2 minutes PROMPT ========================================================================= @@ -68,13 +72,25 @@ PROMPT ========================================================================= PROMPT PROMPT ========================================================================= -PROMPT Step 3: Track Package Version +PROMPT Step 3: Install FILE_MANAGER_ODS Package Specification v2.2.0 +PROMPT ========================================================================= +@@03_MARS_1057_install_ODS_FILE_MANAGER_ODS_SPEC.sql + +PROMPT +PROMPT ========================================================================= +PROMPT Step 4: Install FILE_MANAGER_ODS Package Body v2.2.0 +PROMPT ========================================================================= +@@04_MARS_1057_install_ODS_FILE_MANAGER_ODS_BODY.sql + +PROMPT +PROMPT ========================================================================= +PROMPT Step 5: Track Package Versions PROMPT ========================================================================= @@track_package_versions.sql PROMPT PROMPT ========================================================================= -PROMPT Step 4: Verify All Tracked Packages +PROMPT Step 6: Verify All Tracked Packages PROMPT ========================================================================= @@verify_packages_version.sql diff --git a/MARS_Packages/REL03/MARS-1057/new_version/FILE_MANAGER.pkb b/MARS_Packages/REL03/MARS-1057/new_version/FILE_MANAGER.pkb index baf7e98..427321f 100644 --- a/MARS_Packages/REL03/MARS-1057/new_version/FILE_MANAGER.pkb +++ b/MARS_Packages/REL03/MARS-1057/new_version/FILE_MANAGER.pkb @@ -1984,7 +1984,7 @@ AS -- 5. Create INBOX external table ENV_MANAGER.LOG_PROCESS_EVENT('Creating INBOX external table: ' || vInboxTableName, 'INFO'); - ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE( + CREATE_EXTERNAL_TABLE( pTableName => vInboxTableName, pTemplateTableName => vTemplateTableName, pPrefix => vInboxPrefix, @@ -1995,7 +1995,7 @@ AS -- 6. Create ODS external table ENV_MANAGER.LOG_PROCESS_EVENT('Creating ODS external table: ' || vOdsTableName, 'INFO'); - ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE( + CREATE_EXTERNAL_TABLE( pTableName => vOdsTableName, pTemplateTableName => vTemplateTableName, pPrefix => vOdsPrefix, @@ -2006,7 +2006,7 @@ AS -- 7. Create ARCHIVE external table ENV_MANAGER.LOG_PROCESS_EVENT('Creating ARCHIVE external table: ' || vArchiveTableName, 'INFO'); - ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE( + CREATE_EXTERNAL_TABLE( pTableName => vArchiveTableName, pTemplateTableName => vTemplateTableName, pPrefix => vArchivePrefix, diff --git a/MARS_Packages/REL03/MARS-1057/new_version/FILE_MANAGER_ODS.pkb b/MARS_Packages/REL03/MARS-1057/new_version/FILE_MANAGER_ODS.pkb new file mode 100644 index 0000000..ceb9360 --- /dev/null +++ b/MARS_Packages/REL03/MARS-1057/new_version/FILE_MANAGER_ODS.pkb @@ -0,0 +1,216 @@ +create or replace PACKAGE BODY ODS.FILE_MANAGER_ODS +AS + + /** + * CREATE_EXTERNAL_TABLE - Wrapper for CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE + */ + PROCEDURE CREATE_EXTERNAL_TABLE ( + pTableName IN VARCHAR2, + pTemplateTableName IN VARCHAR2, + pPrefix IN VARCHAR2, + pBucketUri IN VARCHAR2 DEFAULT CT_MRDS.ENV_MANAGER.gvInboxBucketUri, + pFileName IN VARCHAR2 DEFAULT NULL, + pDelimiter IN VARCHAR2 DEFAULT ',', + pEncoding IN VARCHAR2 DEFAULT NULL + ) + IS + vParameters CT_MRDS.A_PROCESS_LOG.PROCEDURE_PARAMETERS%TYPE; + BEGIN + -- Log the start of the procedure + vParameters := CT_MRDS.ENV_MANAGER.FORMAT_PARAMETERS( + SYS.ODCIVARCHAR2LIST( + 'pTableName => ''' || pTableName || '''', + 'pTemplateTableName => ''' || pTemplateTableName || '''', + 'pPrefix => ''' || pPrefix || '''', + 'pBucketUri => ''' || pBucketUri || '''', + 'pFileName => ''' || NVL(pFileName, 'NULL') || '''', + 'pDelimiter => ''' || pDelimiter || '''', + 'pEncoding => ''' || NVL(pEncoding, 'NULL') || '''' + ) + ); + + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('Start FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE', 'INFO', vParameters); + + -- Call the original CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE procedure + -- This ensures all logic remains centralized in the original package + -- and ODS wrapper simply delegates execution with DEFINER rights + CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE( + pTableName => pTableName, + pTemplateTableName => pTemplateTableName, + pPrefix => pPrefix, + pBucketUri => pBucketUri, + pFileName => pFileName, + pDelimiter => pDelimiter, + pEncoding => pEncoding + ); + + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('End FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE', 'INFO', vParameters); + + EXCEPTION + WHEN OTHERS THEN + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT( + 'Error in ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE: ' || SQLERRM, + 'ERROR', + vParameters + ); + RAISE; + END CREATE_EXTERNAL_TABLE; + + ---------------------------------------------------------------------------------------------------- + + /** + * CREATE_EXTERNAL_TABLES_SET - Wrapper for CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLES_SET + */ + PROCEDURE CREATE_EXTERNAL_TABLES_SET ( + pSourceFileConfigKey IN NUMBER, + pRecreate IN BOOLEAN DEFAULT FALSE + ) + IS + vParameters CT_MRDS.A_PROCESS_LOG.PROCEDURE_PARAMETERS%TYPE; + vRecreateStr VARCHAR2(10); + BEGIN + -- Convert BOOLEAN to VARCHAR2 for logging + vRecreateStr := CASE WHEN pRecreate THEN 'TRUE' ELSE 'FALSE' END; + + -- Log the start of the procedure + vParameters := CT_MRDS.ENV_MANAGER.FORMAT_PARAMETERS( + SYS.ODCIVARCHAR2LIST( + 'pSourceFileConfigKey => ' || pSourceFileConfigKey, + 'pRecreate => ' || vRecreateStr + ) + ); + + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('Start FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLES_SET', 'INFO', vParameters); + + -- Call the original CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLES_SET procedure + -- This ensures all logic remains centralized in the original package + -- and ODS wrapper simply delegates execution with DEFINER rights + CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLES_SET( + pSourceFileConfigKey => pSourceFileConfigKey, + pRecreate => pRecreate + ); + + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('End FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLES_SET', 'INFO', vParameters); + + EXCEPTION + WHEN OTHERS THEN + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT( + 'Error in ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLES_SET: ' || SQLERRM, + 'ERROR', + vParameters + ); + RAISE; + END CREATE_EXTERNAL_TABLES_SET; + + ---------------------------------------------------------------------------------------------------- + + /** + * CREATE_EXTERNAL_TABLES_BATCH - Wrapper for CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLES_BATCH + */ + PROCEDURE CREATE_EXTERNAL_TABLES_BATCH ( + pSourceKey IN VARCHAR2 DEFAULT NULL, + pSourceFileId IN VARCHAR2 DEFAULT NULL, + pTableId IN VARCHAR2 DEFAULT NULL, + pRecreate IN BOOLEAN DEFAULT FALSE + ) + IS + vParameters CT_MRDS.A_PROCESS_LOG.PROCEDURE_PARAMETERS%TYPE; + vRecreateStr VARCHAR2(10); + BEGIN + -- Convert BOOLEAN to VARCHAR2 for logging + vRecreateStr := CASE WHEN pRecreate THEN 'TRUE' ELSE 'FALSE' END; + + -- Log the start of the procedure + vParameters := CT_MRDS.ENV_MANAGER.FORMAT_PARAMETERS( + SYS.ODCIVARCHAR2LIST( + 'pSourceKey => ''' || NVL(pSourceKey, 'NULL') || '''', + 'pSourceFileId => ''' || NVL(pSourceFileId, 'NULL') || '''', + 'pTableId => ''' || NVL(pTableId, 'NULL') || '''', + 'pRecreate => ' || vRecreateStr + ) + ); + + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('Start FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLES_BATCH', 'INFO', vParameters); + + -- Call the original CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLES_BATCH procedure + -- This ensures all logic remains centralized in the original package + -- and ODS wrapper simply delegates execution with DEFINER rights + CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLES_BATCH( + pSourceKey => pSourceKey, + pSourceFileId => pSourceFileId, + pTableId => pTableId, + pRecreate => pRecreate + ); + + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('End FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLES_BATCH', 'INFO', vParameters); + + EXCEPTION + WHEN OTHERS THEN + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT( + 'Error in ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLES_BATCH: ' || SQLERRM, + 'ERROR', + vParameters + ); + RAISE; + END CREATE_EXTERNAL_TABLES_BATCH; + + ---------------------------------------------------------------------------------------------------- + -- PACKAGE VERSION MANAGEMENT FUNCTIONS IMPLEMENTATION + ---------------------------------------------------------------------------------------------------- + + FUNCTION GET_VERSION + RETURN VARCHAR2 + IS + BEGIN + RETURN PACKAGE_VERSION; + END GET_VERSION; + + ---------------------------------------------------------------------------------------------------- + + FUNCTION GET_BUILD_DATE + RETURN VARCHAR2 + IS + BEGIN + RETURN PACKAGE_BUILD_DATE; + END GET_BUILD_DATE; + + ---------------------------------------------------------------------------------------------------- + + FUNCTION GET_AUTHOR + RETURN VARCHAR2 + IS + BEGIN + RETURN PACKAGE_AUTHOR; + END GET_AUTHOR; + + ---------------------------------------------------------------------------------------------------- + + FUNCTION GET_BUILD_INFO + RETURN VARCHAR2 + IS + BEGIN + RETURN CT_MRDS.ENV_MANAGER.GET_PACKAGE_VERSION_INFO( + pPackageName => 'FILE_MANAGER_ODS', + pVersion => PACKAGE_VERSION, + pBuildDate => PACKAGE_BUILD_DATE, + pAuthor => PACKAGE_AUTHOR + ); + END GET_BUILD_INFO; + + ---------------------------------------------------------------------------------------------------- + + FUNCTION GET_VERSION_HISTORY + RETURN VARCHAR2 + IS + BEGIN + RETURN CT_MRDS.ENV_MANAGER.FORMAT_VERSION_HISTORY( + pPackageName => 'FILE_MANAGER_ODS', + pVersionHistory => VERSION_HISTORY + ); + END GET_VERSION_HISTORY; + + ---------------------------------------------------------------------------------------------------- + +END FILE_MANAGER_ODS; + +/ diff --git a/MARS_Packages/REL03/MARS-1057/new_version/FILE_MANAGER_ODS.pkg b/MARS_Packages/REL03/MARS-1057/new_version/FILE_MANAGER_ODS.pkg new file mode 100644 index 0000000..8f82cc3 --- /dev/null +++ b/MARS_Packages/REL03/MARS-1057/new_version/FILE_MANAGER_ODS.pkg @@ -0,0 +1,168 @@ +create or replace PACKAGE ODS.FILE_MANAGER_ODS +AUTHID DEFINER +AS + /** + * FILE_MANAGER_ODS - Wrapper package for CT_MRDS.FILE_MANAGER + * + * This package serves as a wrapper for CT_MRDS.FILE_MANAGER procedures. + * The key difference is that this package uses AUTHID DEFINER instead of + * AUTHID CURRENT_USER, which means all objects will be created in the ODS + * schema regardless of which user executes the procedures. + * + * This solves the execution context issue where users need to connect as + * ODS user to use CT_MRDS.FILE_MANAGER procedures. + * + * MARS-1049: Added pEncoding parameter support for CSV character set specification + */ + + -- Package Version Information (Semantic Versioning: MAJOR.MINOR.PATCH) + PACKAGE_VERSION CONSTANT VARCHAR2(10) := '2.2.0'; + PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2025-11-27 15:00:00'; + PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski'; + + -- Version History (Latest changes first) + VERSION_HISTORY CONSTANT VARCHAR2(4000) := + '2.2.0 (2025-11-27): MARS-1057 - Added CREATE_EXTERNAL_TABLES_SET and CREATE_EXTERNAL_TABLES_BATCH wrappers for batch external table creation' || CHR(13)||CHR(10) || + '2.1.0 (2025-11-24): MARS-1049 - Added pEncoding parameter support for CSV character set specification' || CHR(13)||CHR(10) || + '2.0.0 (2025-10-22): Added package versioning system using centralized ENV_MANAGER functions' || CHR(13)||CHR(10) || + '1.5.0 (2025-10-12): Enhanced external table creation with official path patterns support' || CHR(13)||CHR(10) || + '1.0.0 (2025-09-20): Initial release with AUTHID DEFINER wrapper for external table creation'; + + /** + * @name CREATE_EXTERNAL_TABLE + * @desc Creates external tables that can read data from Oracle Cloud Storage. + * This is a wrapper for CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE + * but uses DEFINER rights to ensure objects are created in ODS schema. + * + * MARS-1049: Added support for CSV character set encoding specification + * @param pTableName - Name of the external table to create + * @param pTemplateTableName - Template table defining the structure + * @param pPrefix - Storage path prefix in Oracle Cloud Storage + * @param pBucketUri - URI of the target bucket (default: ENV_MANAGER.gvInboxBucketUri) + * @param pFileName - Specific file name (optional) + * @param pDelimiter - Field delimiter (default: ',') + * @param pEncoding - Character set encoding for CSV files (e.g., 'UTF-8', 'WE8MSWIN1252', 'EE8ISO8859P2') + * If NULL, no CHARACTERSET clause is added to external table definition + * @example EXEC ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE( + * 'C2D_A_UC_DISSEM_METADATA_LOADS_INBOX', + * 'CT_ET_TEMPLATES.C2D_A_UC_DISSEM_METADATA_LOADS', + * 'INBOX/C2D/UC_DISSEM/A_UC_DISSEM_METADATA_LOADS', + * CT_MRDS.ENV_MANAGER.gvInboxBucketUri, + * NULL, ',', 'UTF-8' + * ); + */ + PROCEDURE CREATE_EXTERNAL_TABLE ( + pTableName IN VARCHAR2, + pTemplateTableName IN VARCHAR2, + pPrefix IN VARCHAR2, + pBucketUri IN VARCHAR2 DEFAULT CT_MRDS.ENV_MANAGER.gvInboxBucketUri, + pFileName IN VARCHAR2 DEFAULT NULL, + pDelimiter IN VARCHAR2 DEFAULT ',', + pEncoding IN VARCHAR2 DEFAULT NULL + ); + + /** + * @name CREATE_EXTERNAL_TABLES_SET + * @desc Creates a complete set of 3 external tables (INBOX, ODS, ARCHIVE) for a single configuration + * from A_SOURCE_FILE_CONFIG table. Automatically generates table names and paths following + * official path patterns. Wrapper for CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLES_SET + * with DEFINER rights to ensure objects are created in ODS schema. + * @param pSourceFileConfigKey - Primary key from A_SOURCE_FILE_CONFIG table + * @param pRecreate - If TRUE, drops existing tables before creating new ones; if FALSE, fails if tables exist + * @example EXEC ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLES_SET( + * pSourceFileConfigKey => 123, + * pRecreate => FALSE + * ); + * @ex_rslt Creates three external tables in ODS schema: + * - C2D_A_UC_DISSEM_METADATA_LOADS_INBOX + * - C2D_A_UC_DISSEM_METADATA_LOADS_ODS + * - C2D_A_UC_DISSEM_METADATA_LOADS_ARCHIVE + */ + PROCEDURE CREATE_EXTERNAL_TABLES_SET ( + pSourceFileConfigKey IN NUMBER, + pRecreate IN BOOLEAN DEFAULT FALSE + ); + + /** + * @name CREATE_EXTERNAL_TABLES_BATCH + * @desc Creates external table sets for multiple configurations based on filter criteria. + * Processes only INPUT type files from A_SOURCE_FILE_CONFIG. Creates 3 tables per configuration + * (INBOX, ODS, ARCHIVE). Wrapper for CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLES_BATCH + * with DEFINER rights to ensure objects are created in ODS schema. + * @param pSourceKey - Filter by A_SOURCE_KEY (NULL = all sources) + * @param pSourceFileId - Filter by SOURCE_FILE_ID (NULL = all file types) + * @param pTableId - Filter by TABLE_ID (NULL = all tables) + * @param pRecreate - If TRUE, drops and recreates existing tables; if FALSE, skips if tables exist + * @example -- Create all external tables for C2D source + * EXEC ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLES_BATCH( + * pSourceKey => 'C2D', + * pRecreate => FALSE + * ); + * + * -- Recreate all external tables for all sources + * EXEC ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLES_BATCH( + * pRecreate => TRUE + * ); + * @ex_rslt Returns summary: Total: 10, Processed: 9, Failed: 1 + */ + PROCEDURE CREATE_EXTERNAL_TABLES_BATCH ( + pSourceKey IN VARCHAR2 DEFAULT NULL, + pSourceFileId IN VARCHAR2 DEFAULT NULL, + pTableId IN VARCHAR2 DEFAULT NULL, + pRecreate IN BOOLEAN DEFAULT FALSE + ); + + --------------------------------------------------------------------------------------------------------------------------- + -- PACKAGE VERSION MANAGEMENT FUNCTIONS + --------------------------------------------------------------------------------------------------------------------------- + + /** + * @name GET_VERSION + * @desc Returns the current version number of the FILE_MANAGER_ODS package. + * Uses semantic versioning format (MAJOR.MINOR.PATCH). + * @example SELECT FILE_MANAGER_ODS.GET_VERSION() FROM DUAL; + * @ex_rslt 2.1.0 + **/ + FUNCTION GET_VERSION RETURN VARCHAR2; + + /** + * @name GET_BUILD_DATE + * @desc Returns the build date of the FILE_MANAGER_ODS package. + * @return VARCHAR2 - Build date in format 'YYYY-MM-DD HH24:MI:SS' + * @example SELECT ODS.FILE_MANAGER_ODS.GET_BUILD_DATE() FROM DUAL; + */ + FUNCTION GET_BUILD_DATE RETURN VARCHAR2; + + /** + * @name GET_AUTHOR + * @desc Returns the author of the FILE_MANAGER_ODS package. + * @return VARCHAR2 - Package author name + * @example SELECT ODS.FILE_MANAGER_ODS.GET_AUTHOR() FROM DUAL; + */ + FUNCTION GET_AUTHOR 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 FILE_MANAGER_ODS.GET_BUILD_INFO() FROM DUAL; + * @ex_rslt Package: FILE_MANAGER_ODS + * Version: 2.2.0 + * Build Date: 2025-11-27 15: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 FILE_MANAGER_ODS.GET_VERSION_HISTORY() FROM DUAL; + * @ex_rslt FILE_MANAGER_ODS Version History: + * 2.0.0 (2025-10-22): Added package versioning system... + **/ + FUNCTION GET_VERSION_HISTORY RETURN VARCHAR2; + +END FILE_MANAGER_ODS; + +/ diff --git a/MARS_Packages/REL03/MARS-1057/rollback_mars1057.sql b/MARS_Packages/REL03/MARS-1057/rollback_mars1057.sql index 1f9704b..8571cac 100644 --- a/MARS_Packages/REL03/MARS-1057/rollback_mars1057.sql +++ b/MARS_Packages/REL03/MARS-1057/rollback_mars1057.sql @@ -32,8 +32,10 @@ PROMPT PROMPT Changes to be rolled back: PROMPT - FILE_MANAGER package specification (3.4.0 -> 3.3.0) PROMPT - FILE_MANAGER package body (3.4.0 -> 3.3.0) -PROMPT - Remove CREATE_EXTERNAL_TABLES_SET procedure -PROMPT - Remove CREATE_EXTERNAL_TABLES_BATCH procedure +PROMPT - FILE_MANAGER_ODS package specification (2.2.0 -> 2.1.0) +PROMPT - FILE_MANAGER_ODS package body (2.2.0 -> 2.1.0) +PROMPT - Remove CREATE_EXTERNAL_TABLES_SET procedures +PROMPT - Remove CREATE_EXTERNAL_TABLES_BATCH procedures PROMPT ========================================================================= -- Confirm rollback with user @@ -47,7 +49,13 @@ END; / WHENEVER SQLERROR CONTINUE --- Execute rollback scripts in REVERSE order (92, 91, not 91, 92) +-- Execute rollback scripts in REVERSE order (94, 93, 92, 91) +PROMPT +PROMPT ========================================================================= +PROMPT Step 1: Rollback FILE_MANAGER Package Body to v3.3.0 +PROMPT ========================================================================= +@@92_MARS_1057_rollback_CT_MRDS_FILE_MANAGER_BODY.sql + PROMPT PROMPT ========================================================================= PROMPT Step 2: Rollback FILE_MANAGER Package Specification to v3.3.0 @@ -56,21 +64,25 @@ PROMPT ========================================================================= PROMPT PROMPT ========================================================================= -PROMPT Step 1: Rollback FILE_MANAGER Package Body to v3.3.0 +PROMPT Step 3: Rollback FILE_MANAGER_ODS Package Body to v2.1.0 PROMPT ========================================================================= -@@92_MARS_1057_rollback_CT_MRDS_FILE_MANAGER_BODY.sql - - +@@93_MARS_1057_rollback_ODS_FILE_MANAGER_ODS_BODY.sql PROMPT PROMPT ========================================================================= -PROMPT Step 3: Track Rollback Version +PROMPT Step 4: Rollback FILE_MANAGER_ODS Package Specification to v2.1.0 +PROMPT ========================================================================= +@@94_MARS_1057_rollback_ODS_FILE_MANAGER_ODS_SPEC.sql + +PROMPT +PROMPT ========================================================================= +PROMPT Step 5: Track Rollback Version PROMPT ========================================================================= @@track_package_versions.sql PROMPT PROMPT ========================================================================= -PROMPT Step 4: Verify All Tracked Packages +PROMPT Step 6: Verify All Tracked Packages PROMPT ========================================================================= @@verify_packages_version.sql diff --git a/MARS_Packages/REL03/MARS-1057/rollback_version/FILE_MANAGER_ODS.pkb b/MARS_Packages/REL03/MARS-1057/rollback_version/FILE_MANAGER_ODS.pkb new file mode 100644 index 0000000..532eec2 --- /dev/null +++ b/MARS_Packages/REL03/MARS-1057/rollback_version/FILE_MANAGER_ODS.pkb @@ -0,0 +1,118 @@ +create or replace PACKAGE BODY ODS.FILE_MANAGER_ODS +AS + + /** + * CREATE_EXTERNAL_TABLE - Wrapper for CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE + */ + PROCEDURE CREATE_EXTERNAL_TABLE ( + pTableName IN VARCHAR2, + pTemplateTableName IN VARCHAR2, + pPrefix IN VARCHAR2, + pBucketUri IN VARCHAR2 DEFAULT CT_MRDS.ENV_MANAGER.gvInboxBucketUri, + pFileName IN VARCHAR2 DEFAULT NULL, + pDelimiter IN VARCHAR2 DEFAULT ',', + pEncoding IN VARCHAR2 DEFAULT NULL + ) + IS + vParameters CT_MRDS.A_PROCESS_LOG.PROCEDURE_PARAMETERS%TYPE; + BEGIN + -- Log the start of the procedure + vParameters := CT_MRDS.ENV_MANAGER.FORMAT_PARAMETERS( + SYS.ODCIVARCHAR2LIST( + 'pTableName => ''' || pTableName || '''', + 'pTemplateTableName => ''' || pTemplateTableName || '''', + 'pPrefix => ''' || pPrefix || '''', + 'pBucketUri => ''' || pBucketUri || '''', + 'pFileName => ''' || NVL(pFileName, 'NULL') || '''', + 'pDelimiter => ''' || pDelimiter || '''', + 'pEncoding => ''' || NVL(pEncoding, 'NULL') || '''' + ) + ); + + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('Start FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE', 'INFO', vParameters); + + -- Call the original CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE procedure + -- This ensures all logic remains centralized in the original package + -- and ODS wrapper simply delegates execution with DEFINER rights + CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE( + pTableName => pTableName, + pTemplateTableName => pTemplateTableName, + pPrefix => pPrefix, + pBucketUri => pBucketUri, + pFileName => pFileName, + pDelimiter => pDelimiter, + pEncoding => pEncoding + ); + + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('End FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE', 'INFO', vParameters); + + EXCEPTION + WHEN OTHERS THEN + CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT( + 'Error in ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE: ' || SQLERRM, + 'ERROR', + vParameters + ); + RAISE; + END CREATE_EXTERNAL_TABLE; + + ---------------------------------------------------------------------------------------------------- + -- PACKAGE VERSION MANAGEMENT FUNCTIONS IMPLEMENTATION + ---------------------------------------------------------------------------------------------------- + + FUNCTION GET_VERSION + RETURN VARCHAR2 + IS + BEGIN + RETURN PACKAGE_VERSION; + END GET_VERSION; + + ---------------------------------------------------------------------------------------------------- + + FUNCTION GET_BUILD_DATE + RETURN VARCHAR2 + IS + BEGIN + RETURN PACKAGE_BUILD_DATE; + END GET_BUILD_DATE; + + ---------------------------------------------------------------------------------------------------- + + FUNCTION GET_AUTHOR + RETURN VARCHAR2 + IS + BEGIN + RETURN PACKAGE_AUTHOR; + END GET_AUTHOR; + + ---------------------------------------------------------------------------------------------------- + + FUNCTION GET_BUILD_INFO + RETURN VARCHAR2 + IS + BEGIN + RETURN CT_MRDS.ENV_MANAGER.GET_PACKAGE_VERSION_INFO( + pPackageName => 'FILE_MANAGER_ODS', + pVersion => PACKAGE_VERSION, + pBuildDate => PACKAGE_BUILD_DATE, + pAuthor => PACKAGE_AUTHOR + ); + END GET_BUILD_INFO; + + ---------------------------------------------------------------------------------------------------- + + FUNCTION GET_VERSION_HISTORY + RETURN VARCHAR2 + IS + BEGIN + RETURN CT_MRDS.ENV_MANAGER.FORMAT_VERSION_HISTORY( + pPackageName => 'FILE_MANAGER_ODS', + pVersionHistory => VERSION_HISTORY + ); + END GET_VERSION_HISTORY; + + ---------------------------------------------------------------------------------------------------- + +END FILE_MANAGER_ODS; + +/ diff --git a/MARS_Packages/REL03/MARS-1057/rollback_version/FILE_MANAGER_ODS.pkg b/MARS_Packages/REL03/MARS-1057/rollback_version/FILE_MANAGER_ODS.pkg new file mode 100644 index 0000000..0010af6 --- /dev/null +++ b/MARS_Packages/REL03/MARS-1057/rollback_version/FILE_MANAGER_ODS.pkg @@ -0,0 +1,116 @@ +create or replace PACKAGE ODS.FILE_MANAGER_ODS +AUTHID DEFINER +AS + /** + * FILE_MANAGER_ODS - Wrapper package for CT_MRDS.FILE_MANAGER + * + * This package serves as a wrapper for CT_MRDS.FILE_MANAGER procedures. + * The key difference is that this package uses AUTHID DEFINER instead of + * AUTHID CURRENT_USER, which means all objects will be created in the ODS + * schema regardless of which user executes the procedures. + * + * This solves the execution context issue where users need to connect as + * ODS user to use CT_MRDS.FILE_MANAGER procedures. + * + * MARS-1049: Added pEncoding parameter support for CSV character set specification + */ + + -- Package Version Information (Semantic Versioning: MAJOR.MINOR.PATCH) + PACKAGE_VERSION CONSTANT VARCHAR2(10) := '2.1.0'; + PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2025-11-24 11:50:00'; + PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski'; + + -- Version History (Latest changes first) + VERSION_HISTORY CONSTANT VARCHAR2(4000) := + '2.1.0 (2025-11-24): MARS-1049 - Added pEncoding parameter support for CSV character set specification' || CHR(13)||CHR(10) || + '2.0.0 (2025-10-22): Added package versioning system using centralized ENV_MANAGER functions' || CHR(13)||CHR(10) || + '1.5.0 (2025-10-12): Enhanced external table creation with official path patterns support' || CHR(13)||CHR(10) || + '1.0.0 (2025-09-20): Initial release with AUTHID DEFINER wrapper for external table creation'; + + /** + * @name CREATE_EXTERNAL_TABLE + * @desc Creates external tables that can read data from Oracle Cloud Storage. + * This is a wrapper for CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE + * but uses DEFINER rights to ensure objects are created in ODS schema. + * + * MARS-1049: Added support for CSV character set encoding specification + * @param pTableName - Name of the external table to create + * @param pTemplateTableName - Template table defining the structure + * @param pPrefix - Storage path prefix in Oracle Cloud Storage + * @param pBucketUri - URI of the target bucket (default: ENV_MANAGER.gvInboxBucketUri) + * @param pFileName - Specific file name (optional) + * @param pDelimiter - Field delimiter (default: ',') + * @param pEncoding - Character set encoding for CSV files (e.g., 'UTF-8', 'WE8MSWIN1252', 'EE8ISO8859P2') + * If NULL, no CHARACTERSET clause is added to external table definition + * @example EXEC ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE( + * 'C2D_A_UC_DISSEM_METADATA_LOADS_INBOX', + * 'CT_ET_TEMPLATES.C2D_A_UC_DISSEM_METADATA_LOADS', + * 'INBOX/C2D/UC_DISSEM/A_UC_DISSEM_METADATA_LOADS', + * CT_MRDS.ENV_MANAGER.gvInboxBucketUri, + * NULL, ',', 'UTF-8' + * ); + */ + PROCEDURE CREATE_EXTERNAL_TABLE ( + pTableName IN VARCHAR2, + pTemplateTableName IN VARCHAR2, + pPrefix IN VARCHAR2, + pBucketUri IN VARCHAR2 DEFAULT CT_MRDS.ENV_MANAGER.gvInboxBucketUri, + pFileName IN VARCHAR2 DEFAULT NULL, + pDelimiter IN VARCHAR2 DEFAULT ',', + pEncoding IN VARCHAR2 DEFAULT NULL + ); + + --------------------------------------------------------------------------------------------------------------------------- + -- PACKAGE VERSION MANAGEMENT FUNCTIONS + --------------------------------------------------------------------------------------------------------------------------- + + /** + * @name GET_VERSION + * @desc Returns the current version number of the FILE_MANAGER_ODS package. + * Uses semantic versioning format (MAJOR.MINOR.PATCH). + * @example SELECT FILE_MANAGER_ODS.GET_VERSION() FROM DUAL; + * @ex_rslt 2.1.0 + **/ + FUNCTION GET_VERSION RETURN VARCHAR2; + + /** + * @name GET_BUILD_DATE + * @desc Returns the build date of the FILE_MANAGER_ODS package. + * @return VARCHAR2 - Build date in format 'YYYY-MM-DD HH24:MI:SS' + * @example SELECT ODS.FILE_MANAGER_ODS.GET_BUILD_DATE() FROM DUAL; + */ + FUNCTION GET_BUILD_DATE RETURN VARCHAR2; + + /** + * @name GET_AUTHOR + * @desc Returns the author of the FILE_MANAGER_ODS package. + * @return VARCHAR2 - Package author name + * @example SELECT ODS.FILE_MANAGER_ODS.GET_AUTHOR() FROM DUAL; + */ + FUNCTION GET_AUTHOR 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 FILE_MANAGER_ODS.GET_BUILD_INFO() FROM DUAL; + * @ex_rslt Package: FILE_MANAGER_ODS + * Version: 2.1.0 + * Build Date: 2025-11-24 11:50: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 FILE_MANAGER_ODS.GET_VERSION_HISTORY() FROM DUAL; + * @ex_rslt FILE_MANAGER_ODS Version History: + * 2.0.0 (2025-10-22): Added package versioning system... + **/ + FUNCTION GET_VERSION_HISTORY RETURN VARCHAR2; + +END FILE_MANAGER_ODS; + +/ diff --git a/MARS_Packages/REL03/MARS-1057/track_package_versions.sql b/MARS_Packages/REL03/MARS-1057/track_package_versions.sql index c0c7bbd..4a20ec0 100644 --- a/MARS_Packages/REL03/MARS-1057/track_package_versions.sql +++ b/MARS_Packages/REL03/MARS-1057/track_package_versions.sql @@ -29,7 +29,8 @@ DECLARE -- Format: 'SCHEMA.PACKAGE_NAME' -- =================================================================== vPackageList t_string_array := t_string_array( - 'CT_MRDS.FILE_MANAGER' + 'CT_MRDS.FILE_MANAGER', + 'ODS.FILE_MANAGER_ODS' ); -- ===================================================================