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

View File

@@ -0,0 +1,493 @@
# MARS-1049: CSV Encoding Support - Complete Implementation
## 🎯 Implementation Status: ✅ COMPLETED & FULLY TESTED
**Implementation Date:** 2025-11-24
**Production Testing Date:** 2025-11-25
**Final Validation Date:** 2025-11-25
**Database Version:** Oracle 23.26.0.1.0
**Package Versions:** CT_MRDS.FILE_MANAGER v3.2.1, ODS.FILE_MANAGER_ODS v2.1.0
**Status:** Production Ready & Fully Validated ✅
---
## 📋 Overview
MARS-1049 implements comprehensive CSV encoding support in the Oracle FILE_MANAGER system, enabling proper handling of character sets when creating external tables for CSV file processing. This enhancement allows for proper processing of international data with various character encodings.
### Key Benefits
- **Enhanced Data Integrity**: Proper character set handling for international data
- **Flexibility**: Support for multiple encoding standards (UTF-8, Windows-1252, ISO-8859, etc.)
- **Backward Compatibility**: All existing code continues working unchanged
- **Simple Configuration**: Easy-to-use encoding parameter in existing procedures
---
## 📁 Project Structure & Version Control
This implementation uses organized folder structure for version control and rollback capabilities:
```
MARS_Packages/REL01/MARS-1049/
├── current_version/ # 📦 Pre-MARS-1049 Versions
│ ├── FILE_MANAGER.pkg # v3.2.0 (without pEncoding)
│ ├── FILE_MANAGER.pkb # v3.2.0 (without pEncoding)
│ ├── FILE_MANAGER_ODS.pkg # v2.0.0 (without pEncoding)
│ └── FILE_MANAGER_ODS.pkb # v2.0.0 (without pEncoding)
├── new_version/ # 🚀 MARS-1049 Enhanced Versions
│ ├── FILE_MANAGER_SPEC.sql # v3.2.1 (with pEncoding)
│ ├── FILE_MANAGER_BODY.sql # v3.2.1 (with pEncoding)
│ ├── FILE_MANAGER_ODS_SPEC.sql # v2.1.0 (with pEncoding)
│ └── FILE_MANAGER_ODS_BODY.sql # v2.1.0 (with pEncoding)
├── install_mars1049.sql # 📥 Main Installation Script (with spool & tracking)
├── rollback_mars1049.sql # 🔄 Complete Rollback Script (with spool & tracking)
├── 04_MARS_1049_track_CT_MRDS_FILE_MANAGER_version.sql # 📈 Version Tracking (Install)
├── 92_MARS_1049_track_rollback_version.sql # 📈 Version Tracking (Rollback)
├── 91_MARS_1049_rollback_DROP_ENCODING_COLUMN.sql # 🔄 Column Removal Component
└── README.md # 📝 This Documentation
```
### Version Control Strategy
- **current_version/**: Original packages used by `rollback_mars1049.sql`
- **new_version/**: Enhanced packages used by `install_mars1049.sql`
- **Dynamic Spool Logging**: Automatic log file generation with timestamps
- **Version Tracking**: Complete audit trail through ENV_MANAGER.TRACK_PACKAGE_VERSION
- **Complete Change Tracking**: Full history of all modifications maintained
---
## 🔧 Database Changes Implemented
### 1. Table Structure Enhancement
```sql
-- Added to CT_MRDS.A_SOURCE_FILE_CONFIG
ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG ADD (
ENCODING VARCHAR2(50) DEFAULT NULL -- Character encoding for CSV files
);
```
### 2. Package Version Updates
| Package | Before | After | Changes |
|---------|---------|--------|---------|
| **CT_MRDS.FILE_MANAGER** | v3.2.0 | v3.2.1 | Added `pEncoding` parameter |
| **ODS.FILE_MANAGER_ODS** | v2.0.0 | v2.1.0 | Added encoding wrapper support |
### 3. Enhanced Procedures
- `FILE_MANAGER.ADD_SOURCE_FILE_CONFIG` - Added `pEncoding` parameter
- `FILE_MANAGER.CREATE_EXTERNAL_TABLE` - Added encoding support
- `FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE` - Added encoding delegation
### 4. Dynamic Spool Logging
```sql
-- Automatic log file generation
'INSTALL_MARS_1049_[PDB_NAME]_YYYYMMDD_HH24MISS.log'
'ROLLBACK_MARS_1049_[PDB_NAME]_YYYYMMDD_HH24MISS.log'
```
### 5. Version Tracking System
- `04_MARS_1049_track_CT_MRDS_FILE_MANAGER_version.sql` - Installation tracking
- `92_MARS_1049_track_rollback_version.sql` - Rollback tracking
- Complete audit trail via `CT_MRDS.ENV_MANAGER.TRACK_PACKAGE_VERSION`
---
## 🌍 Supported Character Encodings
| Encoding | Description | Use Case | Example |
|----------|-------------|----------|---------|
| `UTF8` / `UTF-8` | Unicode UTF-8 | Modern systems, international | Global applications |
| `WE8MSWIN1252` | Windows-1252 | Western European, Windows | Legacy Windows systems |
| `EE8ISO8859P2` | ISO-8859-2 | Central European | Polish, Czech, Hungarian |
| `CL8MSWIN1251` | Windows-1251 | Cyrillic | Russian, Bulgarian |
| `AL32UTF8` | Unicode UTF-8 (32-bit) | Full Unicode support | Enterprise systems |
| `JA16SJIS` | Shift JIS | Japanese | Japanese systems |
| `ZHS16GBK` | GBK | Chinese Simplified | Chinese systems |
---
## 🚀 Installation & Deployment
### Quick Installation
```sql
-- Single command installation with automatic logging and version tracking
@@install_mars1049.sql
-- Creates: INSTALL_MARS_1049_[PDB]_[TIMESTAMP].log
-- Includes: 7 steps with version tracking in ENV_MANAGER
```
### Quick Rollback
```sql
-- Single command rollback with automatic logging and version tracking
@@rollback_mars1049.sql
-- Creates: ROLLBACK_MARS_1049_[PDB]_[TIMESTAMP].log
-- Includes: 4 steps with complete restoration and tracking
```
### Manual Step-by-Step Installation
```sql
-- Run in sequence with appropriate user privileges:
@@01_MARS_1049_install_CT_MRDS_ADD_ENCODING_COLUMN.sql -- CT_MRDS user
@@new_version/FILE_MANAGER_SPEC.sql -- CT_MRDS user
@@new_version/FILE_MANAGER_BODY.sql -- CT_MRDS user
@@new_version/FILE_MANAGER_ODS_SPEC.sql -- ODS user
@@new_version/FILE_MANAGER_ODS_BODY.sql -- ODS user
```
### Verification
```sql
-- Comprehensive functionality testing
@@test/05_MARS_1049_verify_encoding_functionality.sql
```
### Rollback (if needed)
```sql
-- Complete rollback to pre-MARS-1049 state
@@rollback_mars1049.sql
```
---
## 💡 Usage Examples
### 1. Basic Configuration with Encoding
```sql
-- Add source system with UTF-8 support
CALL CT_MRDS.FILE_MANAGER.ADD_SOURCE(
pSourceKey => 'INTL_SYS',
pSourceName => 'International Data System'
);
-- Configure file processing with encoding
CALL CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
pSourceKey => 'INTL_SYS',
pSourceFileType => 'INPUT',
pSourceFileId => 'CUSTOMER_DATA',
pSourceFileDesc => 'Customer data with international characters',
pSourceFileNamePattern => 'customers_*.csv',
pTableId => 'CUSTOMERS',
pTemplateTableName => 'CT_ET_TEMPLATES.CUSTOMERS',
pEncoding => 'UTF-8' -- 🆕 NEW: Encoding specification
);
```
### 2. External Table Creation with Encoding
```sql
-- Create external table with UTF-8 encoding
BEGIN
ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE(
pTableName => 'CUSTOMERS_INBOX',
pTemplateTableName => 'CT_ET_TEMPLATES.CUSTOMERS',
pPrefix => 'INBOX/INTL_SYS/CUSTOMER_DATA/CUSTOMERS',
pBucketUri => CT_MRDS.ENV_MANAGER.gvInboxBucketUri,
pEncoding => 'UTF-8' -- 🆕 NEW: Character set specification
);
END;
/
```
### 3. Backward Compatibility (No Changes Required)
```sql
-- Existing code continues working unchanged
CALL CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
pSourceKey => 'LEGACY_SOURCE',
pSourceFileType => 'INPUT',
pSourceFileId => 'LEGACY_DATA',
pSourceFileDesc => 'Legacy data files',
pSourceFileNamePattern => 'data_*.csv',
pTableId => 'LEGACY_TABLE',
pTemplateTableName => 'CT_ET_TEMPLATES.LEGACY'
-- No pEncoding parameter - uses default behavior
);
```
### 4. File Processing with Automatic Encoding
```sql
-- Process file using encoding from configuration
EXEC CT_MRDS.FILE_MANAGER.PROCESS_SOURCE_FILE(
'INBOX/INTL_SYS/CUSTOMER_DATA/CUSTOMERS/customers_20251124.csv'
);
-- Encoding automatically applied from A_SOURCE_FILE_CONFIG.ENCODING
```
### 5. Real Data Testing (CSDB Example)
```sql
-- Tested with real CSDB data file containing international characters
-- File: temp_upload.csv with Turkish characters ("Türkiye", "Turkiye")
-- Encoding: WE8MSWIN1252 for proper character handling
CREATE_EXTERNAL_TABLE(
pTableName => 'CSDB_DEBT_TEST',
pTemplateTableName => 'CT_ET_TEMPLATES.CSDB_DEBT',
pPrefix => 'DATA/CSDB/DEBT',
pBucketUri => '...',
pEncoding => 'WE8MSWIN1252' -- For CSDB data with special characters
);
-- ✅ Successfully handles international character data
```
---
## ⚙️ Technical Implementation Details
### JSON Format Generation
```sql
-- IMPLEMENTATION: Conditional JSON_OBJECT construction
IF pEncoding IS NOT NULL AND LENGTH(TRIM(pEncoding)) > 0 THEN
vFormatJson := JSON_OBJECT(
'type' VALUE 'csv',
'delimiter' VALUE pDelimiter,
'characterset' VALUE pEncoding -- 🆕 Character set added
);
ELSE
vFormatJson := JSON_OBJECT(
'type' VALUE 'csv',
'delimiter' VALUE pDelimiter
-- No characterset for backward compatibility
);
END IF;
```
### External Table Result
**With Encoding:**
```
FORMAT JSON ('{"type":"csv","delimiter":",","characterset":"UTF-8"}')
```
**Without Encoding (backward compatible):**
```
FORMAT JSON ('{"type":"csv","delimiter":","}')
```
### Oracle 23c Compatibility
- **Issue Solved**: Replaced non-available `JSON_MERGEPATCH` with `JSON_OBJECT`
- **Result**: Full compatibility with Oracle 23.26.0.1.0
- **Performance**: Optimized JSON generation for better performance
---
## ✅ Comprehensive Testing Results
### Database Structure Tests
```sql
-- ✅ PASSED: ENCODING column added successfully
DESC CT_MRDS.A_SOURCE_FILE_CONFIG;
-- Shows: ENCODING VARCHAR2(50) column
-- ✅ PASSED: Existing data preserved
SELECT COUNT(*) FROM CT_MRDS.A_SOURCE_FILE_CONFIG;
-- All existing rows maintained
```
### Package Compilation Tests
```sql
-- ✅ PASSED: All packages compile without errors
SELECT * FROM USER_ERRORS WHERE NAME LIKE 'FILE_MANAGER%';
-- No compilation errors
-- ✅ PASSED: Version verification
SELECT CT_MRDS.FILE_MANAGER.GET_VERSION() FROM DUAL;
-- Returns: 3.2.1
SELECT ODS.FILE_MANAGER_ODS.GET_VERSION() FROM DUAL;
-- Returns: 2.1.0
```
### Encoding Functionality Tests
```sql
-- ✅ PASSED: UTF-8 encoding test
CREATE_EXTERNAL_TABLE(..., pEncoding => 'UTF-8');
-- External table contains: CHARACTERSET UTF-8
-- ✅ PASSED: Windows-1252 encoding test
CREATE_EXTERNAL_TABLE(..., pEncoding => 'WE8MSWIN1252');
-- External table contains: CHARACTERSET WE8MSWIN1252
-- ✅ PASSED: Backward compatibility test
CREATE_EXTERNAL_TABLE(...); -- No encoding parameter
-- External table works without CHARACTERSET (default behavior)
```
### Integration Tests
```sql
-- ✅ PASSED: Configuration with encoding
ADD_SOURCE_FILE_CONFIG(..., pEncoding => 'UTF-8');
-- ENCODING column populated: 'UTF-8'
-- ✅ PASSED: Wrapper package delegation
ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE(..., pEncoding => 'UTF-8');
-- Properly delegates to CT_MRDS.FILE_MANAGER
```
### Production Testing Results (2025-11-25)
```sql
-- ✅ PASSED: Parameter acceptance validation
-- Both CREATE_EXTERNAL_TABLE functions accept pEncoding parameter without errors
-- ✅ PASSED: Multiple encoding formats tested
CREATE_EXTERNAL_TABLE(..., pEncoding => 'UTF-8'); -- Success
CREATE_EXTERNAL_TABLE(..., pEncoding => 'WE8MSWIN1252'); -- Success
CREATE_EXTERNAL_TABLE(..., pEncoding => 'ISO-8859-1'); -- Success
-- ✅ PASSED: External table generation with encoding
-- Tables created with proper CHARACTERSET parameters in access_parameters
-- Example: FORMAT JSON ('{"type":"csv","delimiter":",","characterset":"UTF-8"}')
-- ✅ PASSED: Backward compatibility verified
-- Functions work without pEncoding parameter (default behavior preserved)
-- ✅ PASSED: Real data testing with international characters
-- File: temp_upload.csv with Turkish characters ("Ürkiye", "Turkiye")
-- Result: 4 rows successfully processed with WE8MSWIN1252 encoding
```
### Final Production Validation (2025-11-25)
```sql
-- ✅ PASSED: Complete install/rollback cycle testing
-- ROLLBACK TEST: All packages restored to v3.2.0/v2.0.0, ENCODING column removed
-- Log: ROLLBACK_MARS_1049_GGMICHALSKI_20251125_092742.log
-- INSTALL TEST: All packages deployed to v3.2.1/v2.1.0, encoding configured
-- Encoding Distribution: 13 UTF8, 3 WE8MSWIN1252 (CSDB)
-- Log: INSTALL_MARS_1049_GGMICHALSKI_20251125_092758.log
-- ✅ PASSED: Version tracking validation
-- Both install and rollback properly tracked in ENV_MANAGER.TRACK_PACKAGE_VERSION
-- Complete audit trail maintained for compliance
-- ✅ PASSED: Dynamic spool logging
-- Automatic unique log file generation with PDB name and timestamp
-- Complete installation/rollback output captured for troubleshooting
```
---
## 🔄 Rollback Capability
Complete rollback capability available if needed:
### Rollback Process
```sql
-- Execute complete rollback
@@rollback_mars1049.sql
```
### What Rollback Does
1. **✅ Package Restoration**: Restores packages from `current_version/` folder
- CT_MRDS.FILE_MANAGER → v3.2.0 (without pEncoding)
- ODS.FILE_MANAGER_ODS → v2.0.0 (without pEncoding)
2. **✅ Database Cleanup**: Removes ENCODING column from A_SOURCE_FILE_CONFIG
3. **✅ Version Tracking**: Records rollback in ENV_MANAGER tracking system
4. **✅ Audit Logging**: Creates timestamped log file for compliance
5. **✅ Verification**: Confirms system restored to pre-MARS-1049 state
### Rollback Safety
- **Data Preservation**: All existing configuration data preserved
- **Zero Downtime**: Rollback can be performed without system downtime
- **Complete Restoration**: System returned to exact pre-MARS-1049 state
---
## 📊 Impact Assessment
### ✅ Benefits Delivered
- **Enhanced Data Integrity**: Proper handling of international character sets
- **System Flexibility**: Support for multiple encoding standards as business needs
- **Zero Breaking Changes**: All existing integrations continue working unchanged
- **Future-Proof**: Foundation for handling diverse international data sources
### ✅ Risk Mitigation
- **Backward Compatibility**: 100% maintained - no existing code changes required
- **Gradual Adoption**: Teams can adopt encoding parameters when needed
- **Complete Testing**: Comprehensive validation ensures reliability
- **Rollback Available**: Full rollback capability provides safety net
### ✅ Production Readiness
- **Deployment Tested**: Complete installation verified
- **Error Handling**: Robust error handling and logging maintained
- **Documentation Complete**: Full usage documentation provided
- **Support Ready**: Clear troubleshooting and support procedures
### ✅ Enterprise Features
- **Dynamic Spool Logging**: Automatic timestamped log generation for audit compliance
- **Version Tracking**: Complete audit trail via ENV_MANAGER.TRACK_PACKAGE_VERSION
- **Install/Rollback Cycle**: Full bidirectional deployment capability tested
- **Real Data Validation**: Confirmed working with international character sets
- **Zero Downtime**: Both install and rollback can be performed without system interruption
---
## 🛠️ Troubleshooting & Support
### Common Verification Commands
```sql
-- Check ENCODING column exists
DESC CT_MRDS.A_SOURCE_FILE_CONFIG;
-- Verify package versions
SELECT CT_MRDS.FILE_MANAGER.GET_VERSION() FROM DUAL; -- Should return: 3.2.1
SELECT ODS.FILE_MANAGER_ODS.GET_VERSION() FROM DUAL; -- Should return: 2.1.0
-- Check for compilation errors
SELECT * FROM USER_ERRORS WHERE NAME LIKE 'FILE_MANAGER%';
-- Test basic encoding functionality
BEGIN
ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE(
'TEST_ENCODING_TABLE',
'CT_ET_TEMPLATES.SAMPLE_TEMPLATE',
'test/encoding/path',
CT_MRDS.ENV_MANAGER.gvInboxBucketUri,
NULL, ',', 'UTF-8'
);
END;
/
```
### Error Resolution
- **Compilation Errors**: Check package dependencies and privileges
- **Encoding Errors**: Verify encoding name against Oracle supported character sets
- **External Table Issues**: Check JSON format generation and DBMS_CLOUD access
---
## 📞 Implementation Team & Support
**Lead Developer**: Grzegorz Michalski
**Implementation Date**: November 24, 2025
**Production Testing**: November 25, 2025
**Review Status**: ✅ Comprehensive validation and production testing completed
**Production Ready**: ✅ Fully tested and deployment ready
**Documentation Version**: 2.0.0 (Consolidated)
**Last Updated**: November 25, 2025
---
## 🎉 Implementation Success Summary
MARS-1049 CSV Encoding Support has been **successfully implemented and fully validated**:
-**Database Structure**: ENCODING column added to A_SOURCE_FILE_CONFIG
-**Package Updates**: Both FILE_MANAGER and FILE_MANAGER_ODS updated with encoding support
-**Backward Compatibility**: 100% maintained - no breaking changes
-**Testing**: Comprehensive validation completed for all scenarios
-**Real Data Testing**: Confirmed with CSDB data containing Turkish characters
-**Install/Rollback Cycle**: Complete bidirectional deployment tested and validated
-**Documentation**: Complete usage and deployment documentation provided
-**Enterprise Logging**: Dynamic spool and version tracking implemented
-**Rollback**: Full rollback capability available and tested
-**Production Ready**: System ready for immediate production deployment
**The feature is fully functional, production tested with real data, and confirmed working with international character sets. Complete install/rollback cycle validated. Ready for immediate production deployment.**
### ✅ Production Testing Confirmation (2025-11-25)
- **Parameter Integration**: `pEncoding` parameter successfully integrated and functioning
- **Real Data Testing**: Tested with CSDB data containing international characters (Turkish: Türkiye)
- **Multiple Encodings**: UTF-8, WE8MSWIN1252, and ISO-8859-1 all working correctly
- **External Table Generation**: Proper CHARACTERSET parameters generated in external table definitions
- **Backward Compatibility**: 100% confirmed - existing code works unchanged
- **Zero Errors**: No compilation errors, no runtime errors during testing
- **Install/Rollback Cycle**: Complete bidirectional testing validated
- **Dynamic Logging**: Automatic spool generation confirmed working (logs: *_20251125_092742.log, *_20251125_092758.log)
- **Version Tracking**: ENV_MANAGER.TRACK_PACKAGE_VERSION confirmed operational
- **Encoding Distribution**: Perfect (13 UTF8, 3 WE8MSWIN1252 for CSDB)
- **Enterprise Ready**: Full compliance logging and audit trail confirmed

View File

@@ -0,0 +1,487 @@
# MARS-1049: ENCODING Implementation in FILE_MANAGER
## Change Description
Adding `ENCODING` column to the `A_SOURCE_FILE_CONFIG` table and modifying the `FILE_MANAGER` package to support different character encodings for CSV files.
## Objective
Enable configuration of character encoding for individual source files without code modifications. The value from the `ENCODING` column will be passed as a `characterset` parameter in the formatting options of the `CREATE_EXTERNAL_TABLE` procedure.
---
## 1. DATABASE STRUCTURE MODIFICATIONS
### Adding ENCODING column
```sql
-- Add column to A_SOURCE_FILE_CONFIG table
ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG
ADD (ENCODING VARCHAR2(50));
-- Add column comment
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.ENCODING
IS 'Character encoding for CSV files (e.g. UTF8, WE8MSWIN1252, etc.)';
```
**Data type**: `VARCHAR2(50)` - sufficient for Oracle encoding names
**Nullable**: `YES` - defaults to NULL, database default encoding is used
**Default**: `NULL`
---
## 2. FILE_MANAGER PACKAGE MODIFICATIONS
### A. CREATE_EXTERNAL_TABLE procedure signature (main)
**BEFORE:**
```sql
PROCEDURE CREATE_EXTERNAL_TABLE (
pTableName IN VARCHAR2,
pTemplateTableName IN VARCHAR2,
pPrefix IN VARCHAR2,
pBucketUri IN VARCHAR2 DEFAULT ENV_MANAGER.gvInboxBucketUri,
pFileName IN VARCHAR2 DEFAULT NULL,
pDelimiter IN VARCHAR2 DEFAULT ','
)
```
**PO:**
```sql
PROCEDURE CREATE_EXTERNAL_TABLE (
pTableName IN VARCHAR2,
pTemplateTableName IN VARCHAR2,
pPrefix IN VARCHAR2,
pBucketUri IN VARCHAR2 DEFAULT ENV_MANAGER.gvInboxBucketUri,
pFileName IN VARCHAR2 DEFAULT NULL,
pDelimiter IN VARCHAR2 DEFAULT ',',
pEncoding IN VARCHAR2 DEFAULT NULL -- NOWY PARAMETR
)
```
### B. Wywołanie procedury CREATE_EXTERNAL_TABLE (overload)
**Lokalizacja**: Linie 499-506
**PRZED:**
```sql
CREATE_EXTERNAL_TABLE(
pTableName => vSourceFileReceived.EXTERNAL_TABLE_NAME,
pTemplateTableName => vSourceFileConfig.TEMPLATE_TABLE_NAME,
pPrefix => vSourceFileReceived.SOURCE_FILE_PREFIX_INBOX,
pBucketUri => ENV_MANAGER.gvInboxBucketUri,
pFileName => vFileName,
pDelimiter => ','
);
```
**PO:**
```sql
CREATE_EXTERNAL_TABLE(
pTableName => vSourceFileReceived.EXTERNAL_TABLE_NAME,
pTemplateTableName => vSourceFileConfig.TEMPLATE_TABLE_NAME,
pPrefix => vSourceFileReceived.SOURCE_FILE_PREFIX_INBOX,
pBucketUri => ENV_MANAGER.gvInboxBucketUri,
pFileName => vFileName,
pDelimiter => ',',
pEncoding => vSourceFileConfig.ENCODING -- NOWY PARAMETR
);
```
### C. Logika kodowania w opcjach formatowania
**Lokalizacja**: Około linii 455 w sekcji vFormat
**PRZED:**
```sql
IF pDelimiter = '|' THEN
vFormat := json_object('delimiter' VALUE '|', 'skipheaders' VALUE '1');
ELSE
vFormat := json_object('type' VALUE 'CSV', 'skipheaders' VALUE '1', 'ignoremissingcolumns' value 'true');
END IF;
```
**PO:**
```sql
-- Tworzenie podstawowego formatu
IF pDelimiter = '|' THEN
vFormat := json_object('delimiter' VALUE '|', 'skipheaders' VALUE '1');
ELSE
vFormat := json_object('type' VALUE 'CSV', 'skipheaders' VALUE '1', 'ignoremissingcolumns' value 'true');
END IF;
-- Dodanie kodowania jeśli zostało określone
IF pEncoding IS NOT NULL AND LENGTH(TRIM(pEncoding)) > 0 THEN
vFormat := JSON_MERGEPATCH(vFormat, json_object('characterset' VALUE pEncoding));
END IF;
```
---
## 3. PRZYKŁADY UŻYCIA
### Test z kodowaniem UTF-8
```sql
-- Konfiguracja dla plików z UTF-8 encoding
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ENCODING = 'UTF8'
WHERE A_SOURCE_FILE_CONFIG_KEY = 1;
```
### Test z kodowaniem Windows-1252
```sql
-- Konfiguracja dla plików z Windows-1252 encoding
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ENCODING = 'WE8MSWIN1252'
WHERE A_SOURCE_FILE_CONFIG_KEY = 2;
```
### Resetowanie do wartości domyślnych
```sql
-- Usunięcie kodowania (powrót do domyślnego kodowania bazy)
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ENCODING = NULL
WHERE A_SOURCE_FILE_CONFIG_KEY = 1;
```
---
## 4. MODYFIKACJA ISTNIEJĄCEJ PROCEDURY ADD_SOURCE_FILE_CONFIG
### Rozszerzenie procedury ADD_SOURCE_FILE_CONFIG
**PRZED:**
```sql
PROCEDURE ADD_SOURCE_FILE_CONFIG(
pSourceKey IN VARCHAR2,
pSourceFileType IN VARCHAR2,
pSourceFileId IN VARCHAR2,
pSourceFileDesc IN VARCHAR2,
pSourceFileNamePattern IN VARCHAR2,
pTableId IN VARCHAR2,
pTemplateTableName IN VARCHAR2
)
```
**PO:**
```sql
PROCEDURE ADD_SOURCE_FILE_CONFIG(
pSourceKey IN VARCHAR2,
pSourceFileType IN VARCHAR2,
pSourceFileId IN VARCHAR2,
pSourceFileDesc IN VARCHAR2,
pSourceFileNamePattern IN VARCHAR2,
pTableId IN VARCHAR2,
pTemplateTableName IN VARCHAR2,
pEncoding IN VARCHAR2 DEFAULT NULL -- NOWY PARAMETR
)
```
### Modyfikacja INSERT statement w ADD_SOURCE_FILE_CONFIG
**PRZED:**
```sql
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
A_SOURCE_KEY, SOURCE_FILE_TYPE, SOURCE_FILE_ID, SOURCE_FILE_DESC,
SOURCE_FILE_NAME_PATTERN, TABLE_ID, TEMPLATE_TABLE_NAME
) VALUES (
pSourceKey, pSourceFileType, pSourceFileId, pSourceFileDesc,
pSourceFileNamePattern, pTableId, pTemplateTableName
);
```
**PO:**
```sql
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
A_SOURCE_KEY, SOURCE_FILE_TYPE, SOURCE_FILE_ID, SOURCE_FILE_DESC,
SOURCE_FILE_NAME_PATTERN, TABLE_ID, TEMPLATE_TABLE_NAME, ENCODING
) VALUES (
pSourceKey, pSourceFileType, pSourceFileId, pSourceFileDesc,
pSourceFileNamePattern, pTableId, pTemplateTableName, pEncoding
);
```
### Przykład użycia zmodyfikowanej procedury
```sql
-- Dodanie konfiguracji z kodowaniem UTF-8
CALL FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
pSourceKey => 'C2D',
pSourceFileType => 'INPUT',
pSourceFileId => 'UC_DISSEM',
pSourceFileDesc => 'UC DISSEM Metadata with UTF-8 encoding',
pSourceFileNamePattern => 'UC_NMA_DISSEM-*.csv',
pTableId => 'A_UC_DISSEM_METADATA_LOADS',
pTemplateTableName => 'CT_ET_TEMPLATES.C2D_A_UC_DISSEM_METADATA_LOADS',
pEncoding => 'UTF8'
);
-- Dodanie konfiguracji bez kodowania (jak dotychczas)
CALL FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
pSourceKey => 'LM',
pSourceFileType => 'INPUT',
pSourceFileId => 'STANDING_FACILITIES',
pSourceFileDesc => 'Standing Facilities Data',
pSourceFileNamePattern => 'SF_*.csv',
pTableId => 'STANDING_FACILITIES',
pTemplateTableName => 'CT_ET_TEMPLATES.LM_STANDING_FACILITIES'
-- pEncoding pomijamy - będzie NULL (domyślne kodowanie)
);
```
---
## 5. TESTY WALIDACYJNE
### Test 1: Podstawowa funkcjonalność
```sql
-- 1. Ustawienie kodowania UTF-8
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ENCODING = 'UTF8'
WHERE A_SOURCE_FILE_CONFIG_KEY = 1;
-- 2. Test przetwarzania pliku
CALL FILE_MANAGER.PROCESS_SOURCE_FILE('INBOX/TEST/FILE_ID/TABLE_NAME/test_file.csv');
-- 3. Sprawdzenie logów
SELECT * FROM CT_MRDS.A_PROCESS_LOG
WHERE PROCEDURE_NAME = 'CREATE_EXTERNAL_TABLE'
ORDER BY LOG_DATE DESC;
```
### Test 2: Fallback do wartości domyślnych
```sql
-- 1. Ustawienie NULL
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ENCODING = NULL
WHERE A_SOURCE_FILE_CONFIG_KEY = 1;
-- 2. Test przetwarzania - powinno być używane domyślne kodowanie
CALL FILE_MANAGER.PROCESS_SOURCE_FILE('INBOX/TEST/FILE_ID/TABLE_NAME/test_file.csv');
```
### Test 3: Różne kodowania
```sql
-- 1. Test z Windows-1252
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ENCODING = 'WE8MSWIN1252'
WHERE A_SOURCE_FILE_CONFIG_KEY = 1;
-- 2. Test z UTF-8
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ENCODING = 'UTF8'
WHERE A_SOURCE_FILE_CONFIG_KEY = 2;
-- 3. Test przetwarzania obu plików
CALL FILE_MANAGER.PROCESS_SOURCE_FILE('INBOX/TEST1/FILE_ID/TABLE_NAME/test_file1.csv');
CALL FILE_MANAGER.PROCESS_SOURCE_FILE('INBOX/TEST2/FILE_ID/TABLE_NAME/test_file2.csv');
```
---
## 6. HARMONOGRAM WDROŻENIA
### Faza 1: Przygotowanie struktury (KRYTYCZNA)
1. ✅ Dodanie kolumny `ENCODING` do tabeli
2. ✅ Zaktualizowanie definicji tabeli w plikach DDL
### Faza 2: Modyfikacja pakietu (WYSOKA)
1. ⏳ Dodanie parametru do sygnatury `CREATE_EXTERNAL_TABLE`
2. ⏳ Implementacja logiki kodowania w formatowaniu JSON
3. ⏳ Aktualizacja wywołania w procedurze overload
4. ⏳ Aktualizacja parametrów logowania
### Faza 3: Testy i walidacja (ŚREDNIA)
1. ⏳ Testy jednostkowe z różnymi kodowaniami
2. ⏳ Testy integracyjne z różnymi typami plików
3. ⏳ Walidacja fallback do domyślnego kodowania
### Faza 4: Modyfikacja procedur konfiguracyjnych (NISKA)
1. ⏳ Modyfikacja `ADD_SOURCE_FILE_CONFIG` - dodanie parametru `pEncoding`
2. ⏳ Aktualizacja dokumentacji
3. ⏳ Przykłady użycia w confluence
---
## 7. ROLLBACK
W przypadku problemów można wykonać rollback:
```sql
-- Usunięcie kolumny (OSTROŻNIE - spowoduje utratę danych)
ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG DROP COLUMN ENCODING;
-- Przywrrócenie oryginalnej wersji pakietu FILE_MANAGER
-- (wymagane przywrrócenie z backupu)
```
---
## 8. UWAGI TECHNICZNE
### Ograniczenia
- Maksymalna długość nazwy kodowania: 50 znaków
- Obsługiwane kodowania: wszystkie wspierane przez Oracle Database
- Przykłady poprawnych nazw: `UTF8`, `WE8MSWIN1252`, `AL32UTF8`, `WE8ISO8859P1`
### Bezpieczeństwo
- Brak walidacji nazwy kodowania na poziomie aplikacji
- Oracle Database zwaliduje kodowanie podczas tworzenia external table
- Fallback do domyślnego kodowania bazy w przypadku NULL
### Wydajność
- Minimalne obciążenie - kodowanie dodawane tylko jeśli nie jest NULL
- Brak wpływu na istniejące procesy gdy kolumna jest NULL
- Używa natywnej funkcji JSON_MERGEPATCH Oracle Database
---
## 9. PRZYGOTOWANIE PACZKI INSTALACYJNEJ
### Struktura paczki MARS-1049
```
MARS_Packages/REL02/MARS-1049/
├── 01_MARS_1049_install_CT_MRDS_ADD_ENCODING_COLUMN.sql
├── 02_MARS_1049_install_CT_MRDS_FILE_MANAGER_SPEC.sql
├── 03_MARS_1049_install_CT_MRDS_FILE_MANAGER_BODY.sql
├── 04_MARS_1049_verify_ENCODING_FUNCTIONALITY.sql
├── 05_MARS_1049_track_version.sql
├── 91_MARS_1049_rollback_FILE_MANAGER_BODY.sql
├── 92_MARS_1049_rollback_FILE_MANAGER_SPEC.sql
├── 93_MARS_1049_rollback_ENCODING_COLUMN.sql
├── 94_MARS_1049_track_rollback_version.sql
├── install_mars1049.sql
├── rollback_mars1049.sql
└── README_ENCODING.md
```
### Zawartość skryptów instalacyjnych
#### 01_MARS_1049_install_CT_MRDS_ADD_ENCODING_COLUMN.sql
```sql
-- MARS-1049: Dodanie kolumny ENCODING do A_SOURCE_FILE_CONFIG
-- Autor: System Enhancement
-- Data: 2025-11-24
PROMPT Adding ENCODING column to CT_MRDS.A_SOURCE_FILE_CONFIG
ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG
ADD (ENCODING VARCHAR2(50));
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.ENCODING
IS 'Character encoding for CSV files (e.g. UTF8, WE8MSWIN1252, etc.)';
PROMPT ENCODING column added successfully
```
#### 02_MARS_1049_install_CT_MRDS_FILE_MANAGER_SPEC.sql
```sql
-- MARS-1049: Aktualizacja specyfikacji FILE_MANAGER - dodanie parametru pEncoding
-- Zawiera: Modyfikację sygnatury CREATE_EXTERNAL_TABLE i ADD_SOURCE_FILE_CONFIG
```
#### 04_MARS_1049_verify_ENCODING_FUNCTIONALITY.sql
```sql
-- MARS-1049: Weryfikacja funkcjonalności ENCODING
PROMPT Testing ENCODING functionality...
-- Test 1: Sprawdzenie struktury tabeli
SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'A_SOURCE_FILE_CONFIG'
AND COLUMN_NAME = 'ENCODING';
-- Test 2: Test podstawowej funkcjonalności
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
A_SOURCE_KEY, SOURCE_FILE_TYPE, SOURCE_FILE_ID,
SOURCE_FILE_DESC, SOURCE_FILE_NAME_PATTERN,
TABLE_ID, TEMPLATE_TABLE_NAME, ENCODING
) VALUES (
'TEST', 'INPUT', 'ENCODING_TEST',
'Test ENCODING functionality', 'test_*.csv',
'TEST_TABLE', 'CT_ET_TEMPLATES.TEST_TABLE', 'UTF8'
);
-- Sprawdzenie czy rekord został dodany
SELECT A_SOURCE_FILE_CONFIG_KEY, ENCODING
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'TEST' AND SOURCE_FILE_ID = 'ENCODING_TEST';
-- Cleanup
DELETE FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'TEST' AND SOURCE_FILE_ID = 'ENCODING_TEST';
PROMPT ENCODING functionality verification completed successfully
```
#### install_mars1049.sql (Master Install Script)
```sql
-- MARS-1049: Master Installation Script
-- CSV Encoding Support Implementation
PROMPT ================================================
PROMPT MARS-1049: Installing CSV Encoding Support
PROMPT ================================================
SPOOL install_mars1049.log
-- Faza 1: Struktura bazy danych
PROMPT Phase 1: Database Structure Changes
@@01_MARS_1049_install_CT_MRDS_ADD_ENCODING_COLUMN.sql
-- Faza 2: Pakiet FILE_MANAGER (Specyfikacja)
PROMPT Phase 2: FILE_MANAGER Package Specification
@@02_MARS_1049_install_CT_MRDS_FILE_MANAGER_SPEC.sql
-- Faza 3: Pakiet FILE_MANAGER (Ciało)
PROMPT Phase 3: FILE_MANAGER Package Body
@@03_MARS_1049_install_CT_MRDS_FILE_MANAGER_BODY.sql
-- Faza 4: Weryfikacja
PROMPT Phase 4: Functionality Verification
@@04_MARS_1049_verify_ENCODING_FUNCTIONALITY.sql
-- Faza 5: Tracking wersji
PROMPT Phase 5: Version Tracking
@@05_MARS_1049_track_version.sql
PROMPT ================================================
PROMPT MARS-1049: Installation completed successfully
PROMPT ================================================
SPOOL OFF
```
#### rollback_mars1049.sql (Master Rollback Script)
```sql
-- MARS-1049: Master Rollback Script
-- WARNING: This will remove ENCODING functionality
PROMPT ================================================
PROMPT MARS-1049: Rolling back CSV Encoding Support
PROMPT WARNING: This will remove ENCODING column and data!
PROMPT ================================================
SPOOL rollback_mars1049.log
-- Rollback w odwrotnej kolejności
@@94_MARS_1049_track_rollback_version.sql
@@93_MARS_1049_rollback_ENCODING_COLUMN.sql
@@92_MARS_1049_rollback_FILE_MANAGER_SPEC.sql
@@91_MARS_1049_rollback_FILE_MANAGER_BODY.sql
PROMPT ================================================
PROMPT MARS-1049: Rollback completed
PROMPT ================================================
SPOOL OFF
```
### Deployment Commands
```powershell
# Instalacja paczki MARS-1049
Get-Content "MARS_Packages\REL02\MARS-1049\install_mars1049.sql" | sql "CT_MRDS/Cloudpass#34@ggmichalski_high"
# W przypadku problemów - rollback
Get-Content "MARS_Packages\REL02\MARS-1049\rollback_mars1049.sql" | sql "CT_MRDS/Cloudpass#34@ggmichalski_high"
# Archiwizacja po instalacji
7z a -pMojeSuperHaslo -mhe=on MARS_1049_arch.7z MARS_Packages\REL02\MARS-1049\*.sql
```
---
## Status: GOTOWE DO IMPLEMENTACJI
**Utworzone**: 2025-11-24
**Autor**: System FILE_MANAGER Enhancement
**MARS Issue**: MARS-1049
**Priorytet**: WYSOKI