Compare commits
14 Commits
develop
...
0ecc119ee9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0ecc119ee9 | ||
|
|
182e6240d3 | ||
|
|
b81e524351 | ||
|
|
73e99b6e76 | ||
|
|
113ea0a618 | ||
|
|
59e18d9b35 | ||
|
|
a58a5ae82a | ||
|
|
b537719b64 | ||
|
|
4de14b64fb | ||
|
|
36a04dde04 | ||
|
|
cad6e63479 | ||
|
|
7db10725a0 | ||
|
|
a13a9d415f | ||
|
|
1c6f552df9 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -19,6 +19,8 @@ issues/
|
|||||||
ehthumbs.db
|
ehthumbs.db
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
|
|
||||||
|
MARS_Packages/mrds_elt-dev-database/mrds_elt-dev-database/database/CT_MRDS/export/*
|
||||||
|
|
||||||
MARS_Packages/REL01/MARS-1056/confluence/
|
MARS_Packages/REL01/MARS-1056/confluence/
|
||||||
MARS_Packages/REL01/MARS-1056/log/
|
MARS_Packages/REL01/MARS-1056/log/
|
||||||
MARS_Packages/REL01/MARS-1046/confluence/
|
MARS_Packages/REL01/MARS-1046/confluence/
|
||||||
|
|||||||
26
MARS_Packages/REL02_POST/MARS-1409/.gitignore
vendored
Normal file
26
MARS_Packages/REL02_POST/MARS-1409/.gitignore
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# MARS-1409 Package - Git Ignore Rules
|
||||||
|
# Standard exclusions for MARS deployment packages
|
||||||
|
|
||||||
|
# Confluence documentation (generated, not source)
|
||||||
|
confluence/
|
||||||
|
|
||||||
|
# Patches directory
|
||||||
|
patches/
|
||||||
|
|
||||||
|
# Log files from SPOOL operations
|
||||||
|
log/
|
||||||
|
|
||||||
|
# Test directories and files
|
||||||
|
test/
|
||||||
|
|
||||||
|
# Mock data scripts (development only)
|
||||||
|
mock_data/
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
*.tmp
|
||||||
|
*.bak
|
||||||
|
*~
|
||||||
|
|
||||||
|
# Editor backups
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Step 01: Add A_WORKFLOW_HISTORY_KEY column
|
||||||
|
-- ============================================================================
|
||||||
|
-- Purpose: Add A_WORKFLOW_HISTORY_KEY column to A_SOURCE_FILE_RECEIVED table
|
||||||
|
-- Prerequisites: Table A_SOURCE_FILE_RECEIVED exists, A_WORKFLOW_HISTORY table exists
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT Adding A_WORKFLOW_HISTORY_KEY column to A_SOURCE_FILE_RECEIVED...
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
vColumnExists NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO vColumnExists
|
||||||
|
FROM ALL_TAB_COLUMNS
|
||||||
|
WHERE OWNER = 'CT_MRDS'
|
||||||
|
AND TABLE_NAME = 'A_SOURCE_FILE_RECEIVED'
|
||||||
|
AND COLUMN_NAME = 'A_WORKFLOW_HISTORY_KEY';
|
||||||
|
|
||||||
|
IF vColumnExists > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SKIP: Column A_WORKFLOW_HISTORY_KEY already exists.');
|
||||||
|
RETURN;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
EXECUTE IMMEDIATE '
|
||||||
|
ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED ADD (
|
||||||
|
A_WORKFLOW_HISTORY_KEY NUMBER
|
||||||
|
)';
|
||||||
|
|
||||||
|
EXECUTE IMMEDIATE '
|
||||||
|
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)''';
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('A_WORKFLOW_HISTORY_KEY column added successfully!');
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR adding column: ' || SQLERRM);
|
||||||
|
RAISE;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
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,16 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Step 02: Install FILE_MANAGER Package Specification
|
||||||
|
-- ============================================================================
|
||||||
|
-- Purpose: Deploy updated FILE_MANAGER package specification
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT Installing FILE_MANAGER package specification...
|
||||||
|
|
||||||
|
-- Source from new_version directory
|
||||||
|
@@new_version/FILE_MANAGER.pkg
|
||||||
|
|
||||||
|
PROMPT FILE_MANAGER specification installed
|
||||||
|
PROMPT
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Step 03: Install FILE_MANAGER Package Body
|
||||||
|
-- ============================================================================
|
||||||
|
-- Purpose: Deploy updated FILE_MANAGER package body
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT Installing FILE_MANAGER package body...
|
||||||
|
|
||||||
|
-- Source from new_version directory
|
||||||
|
@@new_version/FILE_MANAGER.pkb
|
||||||
|
|
||||||
|
PROMPT FILE_MANAGER body installed
|
||||||
|
PROMPT
|
||||||
@@ -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,28 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- 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);
|
||||||
|
IF v_status != 'VALID' THEN
|
||||||
|
RAISE_APPLICATION_ERROR(-20002, 'ERROR: TRG_A_WORKFLOW_HISTORY compiled with errors (status=' || v_status || '). Installation aborted.');
|
||||||
|
END IF;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
RAISE_APPLICATION_ERROR(-20001, 'ERROR: TRG_A_WORKFLOW_HISTORY not found after installation');
|
||||||
|
END;
|
||||||
|
/
|
||||||
@@ -0,0 +1,177 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- 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
|
||||||
|
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT Updating A_WORKFLOW_HISTORY_KEY for existing A_SOURCE_FILE_RECEIVED records...
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
vUpdatedTotal NUMBER := 0;
|
||||||
|
vUpdatedCurrent NUMBER := 0;
|
||||||
|
vFailedConfigs NUMBER := 0;
|
||||||
|
vTableNotFound NUMBER := 0;
|
||||||
|
vSkippedConfigs NUMBER := 0;
|
||||||
|
vTableName VARCHAR2(200);
|
||||||
|
vSQL VARCHAR2(32767);
|
||||||
|
vRecordsToUpdate NUMBER := 0;
|
||||||
|
vRemainingTargeted NUMBER := 0;
|
||||||
|
vTableExists 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 that has records to update
|
||||||
|
FOR config_rec IN (
|
||||||
|
SELECT
|
||||||
|
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';
|
||||||
|
|
||||||
|
-- Check table existence before attempting dynamic SQL
|
||||||
|
SELECT COUNT(*) INTO vTableExists
|
||||||
|
FROM ALL_TABLES
|
||||||
|
WHERE OWNER = 'ODS'
|
||||||
|
AND TABLE_NAME = config_rec.TABLE_ID || '_ODS';
|
||||||
|
|
||||||
|
IF vTableExists = 0 THEN
|
||||||
|
vTableNotFound := vTableNotFound + 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 ||
|
||||||
|
') - ODS table not found: ' || vTableName);
|
||||||
|
CONTINUE;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
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 || ')...');
|
||||||
|
|
||||||
|
-- Update using ODS table
|
||||||
|
vSQL :=
|
||||||
|
'UPDATE CT_MRDS.A_SOURCE_FILE_RECEIVED sfr ' ||
|
||||||
|
'SET A_WORKFLOW_HISTORY_KEY = ( ' ||
|
||||||
|
' SELECT t.A_WORKFLOW_HISTORY_KEY ' ||
|
||||||
|
' FROM ' || vTableName || ' t ' ||
|
||||||
|
' WHERE t.file$name = sfr.SOURCE_FILE_NAME ' ||
|
||||||
|
' AND rownum=1 ' ||
|
||||||
|
') ' ||
|
||||||
|
'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 rownum=1 ' ||
|
||||||
|
' )';
|
||||||
|
|
||||||
|
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: Unexpected failure 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 skipped (ODS table not found): ' || vTableNotFound);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Configurations failed (unexpected errors): ' || vFailedConfigs);
|
||||||
|
|
||||||
|
-- Check remaining NULL records - targeted statuses only
|
||||||
|
SELECT COUNT(*) INTO vRemainingTargeted
|
||||||
|
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');
|
||||||
|
|
||||||
|
-- Check all remaining NULL records (includes RECEIVED, VALIDATION_FAILED)
|
||||||
|
SELECT COUNT(*) INTO vRecordsToUpdate
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
WHERE A_WORKFLOW_HISTORY_KEY IS NULL;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Remaining NULL records (targeted statuses): ' || vRemainingTargeted);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Remaining NULL records (all statuses): ' || vRecordsToUpdate);
|
||||||
|
|
||||||
|
IF vRemainingTargeted > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('NOTE: Some records with targeted statuses still have NULL A_WORKFLOW_HISTORY_KEY.');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' This is expected for files not yet ingested into ODS tables');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' or ODS tables with a different structure.');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' These records will be populated when files are re-processed.');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF vFailedConfigs > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: ' || vFailedConfigs || ' configuration(s) failed with unexpected errors.');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Review the ERROR lines above and investigate manually.');
|
||||||
|
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
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Step 04: Verify Installation
|
||||||
|
-- ============================================================================
|
||||||
|
-- Purpose: Verify successful installation of MARS-1409 changes
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
SET VERIFY OFF
|
||||||
|
SET FEEDBACK ON
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT Verifying MARS-1409 Installation
|
||||||
|
PROMPT ============================================================================
|
||||||
|
|
||||||
|
-- Check if column was added
|
||||||
|
PROMPT
|
||||||
|
PROMPT 1. Checking A_WORKFLOW_HISTORY_KEY column existence...
|
||||||
|
SELECT
|
||||||
|
column_name,
|
||||||
|
data_type,
|
||||||
|
data_length,
|
||||||
|
nullable
|
||||||
|
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
|
||||||
|
PROMPT
|
||||||
|
PROMPT 2. Checking foreign key constraint...
|
||||||
|
SELECT
|
||||||
|
constraint_name,
|
||||||
|
constraint_type,
|
||||||
|
r_constraint_name,
|
||||||
|
status
|
||||||
|
FROM all_constraints
|
||||||
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND table_name = 'A_SOURCE_FILE_RECEIVED'
|
||||||
|
AND constraint_type = 'R'
|
||||||
|
AND constraint_name LIKE '%WORKFLOW_HISTORY%';
|
||||||
|
|
||||||
|
-- Check package compilation status
|
||||||
|
PROMPT
|
||||||
|
PROMPT 3. Checking FILE_MANAGER package compilation...
|
||||||
|
SELECT
|
||||||
|
object_name,
|
||||||
|
object_type,
|
||||||
|
status,
|
||||||
|
last_ddl_time
|
||||||
|
FROM all_objects
|
||||||
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND object_name = 'FILE_MANAGER'
|
||||||
|
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
|
||||||
|
ORDER BY object_type;
|
||||||
|
|
||||||
|
-- Check for compilation errors
|
||||||
|
PROMPT
|
||||||
|
PROMPT 4. Checking for compilation errors...
|
||||||
|
SELECT
|
||||||
|
name,
|
||||||
|
type,
|
||||||
|
line,
|
||||||
|
position,
|
||||||
|
text
|
||||||
|
FROM all_errors
|
||||||
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND name = 'FILE_MANAGER'
|
||||||
|
ORDER BY type, line, position;
|
||||||
|
|
||||||
|
-- Check FILE_ARCHIVER compilation status
|
||||||
|
PROMPT
|
||||||
|
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 ============================================================================
|
||||||
|
PROMPT Verification Complete
|
||||||
|
PROMPT ============================================================================
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Rollback 90: Verify Rollback
|
||||||
|
-- ============================================================================
|
||||||
|
-- Purpose: Verify successful rollback of MARS-1409 changes
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT Verifying MARS-1409 Rollback
|
||||||
|
PROMPT ============================================================================
|
||||||
|
|
||||||
|
-- Check if column was removed
|
||||||
|
PROMPT
|
||||||
|
PROMPT 1. Verifying A_WORKFLOW_HISTORY_KEY column removal...
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO v_count
|
||||||
|
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
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: A_WORKFLOW_HISTORY_KEY column removed');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: A_WORKFLOW_HISTORY_KEY column still exists');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Check trigger was restored
|
||||||
|
PROMPT
|
||||||
|
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 2. Checking package compilation status...
|
||||||
|
SELECT
|
||||||
|
object_name,
|
||||||
|
object_type,
|
||||||
|
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 ============================================================================
|
||||||
|
PROMPT Rollback Verification Complete
|
||||||
|
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,16 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Rollback 92: Restore FILE_MANAGER Package Specification
|
||||||
|
-- ============================================================================
|
||||||
|
-- Purpose: Restore previous FILE_MANAGER package specification
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT Restoring FILE_MANAGER package specification...
|
||||||
|
|
||||||
|
-- Source from rollback_version directory
|
||||||
|
@@rollback_version/FILE_MANAGER.pkg
|
||||||
|
|
||||||
|
PROMPT FILE_MANAGER specification restored
|
||||||
|
PROMPT
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Rollback 93: Restore FILE_MANAGER Package Body
|
||||||
|
-- ============================================================================
|
||||||
|
-- Purpose: Restore previous FILE_MANAGER package body
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT Restoring FILE_MANAGER package body...
|
||||||
|
|
||||||
|
-- Source from rollback_version directory
|
||||||
|
@@rollback_version/FILE_MANAGER.pkb
|
||||||
|
|
||||||
|
PROMPT FILE_MANAGER body restored
|
||||||
|
PROMPT
|
||||||
@@ -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,26 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- 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
|
||||||
|
-- After rollback the trigger is restored under its original name: a_workflow_history
|
||||||
|
SELECT status INTO v_status
|
||||||
|
FROM all_objects
|
||||||
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND object_name = 'A_WORKFLOW_HISTORY'
|
||||||
|
AND object_type = 'TRIGGER';
|
||||||
|
DBMS_OUTPUT.PUT_LINE('A_WORKFLOW_HISTORY (original trigger) restored, status: ' || v_status);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
RAISE_APPLICATION_ERROR(-20001, 'ERROR: A_WORKFLOW_HISTORY not found after rollback');
|
||||||
|
END;
|
||||||
|
/
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Rollback 91: Drop A_WORKFLOW_HISTORY_KEY column
|
||||||
|
-- ============================================================================
|
||||||
|
-- Purpose: Remove A_WORKFLOW_HISTORY_KEY column from A_SOURCE_FILE_RECEIVED
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT Dropping A_WORKFLOW_HISTORY_KEY column from A_SOURCE_FILE_RECEIVED...
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
vColumnExists NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO vColumnExists
|
||||||
|
FROM ALL_TAB_COLUMNS
|
||||||
|
WHERE OWNER = 'CT_MRDS'
|
||||||
|
AND TABLE_NAME = 'A_SOURCE_FILE_RECEIVED'
|
||||||
|
AND COLUMN_NAME = 'A_WORKFLOW_HISTORY_KEY';
|
||||||
|
|
||||||
|
IF vColumnExists = 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SKIP: Column A_WORKFLOW_HISTORY_KEY does not exist (already dropped).');
|
||||||
|
RETURN;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED DROP COLUMN A_WORKFLOW_HISTORY_KEY';
|
||||||
|
DBMS_OUTPUT.PUT_LINE('A_WORKFLOW_HISTORY_KEY column dropped successfully!');
|
||||||
|
|
||||||
|
-- Recompile packages invalidated by column drop
|
||||||
|
EXECUTE IMMEDIATE 'ALTER PACKAGE CT_MRDS.ENV_MANAGER COMPILE BODY';
|
||||||
|
EXECUTE IMMEDIATE 'ALTER PACKAGE CT_MRDS.FILE_MANAGER COMPILE';
|
||||||
|
EXECUTE IMMEDIATE 'ALTER PACKAGE CT_MRDS.FILE_MANAGER COMPILE BODY';
|
||||||
|
EXECUTE IMMEDIATE 'ALTER PACKAGE CT_MRDS.FILE_ARCHIVER COMPILE';
|
||||||
|
EXECUTE IMMEDIATE 'ALTER PACKAGE CT_MRDS.FILE_ARCHIVER COMPILE BODY';
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Dependent packages recompiled.');
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR dropping column: ' || SQLERRM);
|
||||||
|
RAISE;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
210
MARS_Packages/REL02_POST/MARS-1409/README.md
Normal file
210
MARS_Packages/REL02_POST/MARS-1409/README.md
Normal file
@@ -0,0 +1,210 @@
|
|||||||
|
# MARS-1409: Add A_WORKFLOW_HISTORY_KEY to A_SOURCE_FILE_RECEIVED
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
Package for adding A_WORKFLOW_HISTORY_KEY column to A_SOURCE_FILE_RECEIVED table and updating FILE_MANAGER package to populate this value during file registration.
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
Direct tracking of workflow history keys in file registration for improved diagnostics and simplified archival queries.
|
||||||
|
|
||||||
|
## Structure
|
||||||
|
```
|
||||||
|
MARS-1409/
|
||||||
|
├── .gitignore
|
||||||
|
├── 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
|
||||||
|
│ ├── 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
|
||||||
|
│ ├── 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
|
||||||
|
**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. **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)
|
||||||
@@ -0,0 +1,319 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Diagnostic: Workflow key status after step 09
|
||||||
|
-- ============================================================================
|
||||||
|
-- Purpose: For each INPUT config with an ODS table, report:
|
||||||
|
-- [A] Files present in ODS bucket but NOT registered in A_SOURCE_FILE_RECEIVED
|
||||||
|
-- [B] Files registered in A_SOURCE_FILE_RECEIVED but NOT in ODS bucket
|
||||||
|
-- [C] Files present in both - with A_WORKFLOW_HISTORY_KEY populated
|
||||||
|
-- [D] Files present in both - A_WORKFLOW_HISTORY_KEY still NULL
|
||||||
|
--
|
||||||
|
-- Can be run at any time, read-only (no DML).
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
SET LINESIZE 200
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT Diagnosing workflow key status (ODS bucket vs A_SOURCE_FILE_RECEIVED)
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
TYPE tStringList IS TABLE OF VARCHAR2(500);
|
||||||
|
|
||||||
|
vTableName VARCHAR2(200);
|
||||||
|
vTableExists NUMBER;
|
||||||
|
vBucketEmpty BOOLEAN;
|
||||||
|
vRefCursor SYS_REFCURSOR;
|
||||||
|
vFileName VARCHAR2(500);
|
||||||
|
|
||||||
|
-- Per-config counters
|
||||||
|
vOnlyInBucket NUMBER;
|
||||||
|
vOnlyInDB NUMBER;
|
||||||
|
vInBothWithKey NUMBER;
|
||||||
|
vInBothNoKey NUMBER;
|
||||||
|
|
||||||
|
-- Grand totals
|
||||||
|
vConfigsChecked NUMBER := 0;
|
||||||
|
vConfigsWithIssues NUMBER := 0;
|
||||||
|
vTotalOnlyInBucket NUMBER := 0;
|
||||||
|
vTotalOnlyInDB NUMBER := 0;
|
||||||
|
vTotalInBothWithKey NUMBER := 0;
|
||||||
|
vTotalInBothNoKey NUMBER := 0;
|
||||||
|
|
||||||
|
-- How many individual file names to print per category before summarising
|
||||||
|
cMaxPrint CONSTANT NUMBER := 1000;
|
||||||
|
vPrinted NUMBER;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
FOR config_rec IN (
|
||||||
|
SELECT sfc.A_SOURCE_FILE_CONFIG_KEY,
|
||||||
|
sfc.A_SOURCE_KEY,
|
||||||
|
sfc.SOURCE_FILE_ID,
|
||||||
|
sfc.TABLE_ID
|
||||||
|
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
|
||||||
|
|
||||||
|
vTableName := 'ODS.' || config_rec.TABLE_ID || '_ODS';
|
||||||
|
|
||||||
|
SELECT COUNT(*) INTO vTableExists
|
||||||
|
FROM ALL_TABLES
|
||||||
|
WHERE OWNER = 'ODS'
|
||||||
|
AND TABLE_NAME = config_rec.TABLE_ID || '_ODS';
|
||||||
|
|
||||||
|
IF vTableExists = 0 THEN
|
||||||
|
CONTINUE;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- Check if the bucket location has any files at all
|
||||||
|
-- (empty bucket raises ORA-29913 instead of returning 0 rows)
|
||||||
|
vBucketEmpty := FALSE;
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE
|
||||||
|
'SELECT COUNT(*) FROM ' || vTableName || ' t WHERE ROWNUM = 1'
|
||||||
|
INTO vTableExists;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
IF SQLCODE = -29913 THEN
|
||||||
|
vBucketEmpty := TRUE;
|
||||||
|
ELSE
|
||||||
|
RAISE;
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
|
||||||
|
IF vBucketEmpty THEN
|
||||||
|
-- Bucket is empty: nothing in ODS, but registered records are all "not in bucket"
|
||||||
|
vOnlyInBucket := 0;
|
||||||
|
SELECT COUNT(*) INTO vOnlyInDB
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr
|
||||||
|
WHERE sfr.A_SOURCE_FILE_CONFIG_KEY = config_rec.A_SOURCE_FILE_CONFIG_KEY
|
||||||
|
AND sfr.PROCESSING_STATUS IN ('VALIDATED','READY_FOR_INGESTION','INGESTED','ARCHIVED','ARCHIVED_AND_TRASHED','ARCHIVED_AND_PURGED');
|
||||||
|
vInBothWithKey := 0;
|
||||||
|
vInBothNoKey := 0;
|
||||||
|
ELSE
|
||||||
|
|
||||||
|
-- ----------------------------------------------------------------
|
||||||
|
-- [A] In ODS bucket but NOT in A_SOURCE_FILE_RECEIVED
|
||||||
|
-- ----------------------------------------------------------------
|
||||||
|
EXECUTE IMMEDIATE
|
||||||
|
'SELECT COUNT(DISTINCT t.file$name) ' ||
|
||||||
|
'FROM ' || vTableName || ' t ' ||
|
||||||
|
'WHERE t.file$name IS NOT NULL ' ||
|
||||||
|
' AND NOT EXISTS ( ' ||
|
||||||
|
' SELECT 1 FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr ' ||
|
||||||
|
' WHERE sfr.SOURCE_FILE_NAME = t.file$name ' ||
|
||||||
|
' AND sfr.A_SOURCE_FILE_CONFIG_KEY = :1)'
|
||||||
|
INTO vOnlyInBucket
|
||||||
|
USING config_rec.A_SOURCE_FILE_CONFIG_KEY;
|
||||||
|
|
||||||
|
-- ----------------------------------------------------------------
|
||||||
|
-- [B] In A_SOURCE_FILE_RECEIVED (targeted statuses) but NOT in ODS bucket
|
||||||
|
-- ----------------------------------------------------------------
|
||||||
|
EXECUTE IMMEDIATE
|
||||||
|
'SELECT COUNT(*) ' ||
|
||||||
|
'FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr ' ||
|
||||||
|
'WHERE sfr.A_SOURCE_FILE_CONFIG_KEY = :1 ' ||
|
||||||
|
' AND sfr.PROCESSING_STATUS IN (''VALIDATED'',''READY_FOR_INGESTION'',''INGESTED'',''ARCHIVED'',''ARCHIVED_AND_TRASHED'',''ARCHIVED_AND_PURGED'') ' ||
|
||||||
|
' AND NOT EXISTS ( ' ||
|
||||||
|
' SELECT 1 FROM ' || vTableName || ' t ' ||
|
||||||
|
' WHERE t.file$name = sfr.SOURCE_FILE_NAME)'
|
||||||
|
INTO vOnlyInDB
|
||||||
|
USING config_rec.A_SOURCE_FILE_CONFIG_KEY;
|
||||||
|
|
||||||
|
-- ----------------------------------------------------------------
|
||||||
|
-- [C] In both, A_WORKFLOW_HISTORY_KEY IS NOT NULL
|
||||||
|
-- ----------------------------------------------------------------
|
||||||
|
EXECUTE IMMEDIATE
|
||||||
|
'SELECT COUNT(DISTINCT sfr.A_SOURCE_FILE_RECEIVED_KEY) ' ||
|
||||||
|
'FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr ' ||
|
||||||
|
'WHERE sfr.A_SOURCE_FILE_CONFIG_KEY = :1 ' ||
|
||||||
|
' AND sfr.A_WORKFLOW_HISTORY_KEY IS NOT 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)'
|
||||||
|
INTO vInBothWithKey
|
||||||
|
USING config_rec.A_SOURCE_FILE_CONFIG_KEY;
|
||||||
|
|
||||||
|
-- ----------------------------------------------------------------
|
||||||
|
-- [D] In both, A_WORKFLOW_HISTORY_KEY IS NULL
|
||||||
|
-- ----------------------------------------------------------------
|
||||||
|
EXECUTE IMMEDIATE
|
||||||
|
'SELECT COUNT(DISTINCT sfr.A_SOURCE_FILE_RECEIVED_KEY) ' ||
|
||||||
|
'FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr ' ||
|
||||||
|
'WHERE sfr.A_SOURCE_FILE_CONFIG_KEY = :1 ' ||
|
||||||
|
' 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)'
|
||||||
|
INTO vInBothNoKey
|
||||||
|
USING config_rec.A_SOURCE_FILE_CONFIG_KEY;
|
||||||
|
|
||||||
|
END IF; -- vBucketEmpty
|
||||||
|
|
||||||
|
-- Skip configs with nothing to report
|
||||||
|
IF vOnlyInBucket = 0 AND vOnlyInDB = 0 AND vInBothWithKey = 0 AND vInBothNoKey = 0 THEN
|
||||||
|
CONTINUE;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
vConfigsChecked := vConfigsChecked + 1;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Config ' || config_rec.A_SOURCE_FILE_CONFIG_KEY ||
|
||||||
|
' (' || config_rec.A_SOURCE_KEY ||
|
||||||
|
'/' || config_rec.SOURCE_FILE_ID ||
|
||||||
|
'/' || config_rec.TABLE_ID || ')');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' [A] In bucket, not registered: ' || vOnlyInBucket);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' [B] Registered, not in bucket: ' || vOnlyInDB);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' [C] In both, A_WORKFLOW_HISTORY_KEY set: ' || vInBothWithKey);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' [D] In both, A_WORKFLOW_HISTORY_KEY NULL: ' || vInBothNoKey);
|
||||||
|
|
||||||
|
-- Print individual file names for categories with problems
|
||||||
|
IF vOnlyInBucket > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' [A] Files in bucket not registered:');
|
||||||
|
vPrinted := 0;
|
||||||
|
OPEN vRefCursor FOR
|
||||||
|
'SELECT DISTINCT t.file$name ' ||
|
||||||
|
'FROM ' || vTableName || ' t ' ||
|
||||||
|
'WHERE t.file$name IS NOT NULL ' ||
|
||||||
|
' AND NOT EXISTS ( ' ||
|
||||||
|
' SELECT 1 FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr ' ||
|
||||||
|
' WHERE sfr.SOURCE_FILE_NAME = t.file$name ' ||
|
||||||
|
' AND sfr.A_SOURCE_FILE_CONFIG_KEY = :1) ' ||
|
||||||
|
'ORDER BY t.file$name'
|
||||||
|
USING config_rec.A_SOURCE_FILE_CONFIG_KEY;
|
||||||
|
LOOP
|
||||||
|
FETCH vRefCursor INTO vFileName;
|
||||||
|
EXIT WHEN vRefCursor%NOTFOUND;
|
||||||
|
vPrinted := vPrinted + 1;
|
||||||
|
IF vPrinted <= cMaxPrint THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ' || vFileName);
|
||||||
|
ELSIF vPrinted = cMaxPrint + 1 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ... and ' || (vOnlyInBucket - cMaxPrint) || ' more');
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
CLOSE vRefCursor;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF vOnlyInDB > 0 THEN
|
||||||
|
vConfigsWithIssues := vConfigsWithIssues + 1;
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' [B] Registered files not found in bucket:');
|
||||||
|
vPrinted := 0;
|
||||||
|
OPEN vRefCursor FOR
|
||||||
|
'SELECT sfr.SOURCE_FILE_NAME, sfr.PROCESSING_STATUS, sfr.A_WORKFLOW_HISTORY_KEY ' ||
|
||||||
|
'FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr ' ||
|
||||||
|
'WHERE sfr.A_SOURCE_FILE_CONFIG_KEY = :1 ' ||
|
||||||
|
' AND sfr.PROCESSING_STATUS IN (''VALIDATED'',''READY_FOR_INGESTION'',''INGESTED'',''ARCHIVED'',''ARCHIVED_AND_TRASHED'',''ARCHIVED_AND_PURGED'') ' ||
|
||||||
|
' AND NOT EXISTS ( ' ||
|
||||||
|
' SELECT 1 FROM ' || vTableName || ' t ' ||
|
||||||
|
' WHERE t.file$name = sfr.SOURCE_FILE_NAME) ' ||
|
||||||
|
'ORDER BY sfr.SOURCE_FILE_NAME'
|
||||||
|
USING config_rec.A_SOURCE_FILE_CONFIG_KEY;
|
||||||
|
LOOP
|
||||||
|
DECLARE
|
||||||
|
vStatus VARCHAR2(50);
|
||||||
|
vWfKey NUMBER;
|
||||||
|
BEGIN
|
||||||
|
FETCH vRefCursor INTO vFileName, vStatus, vWfKey;
|
||||||
|
EXIT WHEN vRefCursor%NOTFOUND;
|
||||||
|
vPrinted := vPrinted + 1;
|
||||||
|
IF vPrinted <= cMaxPrint THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ' || vFileName ||
|
||||||
|
' status=' || vStatus ||
|
||||||
|
' wf_key=' || NVL(TO_CHAR(vWfKey), 'NULL'));
|
||||||
|
ELSIF vPrinted = cMaxPrint + 1 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ... and ' || (vOnlyInDB - cMaxPrint) || ' more');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END LOOP;
|
||||||
|
CLOSE vRefCursor;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF vInBothNoKey > 0 THEN
|
||||||
|
vConfigsWithIssues := vConfigsWithIssues + 1;
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' [D] Files in both but A_WORKFLOW_HISTORY_KEY still NULL:');
|
||||||
|
vPrinted := 0;
|
||||||
|
OPEN vRefCursor FOR
|
||||||
|
'SELECT sfr.SOURCE_FILE_NAME, sfr.PROCESSING_STATUS ' ||
|
||||||
|
'FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr ' ||
|
||||||
|
'WHERE sfr.A_SOURCE_FILE_CONFIG_KEY = :1 ' ||
|
||||||
|
' 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) ' ||
|
||||||
|
'ORDER BY sfr.SOURCE_FILE_NAME'
|
||||||
|
USING config_rec.A_SOURCE_FILE_CONFIG_KEY;
|
||||||
|
LOOP
|
||||||
|
DECLARE
|
||||||
|
vStatus VARCHAR2(50);
|
||||||
|
BEGIN
|
||||||
|
FETCH vRefCursor INTO vFileName, vStatus;
|
||||||
|
EXIT WHEN vRefCursor%NOTFOUND;
|
||||||
|
vPrinted := vPrinted + 1;
|
||||||
|
IF vPrinted <= cMaxPrint THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ' || vFileName || ' status=' || vStatus);
|
||||||
|
ELSIF vPrinted = cMaxPrint + 1 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ... and ' || (vInBothNoKey - cMaxPrint) || ' more');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END LOOP;
|
||||||
|
CLOSE vRefCursor;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
|
||||||
|
-- Accumulate totals
|
||||||
|
vTotalOnlyInBucket := vTotalOnlyInBucket + vOnlyInBucket;
|
||||||
|
vTotalOnlyInDB := vTotalOnlyInDB + vOnlyInDB;
|
||||||
|
vTotalInBothWithKey := vTotalInBothWithKey + vInBothWithKey;
|
||||||
|
vTotalInBothNoKey := vTotalInBothNoKey + vInBothNoKey;
|
||||||
|
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('============================================================================');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Grand Summary:');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Configs with data checked: ' || vConfigsChecked);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Configs with issues (B or D): ' || vConfigsWithIssues);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' [A] Files in bucket, not registered: ' || vTotalOnlyInBucket);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' [B] Registered, not in bucket: ' || vTotalOnlyInDB);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' [C] In both - A_WORKFLOW_HISTORY_KEY set: ' || vTotalInBothWithKey);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' [D] In both - A_WORKFLOW_HISTORY_KEY NULL: ' || vTotalInBothNoKey);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('============================================================================');
|
||||||
|
|
||||||
|
IF vTotalOnlyInDB > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING [B]: ' || vTotalOnlyInDB || ' registered file(s) not found in ODS bucket.');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' These may have been moved to ARCHIVE or deleted from ODS.');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF vTotalInBothNoKey > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING [D]: ' || vTotalInBothNoKey || ' file(s) present in both but A_WORKFLOW_HISTORY_KEY is still NULL.');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ODS table rows for these files may have A_WORKFLOW_HISTORY_KEY = NULL.');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Re-run step 09 after the ODS rows are populated by the pipeline.');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF vConfigsWithIssues = 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('OK: No issues found. All registered files in ODS have A_WORKFLOW_HISTORY_KEY assigned.');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
IF vRefCursor%ISOPEN THEN
|
||||||
|
CLOSE vRefCursor;
|
||||||
|
END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: ' || SQLERRM);
|
||||||
|
RAISE;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT Diagnosis complete.
|
||||||
|
PROMPT
|
||||||
127
MARS_Packages/REL02_POST/MARS-1409/install_mars1409.sql
Normal file
127
MARS_Packages/REL02_POST/MARS-1409/install_mars1409.sql
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Master Installation Script
|
||||||
|
-- ============================================================================
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Purpose: Add A_WORKFLOW_HISTORY_KEY column to A_SOURCE_FILE_RECEIVED table
|
||||||
|
-- Target Schema: CT_MRDS
|
||||||
|
-- Estimated Time: 1-2 minutes
|
||||||
|
-- Prerequisites: FILE_MANAGER v3.x, ENV_MANAGER v3.x, ADMIN privileges
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
SET VERIFY OFF
|
||||||
|
SET FEEDBACK ON
|
||||||
|
SET ECHO OFF
|
||||||
|
|
||||||
|
-- Create log directory if it doesn't exist
|
||||||
|
host mkdir log 2>nul
|
||||||
|
|
||||||
|
-- Generate dynamic SPOOL filename with timestamp
|
||||||
|
var filename VARCHAR2(100)
|
||||||
|
BEGIN
|
||||||
|
:filename := 'log/INSTALL_MARS_1409_' || SYS_CONTEXT('USERENV', 'CON_NAME') || '_' || TO_CHAR(SYSDATE,'YYYYMMDD_HH24MISS') || '.log';
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
column filename new_value _filename
|
||||||
|
select :filename filename from dual;
|
||||||
|
spool &_filename
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT MARS-1409 Installation Starting
|
||||||
|
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: 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 ============================================================================
|
||||||
|
|
||||||
|
-- Confirm installation with user
|
||||||
|
ACCEPT continue CHAR PROMPT 'Type YES to continue with installation, or Ctrl+C to abort: '
|
||||||
|
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||||
|
BEGIN
|
||||||
|
IF '&continue' IS NULL OR TRIM('&continue') IS NULL OR UPPER(TRIM('&continue')) != 'YES' THEN
|
||||||
|
RAISE_APPLICATION_ERROR(-20000, 'Installation aborted by user');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 1: Add A_WORKFLOW_HISTORY_KEY column to A_SOURCE_FILE_RECEIVED
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@01_MARS_1409_add_workflow_history_key_column.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 2: Update ENV_MANAGER package specification
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@02_MARS_1409_install_CT_MRDS_ENV_MANAGER_SPEC.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 3: Update ENV_MANAGER package body
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@03_MARS_1409_install_CT_MRDS_ENV_MANAGER_BODY.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 4: Update FILE_MANAGER package specification
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@04_MARS_1409_install_CT_MRDS_FILE_MANAGER_SPEC.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
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
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT MARS-1409 Installation Complete
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT Final Status:
|
||||||
|
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS install_end FROM DUAL;
|
||||||
|
PROMPT
|
||||||
|
PROMPT Review the log file for detailed results: &_filename
|
||||||
|
PROMPT ============================================================================
|
||||||
|
|
||||||
|
spool off
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
-- ====================================================================
|
||||||
|
-- A_SOURCE_FILE_RECEIVED Table
|
||||||
|
-- ====================================================================
|
||||||
|
-- Purpose: Track received files and their processing status
|
||||||
|
-- ====================================================================
|
||||||
|
|
||||||
|
CREATE TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED (
|
||||||
|
A_SOURCE_FILE_RECEIVED_KEY NUMBER(38,0) NOT NULL ENABLE,
|
||||||
|
A_SOURCE_FILE_CONFIG_KEY NUMBER(38,0) NOT NULL ENABLE,
|
||||||
|
SOURCE_FILE_NAME VARCHAR2(1000) NOT NULL,
|
||||||
|
CHECKSUM VARCHAR2(128),
|
||||||
|
CREATED TIMESTAMP(6) WITH TIME ZONE,
|
||||||
|
BYTES NUMBER,
|
||||||
|
RECEPTION_DATE DATE NOT NULL,
|
||||||
|
PROCESSING_STATUS VARCHAR2(200),
|
||||||
|
EXTERNAL_TABLE_NAME VARCHAR2(200),
|
||||||
|
PARTITION_YEAR VARCHAR2(4),
|
||||||
|
PARTITION_MONTH VARCHAR2(2),
|
||||||
|
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', '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)
|
||||||
|
CREATE UNIQUE INDEX CT_MRDS.A_SOURCE_FILE_RECEIVED_UK1
|
||||||
|
ON CT_MRDS.A_SOURCE_FILE_RECEIVED(CHECKSUM, CREATED, BYTES);
|
||||||
|
|
||||||
|
-- Column comments
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY IS
|
||||||
|
'Primary key - unique identifier for received file record';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_CONFIG_KEY IS
|
||||||
|
'Foreign key to A_SOURCE_FILE_CONFIG - links file to its configuration and processing rules';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.SOURCE_FILE_NAME IS
|
||||||
|
'Full object name/path of the received file in OCI Object Storage (includes INBOX prefix)';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.CHECKSUM IS
|
||||||
|
'MD5 checksum of file content for integrity verification and duplicate detection';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.CREATED IS
|
||||||
|
'Timestamp with timezone when file was created/uploaded to Object Storage (from DBMS_CLOUD.LIST_OBJECTS)';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.BYTES IS
|
||||||
|
'File size in bytes';
|
||||||
|
|
||||||
|
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 (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)';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PARTITION_YEAR IS
|
||||||
|
'Year partition value (YYYY format) when file was archived to ARCHIVE bucket with Hive-style partitioning';
|
||||||
|
|
||||||
|
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_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;
|
||||||
1173
MARS_Packages/REL02_POST/MARS-1409/new_version/ENV_MANAGER.pkb
Normal file
1173
MARS_Packages/REL02_POST/MARS-1409/new_version/ENV_MANAGER.pkb
Normal file
File diff suppressed because it is too large
Load Diff
638
MARS_Packages/REL02_POST/MARS-1409/new_version/ENV_MANAGER.pkg
Normal file
638
MARS_Packages/REL02_POST/MARS-1409/new_version/ENV_MANAGER.pkg
Normal file
@@ -0,0 +1,638 @@
|
|||||||
|
create or replace PACKAGE CT_MRDS.ENV_MANAGER
|
||||||
|
AUTHID CURRENT_USER
|
||||||
|
AS
|
||||||
|
/**
|
||||||
|
* General comment for package: Please put comments for functions and procedures as shown in below example.
|
||||||
|
* It is a standard.
|
||||||
|
* The structure of comment is used by GET_PACKAGE_DOCUMENTATION function
|
||||||
|
* which returns documentation text for confluence page (to Copy-Paste it).
|
||||||
|
**/
|
||||||
|
|
||||||
|
-- Example comment:
|
||||||
|
/**
|
||||||
|
* @name EX_PROCEDURE_NAME
|
||||||
|
* @desc Procedure description
|
||||||
|
* @example select ENV_MANAGER.EX_PROCEDURE_NAME(pParameter => 129) from dual;
|
||||||
|
* @ex_rslt Example Result
|
||||||
|
**/
|
||||||
|
|
||||||
|
-- Package Version Information (Semantic Versioning: MAJOR.MINOR.PATCH)
|
||||||
|
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) ||
|
||||||
|
'2.1.0 (2025-10-15): Added ANALYZE_VALIDATION_ERRORS function for comprehensive CSV validation analysis' || CHR(13)||CHR(10) ||
|
||||||
|
'2.0.0 (2025-10-01): Added LOG_PROCESS_ERROR procedure with enhanced error diagnostics and stack traces' || CHR(13)||CHR(10) ||
|
||||||
|
'1.5.0 (2025-09-20): Added console logging support with gvConsoleLoggingEnabled configuration' || CHR(13)||CHR(10) ||
|
||||||
|
'1.0.0 (2025-09-01): Initial release with error management and configuration system';
|
||||||
|
|
||||||
|
TYPE Error_Record IS RECORD (
|
||||||
|
code PLS_INTEGER,
|
||||||
|
message VARCHAR2(4000)
|
||||||
|
);
|
||||||
|
|
||||||
|
TYPE tErrorList IS TABLE OF Error_Record INDEX BY PLS_INTEGER;
|
||||||
|
|
||||||
|
Errors tErrorList;
|
||||||
|
|
||||||
|
|
||||||
|
guid VARCHAR2(32);
|
||||||
|
gvEnv VARCHAR2(200);
|
||||||
|
gvUsername VARCHAR2(128);
|
||||||
|
gvOsuser VARCHAR2(128);
|
||||||
|
gvMachine VARCHAR2(64);
|
||||||
|
gvModule VARCHAR2(64);
|
||||||
|
|
||||||
|
gvNameSpace VARCHAR2(200);
|
||||||
|
gvRegion VARCHAR2(200);
|
||||||
|
gvDataBucketName VARCHAR2(200);
|
||||||
|
gvInboxBucketName VARCHAR2(200);
|
||||||
|
gvArchiveBucketName VARCHAR2(200);
|
||||||
|
gvDataBucketUri VARCHAR2(200);
|
||||||
|
gvInboxBucketUri VARCHAR2(200);
|
||||||
|
gvArchiveBucketUri VARCHAR2(200);
|
||||||
|
gvCredentialName VARCHAR2(200);
|
||||||
|
|
||||||
|
-- Overwritten by variable "LoggingEnabled" in A_FILE_MANAGER_CONFIG.CONFIG_VARIABLE table
|
||||||
|
gvLoggingEnabled VARCHAR2(3) := 'ON'; -- 'ON' or 'OFF'
|
||||||
|
|
||||||
|
-- Overwritten by variable "MinLogLevel" in A_FILE_MANAGER_CONFIG.CONFIG_VARIABLE table
|
||||||
|
-- Possible values: DEBUG ,INFO ,WARNING ,ERROR
|
||||||
|
gvMinLogLevel VARCHAR2(10) := 'DEBUG';
|
||||||
|
|
||||||
|
-- Overwritten by variable "DefaultDateFormat" in A_FILE_MANAGER_CONFIG.CONFIG_VARIABLE table
|
||||||
|
gvDefaultDateFormat VARCHAR2(200) := 'DD/MM/YYYY HH24:MI:SS';
|
||||||
|
|
||||||
|
-- Overwritten by variable "ConsoleLoggingEnabled" in A_FILE_MANAGER_CONFIG.CONFIG_VARIABLE table
|
||||||
|
gvConsoleLoggingEnabled VARCHAR2(3) := 'ON'; -- 'ON' or 'OFF'
|
||||||
|
|
||||||
|
cgBL CONSTANT VARCHAR2(2) := CHR(13)||CHR(10);
|
||||||
|
|
||||||
|
vgSourceFileConfigKey PLS_INTEGER;
|
||||||
|
|
||||||
|
vgMsgTmp VARCHAR2(32000);
|
||||||
|
--Exceptions
|
||||||
|
ERR_EMPTY_FILEURI_AND_RECKEY EXCEPTION;
|
||||||
|
CODE_EMPTY_FILEURI_AND_RECKEY CONSTANT PLS_INTEGER := -20001;
|
||||||
|
MSG_EMPTY_FILEURI_AND_RECKEY VARCHAR2(4000) := 'Either pFileUri or pSourceFileReceivedKey must be not null';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_EMPTY_FILEURI_AND_RECKEY
|
||||||
|
,CODE_EMPTY_FILEURI_AND_RECKEY);
|
||||||
|
|
||||||
|
|
||||||
|
ERR_NO_CONFIG_MATCH_FOR_FILEURI EXCEPTION;
|
||||||
|
CODE_NO_CONFIG_MATCH_FOR_FILEURI CONSTANT PLS_INTEGER := -20002;
|
||||||
|
MSG_NO_CONFIG_MATCH_FOR_FILEURI VARCHAR2(4000) := 'No match for source file in A_SOURCE_FILE_CONFIG table'
|
||||||
|
||cgBL||' The file provided in parameter: pFileUri does not have '
|
||||||
|
||cgBL||' coresponding configuration in A_SOURCE_FILE_CONFIG table';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_NO_CONFIG_MATCH_FOR_FILEURI
|
||||||
|
,CODE_NO_CONFIG_MATCH_FOR_FILEURI);
|
||||||
|
|
||||||
|
ERR_MULTIPLE_MATCH_FOR_SRCFILE EXCEPTION;
|
||||||
|
CODE_MULTIPLE_MATCH_FOR_SRCFILE CONSTANT PLS_INTEGER := -20003;
|
||||||
|
MSG_MULTIPLE_MATCH_FOR_SRCFILE VARCHAR2(4000) := 'Multiple match for source file in A_SOURCE_FILE_CONFIG table';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MULTIPLE_MATCH_FOR_SRCFILE
|
||||||
|
,CODE_MULTIPLE_MATCH_FOR_SRCFILE);
|
||||||
|
|
||||||
|
ERR_MISSING_COLUMN_DATE_FORMAT EXCEPTION;
|
||||||
|
CODE_MISSING_COLUMN_DATE_FORMAT CONSTANT PLS_INTEGER := -20004;
|
||||||
|
MSG_MISSING_COLUMN_DATE_FORMAT VARCHAR2(4000) := 'Missing entry in config table: A_COLUMN_DATE_FORMAT primary key(TEMPLATE_TABLE_NAME, COLUMN_NAME)'
|
||||||
|
||cgBL||' Remember: each column which data_type IN (''DATE'', ''TIMESTAMP'')'
|
||||||
|
||cgBL||' should have DateFormat specified in A_COLUMN_DATE_FORMAT table '
|
||||||
|
||cgBL||' for example: ''YYYY-MM-DD''';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MISSING_COLUMN_DATE_FORMAT
|
||||||
|
,CODE_MISSING_COLUMN_DATE_FORMAT);
|
||||||
|
|
||||||
|
ERR_MULTIPLE_COLUMN_DATE_FORMAT EXCEPTION;
|
||||||
|
CODE_MULTIPLE_COLUMN_DATE_FORMAT CONSTANT PLS_INTEGER := -20005;
|
||||||
|
MSG_MULTIPLE_COLUMN_DATE_FORMAT VARCHAR2(4000) := 'Multiple records for date format in A_COLUMN_DATE_FORMAT table'
|
||||||
|
||cgBL||' There should be only one format specified for each DAT/TIMESTAMP column';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MULTIPLE_COLUMN_DATE_FORMAT
|
||||||
|
,CODE_MULTIPLE_COLUMN_DATE_FORMAT);
|
||||||
|
|
||||||
|
|
||||||
|
ERR_DIDNT_GET_LOAD_OPERATION_ID EXCEPTION;
|
||||||
|
CODE_DIDNT_GET_LOAD_OPERATION_ID CONSTANT PLS_INTEGER := -20006;
|
||||||
|
MSG_DIDNT_GET_LOAD_OPERATION_ID VARCHAR2(4000) := 'Didnt get load operation id from external table validation';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_DIDNT_GET_LOAD_OPERATION_ID
|
||||||
|
,CODE_DIDNT_GET_LOAD_OPERATION_ID);
|
||||||
|
|
||||||
|
ERR_NO_CONFIG_FOR_RECEIVED_FILE EXCEPTION;
|
||||||
|
CODE_NO_CONFIG_FOR_RECEIVED_FILE CONSTANT PLS_INTEGER := -20007;
|
||||||
|
MSG_NO_CONFIG_FOR_RECEIVED_FILE VARCHAR2(4000) := 'No match for received source file in A_SOURCE_FILE_CONFIG '
|
||||||
|
||cgBL||' or missing data in A_SOURCE_FILE_RECEIVED table for provided pSourceFileReceivedKey parameter';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_NO_CONFIG_FOR_RECEIVED_FILE
|
||||||
|
,CODE_NO_CONFIG_FOR_RECEIVED_FILE);
|
||||||
|
|
||||||
|
ERR_MULTI_CONFIG_FOR_RECEIVED_FILE EXCEPTION;
|
||||||
|
CODE_MULTI_CONFIG_FOR_RECEIVED_FILE CONSTANT PLS_INTEGER := -20008;
|
||||||
|
MSG_MULTI_CONFIG_FOR_RECEIVED_FILE VARCHAR2(4000) := 'Multiple matchs for received source file in A_SOURCE_FILE_CONFIG';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MULTI_CONFIG_FOR_RECEIVED_FILE
|
||||||
|
,CODE_MULTI_CONFIG_FOR_RECEIVED_FILE);
|
||||||
|
|
||||||
|
ERR_FILE_NOT_FOUND_ON_CLOUD EXCEPTION;
|
||||||
|
CODE_FILE_NOT_FOUND_ON_CLOUD CONSTANT PLS_INTEGER := -20009;
|
||||||
|
MSG_FILE_NOT_FOUND_ON_CLOUD VARCHAR2(4000) := 'File not found on the cloud';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_FILE_NOT_FOUND_ON_CLOUD
|
||||||
|
,CODE_FILE_NOT_FOUND_ON_CLOUD);
|
||||||
|
|
||||||
|
ERR_FILE_VALIDATION_FAILED EXCEPTION;
|
||||||
|
CODE_FILE_VALIDATION_FAILED CONSTANT PLS_INTEGER := -20010;
|
||||||
|
MSG_FILE_VALIDATION_FAILED VARCHAR2(4000) := 'File validation failed';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_FILE_VALIDATION_FAILED
|
||||||
|
,CODE_FILE_VALIDATION_FAILED);
|
||||||
|
|
||||||
|
ERR_EXCESS_COLUMNS_DETECTED EXCEPTION;
|
||||||
|
CODE_EXCESS_COLUMNS_DETECTED CONSTANT PLS_INTEGER := -20011;
|
||||||
|
MSG_EXCESS_COLUMNS_DETECTED VARCHAR2(4000) := 'CSV file contains more columns than template allows';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_EXCESS_COLUMNS_DETECTED
|
||||||
|
,CODE_EXCESS_COLUMNS_DETECTED);
|
||||||
|
|
||||||
|
ERR_NO_CONFIG_MATCH EXCEPTION;
|
||||||
|
CODE_NO_CONFIG_MATCH CONSTANT PLS_INTEGER := -20012;
|
||||||
|
MSG_NO_CONFIG_MATCH VARCHAR2(4000) := 'No match for specified parameters in A_SOURCE_FILE_CONFIG table';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_NO_CONFIG_MATCH
|
||||||
|
,CODE_NO_CONFIG_MATCH);
|
||||||
|
|
||||||
|
ERR_UNKNOWN_PREFIX EXCEPTION;
|
||||||
|
CODE_UNKNOWN_PREFIX CONSTANT PLS_INTEGER := -20013;
|
||||||
|
MSG_UNKNOWN_PREFIX VARCHAR2(4000) := 'Unknown prefix';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_UNKNOWN_PREFIX
|
||||||
|
,CODE_UNKNOWN_PREFIX);
|
||||||
|
|
||||||
|
ERR_TABLE_NOT_EXISTS EXCEPTION;
|
||||||
|
CODE_TABLE_NOT_EXISTS CONSTANT PLS_INTEGER := -20014;
|
||||||
|
MSG_TABLE_NOT_EXISTS VARCHAR2(4000) := 'Table does not exist';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_TABLE_NOT_EXISTS
|
||||||
|
,CODE_TABLE_NOT_EXISTS);
|
||||||
|
|
||||||
|
ERR_COLUMN_NOT_EXISTS EXCEPTION;
|
||||||
|
CODE_COLUMN_NOT_EXISTS CONSTANT PLS_INTEGER := -20015;
|
||||||
|
MSG_COLUMN_NOT_EXISTS VARCHAR2(4000) := 'Column does not exist in table';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_COLUMN_NOT_EXISTS
|
||||||
|
,CODE_COLUMN_NOT_EXISTS);
|
||||||
|
|
||||||
|
ERR_UNSUPPORTED_DATA_TYPE EXCEPTION;
|
||||||
|
CODE_UNSUPPORTED_DATA_TYPE CONSTANT PLS_INTEGER := -20016;
|
||||||
|
MSG_UNSUPPORTED_DATA_TYPE VARCHAR2(4000) := 'Unsupported data type';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_UNSUPPORTED_DATA_TYPE
|
||||||
|
,CODE_UNSUPPORTED_DATA_TYPE);
|
||||||
|
|
||||||
|
ERR_MISSING_SOURCE_KEY EXCEPTION;
|
||||||
|
CODE_MISSING_SOURCE_KEY CONSTANT PLS_INTEGER := -20017;
|
||||||
|
MSG_MISSING_SOURCE_KEY VARCHAR2(4000) := 'The Source was not found in parent table A_SOURCE';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MISSING_SOURCE_KEY
|
||||||
|
,CODE_MISSING_SOURCE_KEY);
|
||||||
|
|
||||||
|
ERR_NULL_SOURCE_FILE_CONFIG_KEY EXCEPTION;
|
||||||
|
CODE_NULL_SOURCE_FILE_CONFIG_KEY CONSTANT PLS_INTEGER := -20018;
|
||||||
|
MSG_NULL_SOURCE_FILE_CONFIG_KEY VARCHAR2(4000) := 'No entry in A_SOURCE_FILE_CONFIG table for specified A_SOURCE_FILE_CONFIG_KEY';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_NULL_SOURCE_FILE_CONFIG_KEY
|
||||||
|
,CODE_NULL_SOURCE_FILE_CONFIG_KEY);
|
||||||
|
|
||||||
|
ERR_DUPLICATED_SOURCE_KEY EXCEPTION;
|
||||||
|
CODE_DUPLICATED_SOURCE_KEY CONSTANT PLS_INTEGER := -20019;
|
||||||
|
MSG_DUPLICATED_SOURCE_KEY VARCHAR2(4000) := 'The Source already exists in the A_SOURCE table';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_DUPLICATED_SOURCE_KEY
|
||||||
|
,CODE_DUPLICATED_SOURCE_KEY);
|
||||||
|
|
||||||
|
ERR_MISSING_CONTAINER_CONFIG EXCEPTION;
|
||||||
|
CODE_MISSING_CONTAINER_CONFIG CONSTANT PLS_INTEGER := -20020;
|
||||||
|
MSG_MISSING_CONTAINER_CONFIG VARCHAR2(4000) := 'No match in A_SOURCE_FILE_CONFIG table where SOURCE_FILE_TYPE=''CONTAINER'' and specified SOURCE_FILE_ID';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MISSING_CONTAINER_CONFIG
|
||||||
|
,CODE_MISSING_CONTAINER_CONFIG);
|
||||||
|
|
||||||
|
ERR_MULTIPLE_CONTAINER_ENTRIES EXCEPTION;
|
||||||
|
CODE_MULTIPLE_CONTAINER_ENTRIES CONSTANT PLS_INTEGER := -20021;
|
||||||
|
MSG_MULTIPLE_CONTAINER_ENTRIES VARCHAR2(4000) := 'Multiple matches in A_SOURCE_FILE_CONFIG table where SOURCE_FILE_TYPE=''CONTAINER'' and specified SOURCE_FILE_ID';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MULTIPLE_CONTAINER_ENTRIES
|
||||||
|
,CODE_MULTIPLE_CONTAINER_ENTRIES);
|
||||||
|
|
||||||
|
ERR_WRONG_DESTINATION_PARAM EXCEPTION;
|
||||||
|
CODE_WRONG_DESTINATION_PARAM CONSTANT PLS_INTEGER := -20022;
|
||||||
|
MSG_WRONG_DESTINATION_PARAM VARCHAR2(4000) := 'Wrong destination parameter provided.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_WRONG_DESTINATION_PARAM
|
||||||
|
,CODE_WRONG_DESTINATION_PARAM);
|
||||||
|
|
||||||
|
ERR_FILE_NOT_EXISTS_ON_CLOUD EXCEPTION;
|
||||||
|
CODE_FILE_NOT_EXISTS_ON_CLOUD CONSTANT PLS_INTEGER := -20023;
|
||||||
|
MSG_FILE_NOT_EXISTS_ON_CLOUD VARCHAR2(4000) := 'File not exists on cloud.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_FILE_NOT_EXISTS_ON_CLOUD
|
||||||
|
,CODE_FILE_NOT_EXISTS_ON_CLOUD);
|
||||||
|
|
||||||
|
ERR_FILE_ALREADY_REGISTERED EXCEPTION;
|
||||||
|
CODE_FILE_ALREADY_REGISTERED CONSTANT PLS_INTEGER := -20024;
|
||||||
|
MSG_FILE_ALREADY_REGISTERED VARCHAR2(4000) := 'File already registered in A_SOURCE_FILE_RECEIVED table.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_FILE_ALREADY_REGISTERED
|
||||||
|
,CODE_FILE_ALREADY_REGISTERED);
|
||||||
|
|
||||||
|
ERR_WRONG_DATE_TIMESTAMP_FORMAT EXCEPTION;
|
||||||
|
CODE_WRONG_DATE_TIMESTAMP_FORMAT CONSTANT PLS_INTEGER := -20025;
|
||||||
|
MSG_WRONG_DATE_TIMESTAMP_FORMAT VARCHAR2(4000) := 'Provided DATE or TIMESTAMP format has errors (possible duplicated codes, ex: ''DD'').';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_WRONG_DATE_TIMESTAMP_FORMAT
|
||||||
|
,CODE_WRONG_DATE_TIMESTAMP_FORMAT);
|
||||||
|
|
||||||
|
ERR_ENVIRONMENT_NOT_SET EXCEPTION;
|
||||||
|
CODE_ENVIRONMENT_NOT_SET CONSTANT PLS_INTEGER := -20026;
|
||||||
|
MSG_ENVIRONMENT_NOT_SET VARCHAR2(4000) := 'EnvironmentID not set'
|
||||||
|
||cgBL||' Information about environment is needed to get proper configuration values.'
|
||||||
|
||cgBL||' It can be set up in two different ways:'
|
||||||
|
||cgBL||' 1. Set it on session level: execute DBMS_SESSION.SET_IDENTIFIER (client_id => ''dev'')'
|
||||||
|
||cgBL||' 2. Set it on configuration level: Insert into CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID,CONFIG_VARIABLE,CONFIG_VARIABLE_VALUE) values (''default'',''environment_id'',''dev'')'
|
||||||
|
||cgBL||' Session level setup (1.) takes precedence over configuration level one (2.)'
|
||||||
|
;
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_ENVIRONMENT_NOT_SET
|
||||||
|
,CODE_ENVIRONMENT_NOT_SET);
|
||||||
|
|
||||||
|
|
||||||
|
ERR_CONFIG_VARIABLE_NOT_SET EXCEPTION;
|
||||||
|
CODE_CONFIG_VARIABLE_NOT_SET CONSTANT PLS_INTEGER := -20027;
|
||||||
|
MSG_CONFIG_VARIABLE_NOT_SET VARCHAR2(4000) := 'Missing configuration value in A_FILE_MANAGER_CONFIG';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_CONFIG_VARIABLE_NOT_SET
|
||||||
|
,CODE_CONFIG_VARIABLE_NOT_SET);
|
||||||
|
|
||||||
|
ERR_NOT_INPUT_SOURCE_FILE_TYPE EXCEPTION;
|
||||||
|
CODE_NOT_INPUT_SOURCE_FILE_TYPE CONSTANT PLS_INTEGER := -20028;
|
||||||
|
MSG_NOT_INPUT_SOURCE_FILE_TYPE VARCHAR2(4000) := 'Archival can be executed only for A_SOURCE_FILE_CONFIG_KEY where SOURCE_FILE_TYPE=''INPUT''';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_NOT_INPUT_SOURCE_FILE_TYPE
|
||||||
|
,CODE_NOT_INPUT_SOURCE_FILE_TYPE);
|
||||||
|
|
||||||
|
ERR_EXP_DATA_FOR_ARCH_FAILED EXCEPTION;
|
||||||
|
CODE_EXP_DATA_FOR_ARCH_FAILED CONSTANT PLS_INTEGER := -20029;
|
||||||
|
MSG_EXP_DATA_FOR_ARCH_FAILED VARCHAR2(4000) := 'Export data for archival failed.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_EXP_DATA_FOR_ARCH_FAILED
|
||||||
|
,CODE_EXP_DATA_FOR_ARCH_FAILED);
|
||||||
|
|
||||||
|
ERR_RESTORE_FILE_FROM_TRASH EXCEPTION;
|
||||||
|
CODE_RESTORE_FILE_FROM_TRASH CONSTANT PLS_INTEGER := -20030;
|
||||||
|
MSG_RESTORE_FILE_FROM_TRASH VARCHAR2(4000) := 'Unexpected issues occured while archival process. Restoration of exported files failed.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_RESTORE_FILE_FROM_TRASH
|
||||||
|
,CODE_RESTORE_FILE_FROM_TRASH);
|
||||||
|
|
||||||
|
ERR_CHANGE_STAT_TO_ARCHIVED_FAILED EXCEPTION;
|
||||||
|
CODE_CHANGE_STAT_TO_ARCHIVED_FAILED CONSTANT PLS_INTEGER := -20031;
|
||||||
|
MSG_CHANGE_STAT_TO_ARCHIVED_FAILED VARCHAR2(4000) := 'Failed to change file status to: ARCHIVED in A_SOURCE_FILE_RECEIVED table.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_CHANGE_STAT_TO_ARCHIVED_FAILED
|
||||||
|
,CODE_CHANGE_STAT_TO_ARCHIVED_FAILED);
|
||||||
|
|
||||||
|
ERR_MOVE_FILE_TO_TRASH_FAILED EXCEPTION;
|
||||||
|
CODE_MOVE_FILE_TO_TRASH_FAILED CONSTANT PLS_INTEGER := -20032;
|
||||||
|
MSG_MOVE_FILE_TO_TRASH_FAILED VARCHAR2(4000) := 'FAILED to move file to TRASH before DROPPING it.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MOVE_FILE_TO_TRASH_FAILED
|
||||||
|
,CODE_MOVE_FILE_TO_TRASH_FAILED);
|
||||||
|
|
||||||
|
ERR_DROP_EXPORTED_FILES_FAILED EXCEPTION;
|
||||||
|
CODE_DROP_EXPORTED_FILES_FAILED CONSTANT PLS_INTEGER := -20033;
|
||||||
|
MSG_DROP_EXPORTED_FILES_FAILED VARCHAR2(4000) := 'FAILED to move file to TRASH before DROPPING it.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_DROP_EXPORTED_FILES_FAILED
|
||||||
|
,CODE_DROP_EXPORTED_FILES_FAILED);
|
||||||
|
|
||||||
|
ERR_INVALID_BUCKET_AREA EXCEPTION;
|
||||||
|
CODE_INVALID_BUCKET_AREA CONSTANT PLS_INTEGER := -20034;
|
||||||
|
MSG_INVALID_BUCKET_AREA VARCHAR2(4000) := 'Invalid bucket area specified. Valid values: INBOX, ODS, DATA, ARCHIVE';
|
||||||
|
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';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_INVALID_PARALLEL_DEGREE
|
||||||
|
,CODE_INVALID_PARALLEL_DEGREE);
|
||||||
|
|
||||||
|
ERR_PARALLEL_EXECUTION_FAILED EXCEPTION;
|
||||||
|
CODE_PARALLEL_EXECUTION_FAILED CONSTANT PLS_INTEGER := -20111;
|
||||||
|
MSG_PARALLEL_EXECUTION_FAILED VARCHAR2(4000) := 'Parallel execution failed';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_PARALLEL_EXECUTION_FAILED
|
||||||
|
,CODE_PARALLEL_EXECUTION_FAILED);
|
||||||
|
|
||||||
|
ERR_UNKNOWN EXCEPTION;
|
||||||
|
CODE_UNKNOWN CONSTANT PLS_INTEGER := -20999;
|
||||||
|
MSG_UNKNOWN VARCHAR2(4000) := 'Unknown Error Occured';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_UNKNOWN
|
||||||
|
,CODE_UNKNOWN);
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name LOG_PROCESS_EVENT
|
||||||
|
* @desc Insert a new log record into A_PROCESS_LOG table.
|
||||||
|
* Also outputs to console if gvConsoleLoggingEnabled = 'ON'.
|
||||||
|
* Respects logging level configuration (gvMinLogLevel).
|
||||||
|
* @example ENV_MANAGER.LOG_PROCESS_EVENT('Process completed successfully', 'INFO', 'pParam1=value1');
|
||||||
|
* @ex_rslt Record inserted into A_PROCESS_LOG table and optionally displayed in console output
|
||||||
|
**/
|
||||||
|
PROCEDURE LOG_PROCESS_EVENT (
|
||||||
|
pLogMessage VARCHAR2
|
||||||
|
,pLogLevel VARCHAR2 DEFAULT 'ERROR'
|
||||||
|
,pParameters VARCHAR2 DEFAULT NULL
|
||||||
|
,pProcessName VARCHAR2 DEFAULT 'FILE_MANAGER'
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name LOG_PROCESS_ERROR
|
||||||
|
* @desc Insert a detailed error record into A_PROCESS_LOG table with full stack trace, backtrace, and call stack.
|
||||||
|
* This procedure captures comprehensive error information for debugging purposes while
|
||||||
|
* allowing clean user-facing error messages to be raised separately.
|
||||||
|
* @param pLogMessage - Base error message description
|
||||||
|
* @param pParameters - Procedure parameters for context
|
||||||
|
* @param pProcessName - Name of the calling process/package
|
||||||
|
* @ex_rslt Record inserted into A_PROCESS_LOG table with complete error stack information
|
||||||
|
*/
|
||||||
|
PROCEDURE LOG_PROCESS_ERROR (
|
||||||
|
pLogMessage VARCHAR2
|
||||||
|
,pParameters VARCHAR2 DEFAULT NULL
|
||||||
|
,pProcessName VARCHAR2 DEFAULT 'FILE_MANAGER'
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name INIT_ERRORS
|
||||||
|
* @desc Loads data into Errors array.
|
||||||
|
* Errors array is a list of Record(Error_Code, Error_Message) index by Error_Code.
|
||||||
|
* Called automatically during package initialization.
|
||||||
|
* @example Called automatically when package is first referenced
|
||||||
|
* @ex_rslt Errors array populated with all error codes and messages
|
||||||
|
**/
|
||||||
|
PROCEDURE INIT_ERRORS;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_DEFAULT_ENV
|
||||||
|
* @desc It returns string with name of default environment.
|
||||||
|
* Return string is A_FILE_MANAGER_CONFIG.ENVIRONMENT_ID value.
|
||||||
|
* @example select ENV_MANAGER.GET_DEFAULT_ENV() from dual;
|
||||||
|
* @ex_rslt dev
|
||||||
|
**/
|
||||||
|
FUNCTION GET_DEFAULT_ENV
|
||||||
|
RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name INIT_VARIABLES
|
||||||
|
* @desc For specified pEnv parameter (A_FILE_MANAGER_CONFIG.ENVIRONMENT_ID)
|
||||||
|
* Assign values to following global package variables:
|
||||||
|
* - gvNameSpace
|
||||||
|
* - gvRegion
|
||||||
|
* - gvCredentialName
|
||||||
|
* - gvInboxBucketName
|
||||||
|
* - gvDataBucketName
|
||||||
|
* - gvArchiveBucketName
|
||||||
|
* - gvInboxBucketUri
|
||||||
|
* - gvDataBucketUri
|
||||||
|
* - gvArchiveBucketUri
|
||||||
|
* - gvLoggingEnabled
|
||||||
|
* - gvMinLogLevel
|
||||||
|
* - gvDefaultDateFormat
|
||||||
|
* - gvConsoleLoggingEnabled
|
||||||
|
**/
|
||||||
|
PROCEDURE INIT_VARIABLES(
|
||||||
|
pEnv VARCHAR2
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_ERROR_MESSAGE
|
||||||
|
* @desc It returns string with error message for specified pCode (Error_Code).
|
||||||
|
* Error message is take from Errors Array loaded by INIT_ERRORS procedure
|
||||||
|
* @example select ENV_MANAGER.GET_ERROR_MESSAGE(pCode => -20009) from dual;
|
||||||
|
* @ex_rslt File not found on the cloud
|
||||||
|
**/
|
||||||
|
FUNCTION GET_ERROR_MESSAGE(
|
||||||
|
pCode PLS_INTEGER
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_ERROR_STACK
|
||||||
|
* @desc It returns string with all possible error stack info.
|
||||||
|
* Error message is take from Errors Array loaded by INIT_ERRORS procedure
|
||||||
|
* @example
|
||||||
|
* select ENV_MANAGER.GET_ERROR_STACK(
|
||||||
|
* pFormat => 'OUTPUT'
|
||||||
|
* ,pCode => -20009
|
||||||
|
* ,pSourceFileReceivedKey => NULL)
|
||||||
|
* from dual
|
||||||
|
* @ex_rslt
|
||||||
|
* ------------------------------------------------------+
|
||||||
|
* Error Message:
|
||||||
|
* ORA-0000: normal, successful completion
|
||||||
|
* -------------------------------------------------------
|
||||||
|
* Error Stack:
|
||||||
|
* -------------------------------------------------------
|
||||||
|
* Error Backtrace:
|
||||||
|
* ------------------------------------------------------+
|
||||||
|
**/
|
||||||
|
FUNCTION GET_ERROR_STACK(
|
||||||
|
pFormat VARCHAR2
|
||||||
|
,pCode PLS_INTEGER
|
||||||
|
,pSourceFileReceivedKey CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY%TYPE DEFAULT NULL
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name FORMAT_PARAMETERS
|
||||||
|
* @desc Formats parameter list for logging purposes.
|
||||||
|
* Converts SYS.ODCIVARCHAR2LIST to formatted string with proper NULL handling.
|
||||||
|
* @example select ENV_MANAGER.FORMAT_PARAMETERS(SYS.ODCIVARCHAR2LIST('param1=value1', 'param2=NULL')) from dual;
|
||||||
|
* @ex_rslt param1=value1 ,
|
||||||
|
* param2=NULL
|
||||||
|
**/
|
||||||
|
FUNCTION FORMAT_PARAMETERS(
|
||||||
|
pParameterList SYS.ODCIVARCHAR2LIST
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name ANALYZE_VALIDATION_ERRORS
|
||||||
|
* @desc Analyzes CSV validation errors and generates detailed diagnostic report.
|
||||||
|
* Compares CSV structure with template table and provides specific error analysis.
|
||||||
|
* Includes suggested solutions for common validation issues.
|
||||||
|
* @param pValidationLogTable - Name of validation log table (e.g., VALIDATE$242_LOG)
|
||||||
|
* @param pTemplateSchema - Schema of template table (e.g., CT_ET_TEMPLATES)
|
||||||
|
* @param pTemplateTable - Name of template table (e.g., MOCK_PROC_TABLE)
|
||||||
|
* @param pCsvFileUri - URI of CSV file being validated
|
||||||
|
* @example SELECT ENV_MANAGER.ANALYZE_VALIDATION_ERRORS('VALIDATE$242_LOG', 'CT_ET_TEMPLATES', 'MOCK_PROC_TABLE', 'https://...') FROM DUAL;
|
||||||
|
* @ex_rslt Detailed validation analysis report with column mismatches and solutions
|
||||||
|
**/
|
||||||
|
FUNCTION ANALYZE_VALIDATION_ERRORS(
|
||||||
|
pValidationLogTable VARCHAR2,
|
||||||
|
pTemplateSchema VARCHAR2,
|
||||||
|
pTemplateTable VARCHAR2,
|
||||||
|
pCsvFileUri VARCHAR2
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
-- PACKAGE VERSION MANAGEMENT FUNCTIONS
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_VERSION
|
||||||
|
* @desc Returns the current version number of the ENV_MANAGER package.
|
||||||
|
* Uses semantic versioning format (MAJOR.MINOR.PATCH).
|
||||||
|
* @example SELECT ENV_MANAGER.GET_VERSION() FROM DUAL;
|
||||||
|
* @ex_rslt 3.0.0
|
||||||
|
**/
|
||||||
|
FUNCTION GET_VERSION RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_BUILD_INFO
|
||||||
|
* @desc Returns comprehensive build information including version, build date, and author.
|
||||||
|
* Formatted for display in logs or monitoring systems.
|
||||||
|
* @example SELECT ENV_MANAGER.GET_BUILD_INFO() FROM DUAL;
|
||||||
|
* @ex_rslt Package: ENV_MANAGER
|
||||||
|
* Version: 3.0.0
|
||||||
|
* Build Date: 2025-10-22 16: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.
|
||||||
|
* Shows evolution of package features over time.
|
||||||
|
* @example SELECT ENV_MANAGER.GET_VERSION_HISTORY() FROM DUAL;
|
||||||
|
* @ex_rslt ENV_MANAGER Version History:
|
||||||
|
* 3.0.0 (2025-10-22): Added package versioning system...
|
||||||
|
* 2.1.0 (2025-10-15): Added ANALYZE_VALIDATION_ERRORS function...
|
||||||
|
**/
|
||||||
|
FUNCTION GET_VERSION_HISTORY RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_PACKAGE_VERSION_INFO
|
||||||
|
* @desc Universal function to get formatted version information for any package.
|
||||||
|
* This centralized function is used by all packages in the system.
|
||||||
|
* @param pPackageName - Name of the package
|
||||||
|
* @param pVersion - Version string (MAJOR.MINOR.PATCH format)
|
||||||
|
* @param pBuildDate - Build date timestamp
|
||||||
|
* @param pAuthor - Package author name
|
||||||
|
* @example SELECT ENV_MANAGER.GET_PACKAGE_VERSION_INFO('FILE_MANAGER', '2.1.0', '2025-10-22 15:00:00', 'Grzegorz Michalski') FROM DUAL;
|
||||||
|
* @ex_rslt Package: FILE_MANAGER
|
||||||
|
* Version: 2.1.0
|
||||||
|
* Build Date: 2025-10-22 15:00:00
|
||||||
|
* Author: Grzegorz Michalski
|
||||||
|
**/
|
||||||
|
FUNCTION GET_PACKAGE_VERSION_INFO(
|
||||||
|
pPackageName VARCHAR2,
|
||||||
|
pVersion VARCHAR2,
|
||||||
|
pBuildDate VARCHAR2,
|
||||||
|
pAuthor VARCHAR2
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name FORMAT_VERSION_HISTORY
|
||||||
|
* @desc Universal function to format version history for any package.
|
||||||
|
* Adds package name header and proper formatting.
|
||||||
|
* @param pPackageName - Name of the package
|
||||||
|
* @param pVersionHistory - Complete version history text
|
||||||
|
* @example SELECT ENV_MANAGER.FORMAT_VERSION_HISTORY('FILE_MANAGER', '2.1.0 (2025-10-22): Export procedures...') FROM DUAL;
|
||||||
|
* @ex_rslt FILE_MANAGER Version History:
|
||||||
|
* 2.1.0 (2025-10-22): Export procedures...
|
||||||
|
**/
|
||||||
|
FUNCTION FORMAT_VERSION_HISTORY(
|
||||||
|
pPackageName VARCHAR2,
|
||||||
|
pVersionHistory VARCHAR2
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
-- PACKAGE HASH + CHANGE DETECTION FUNCTIONS
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name CALCULATE_PACKAGE_HASH
|
||||||
|
* @desc Calculates SHA256 hash of package source code from ALL_SOURCE.
|
||||||
|
* Returns hash for both SPEC and BODY (if exists).
|
||||||
|
* Used for automatic change detection.
|
||||||
|
* @param pPackageOwner - Schema owner of the package
|
||||||
|
* @param pPackageName - Name of the package
|
||||||
|
* @param pPackageType - Type of package code ('PACKAGE' for SPEC, 'PACKAGE BODY' for BODY)
|
||||||
|
* @example SELECT ENV_MANAGER.CALCULATE_PACKAGE_HASH('CT_MRDS', 'FILE_MANAGER', 'PACKAGE') FROM DUAL;
|
||||||
|
* @ex_rslt A7B3C5D9E8F1234567890ABCDEF... (64-character SHA256 hash)
|
||||||
|
**/
|
||||||
|
FUNCTION CALCULATE_PACKAGE_HASH(
|
||||||
|
pPackageOwner VARCHAR2,
|
||||||
|
pPackageName VARCHAR2,
|
||||||
|
pPackageType VARCHAR2 -- 'PACKAGE' or 'PACKAGE BODY'
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name TRACK_PACKAGE_VERSION
|
||||||
|
* @desc Records package version and source code hash in A_PACKAGE_VERSION_TRACKING table.
|
||||||
|
* Automatically detects if source code changed without version update.
|
||||||
|
* Should be called after every package deployment.
|
||||||
|
* @param pPackageOwner - Schema owner of the package
|
||||||
|
* @param pPackageName - Name of the package
|
||||||
|
* @param pPackageVersion - Current version from PACKAGE_VERSION constant
|
||||||
|
* @param pPackageBuildDate - Build date from PACKAGE_BUILD_DATE constant
|
||||||
|
* @param pPackageAuthor - Author from PACKAGE_AUTHOR constant
|
||||||
|
* @example EXEC ENV_MANAGER.TRACK_PACKAGE_VERSION('CT_MRDS', 'FILE_MANAGER', '3.2.0', '2025-10-22 16:30:00', 'Grzegorz Michalski');
|
||||||
|
* @ex_rslt Record inserted into A_PACKAGE_VERSION_TRACKING with change detection status
|
||||||
|
**/
|
||||||
|
PROCEDURE TRACK_PACKAGE_VERSION(
|
||||||
|
pPackageOwner VARCHAR2,
|
||||||
|
pPackageName VARCHAR2,
|
||||||
|
pPackageVersion VARCHAR2,
|
||||||
|
pPackageBuildDate VARCHAR2,
|
||||||
|
pPackageAuthor VARCHAR2
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name CHECK_PACKAGE_CHANGES
|
||||||
|
* @desc Checks if package source code has changed since last tracking.
|
||||||
|
* Compares current hash with last recorded hash in A_PACKAGE_VERSION_TRACKING.
|
||||||
|
* Returns detailed change detection report.
|
||||||
|
* @param pPackageOwner - Schema owner of the package
|
||||||
|
* @param pPackageName - Name of the package
|
||||||
|
* @example SELECT ENV_MANAGER.CHECK_PACKAGE_CHANGES('CT_MRDS', 'FILE_MANAGER') FROM DUAL;
|
||||||
|
* @ex_rslt WARNING: Package changed without version update!
|
||||||
|
* Last Version: 3.2.0
|
||||||
|
* Current Hash (SPEC): A7B3C5D9...
|
||||||
|
* Last Hash (SPEC): B8C4D6E0...
|
||||||
|
* RECOMMENDATION: Update PACKAGE_VERSION and PACKAGE_BUILD_DATE
|
||||||
|
**/
|
||||||
|
FUNCTION CHECK_PACKAGE_CHANGES(
|
||||||
|
pPackageOwner VARCHAR2,
|
||||||
|
pPackageName VARCHAR2
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_PACKAGE_HASH_INFO
|
||||||
|
* @desc Returns formatted information about package hash and tracking history.
|
||||||
|
* Includes current hash, last tracked hash, and change detection status.
|
||||||
|
* @param pPackageOwner - Schema owner of the package
|
||||||
|
* @param pPackageName - Name of the package
|
||||||
|
* @example SELECT ENV_MANAGER.GET_PACKAGE_HASH_INFO('CT_MRDS', 'FILE_MANAGER') FROM DUAL;
|
||||||
|
* @ex_rslt Package: CT_MRDS.FILE_MANAGER
|
||||||
|
* Current Version: 3.2.0
|
||||||
|
* Current Hash (SPEC): A7B3C5D9...
|
||||||
|
* Last Tracked: 2025-10-22 16:30:00
|
||||||
|
* Status: OK - No changes detected
|
||||||
|
**/
|
||||||
|
FUNCTION GET_PACKAGE_HASH_INFO(
|
||||||
|
pPackageOwner VARCHAR2,
|
||||||
|
pPackageName VARCHAR2
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
END ENV_MANAGER;
|
||||||
|
/
|
||||||
1285
MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkb
Normal file
1285
MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkb
Normal file
File diff suppressed because it is too large
Load Diff
279
MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkg
Normal file
279
MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkg
Normal file
@@ -0,0 +1,279 @@
|
|||||||
|
create or replace PACKAGE CT_MRDS.FILE_ARCHIVER
|
||||||
|
AUTHID CURRENT_USER
|
||||||
|
AS
|
||||||
|
/**
|
||||||
|
* General comment for package: Please put comments for functions and procedures as shown in below example.
|
||||||
|
* It is a standard.
|
||||||
|
* The structure of comment is used by GET_PACKAGE_DOCUMENTATION function
|
||||||
|
* which returns documentation text for confluence page (to Copy-Paste it).
|
||||||
|
**/
|
||||||
|
|
||||||
|
-- Example comment:
|
||||||
|
/**
|
||||||
|
* @name EX_PROCEDURE_NAME
|
||||||
|
* @desc Procedure description
|
||||||
|
* @example select LOGGING_AND_ERROR_MANAGER.EX_PROCEDURE_NAME(pParameter => 129) from dual;
|
||||||
|
* @ex_rslt Example Result
|
||||||
|
**/
|
||||||
|
|
||||||
|
-- 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_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
|
||||||
|
|
||||||
|
-- Version History (Latest changes first)
|
||||||
|
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
|
||||||
|
'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) ||
|
||||||
|
'3.1.2 (2026-02-06): Fixed missing PARTITION_YEAR/PARTITION_MONTH assignments in UPDATE statement and export query circular dependency (now filters by workflow_start instead of partition fields)' || CHR(13)||CHR(10) ||
|
||||||
|
'3.1.1 (2026-02-06): Fixed ORA-01422 error when DBMS_CLOUD.EXPORT_DATA creates multiple parquet files (parallel execution). Now stores archive directory prefix instead of individual filenames' || CHR(13)||CHR(10) ||
|
||||||
|
'3.1.0 (2026-01-29): Added function overloads for ARCHIVE_TABLE_DATA and GATHER_TABLE_STAT returning SQLCODE for Python library integration' || CHR(13)||CHR(10) ||
|
||||||
|
'3.0.0 (2026-01-27): MARS-828 - Added flexible archival strategies (MINIMUM_AGE_MONTHS with 0=current month, HYBRID) via ARCHIVAL_STRATEGY configuration' || 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-18): Enhanced ARCHIVE_TABLE_DATA with Hive-style partitioning support' || CHR(13)||CHR(10) ||
|
||||||
|
'1.0.0 (2025-09-15): Initial release with table archival and statistics gathering';
|
||||||
|
|
||||||
|
cgBL CONSTANT VARCHAR2(2) := ENV_MANAGER.cgBL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_TABLE_STAT
|
||||||
|
* @desc Private function to retrieve table statistics for archival processing.
|
||||||
|
* Returns A_TABLE_STAT record with table metadata and row counts.
|
||||||
|
* @param pSourceFileConfigKey - Configuration key for source file
|
||||||
|
* @return CT_MRDS.A_TABLE_STAT%ROWTYPE - Table statistics record
|
||||||
|
* @private Internal function for archival operations
|
||||||
|
**/
|
||||||
|
FUNCTION GET_TABLE_STAT(pSourceFileConfigKey IN NUMBER) RETURN CT_MRDS.A_TABLE_STAT%ROWTYPE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name ARCHIVE_TABLE_DATA
|
||||||
|
* @desc Wrapper procedure for DBMS_CLOUD.EXPORT_DATA.
|
||||||
|
* Exports data from table specified by pSourceFileConfigKey(A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY) into PARQUET file on OCI infrustructure.
|
||||||
|
* Each YEAR_MONTH pair goes to seperate file (implicit partitioning).
|
||||||
|
* TRASH policy is controlled by A_SOURCE_FILE_CONFIG.IS_KEEP_IN_TRASH column ('Y'=keep in TRASH, 'N'=delete immediately).
|
||||||
|
**/
|
||||||
|
PROCEDURE ARCHIVE_TABLE_DATA (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name FN_ARCHIVE_TABLE_DATA
|
||||||
|
* @desc Function wrapper for ARCHIVE_TABLE_DATA procedure.
|
||||||
|
* Returns SQLCODE for Python library integration.
|
||||||
|
* Calls the main ARCHIVE_TABLE_DATA procedure and captures execution result.
|
||||||
|
* TRASH policy is controlled by A_SOURCE_FILE_CONFIG.IS_KEEP_IN_TRASH column ('Y'=keep in TRASH, 'N'=delete immediately).
|
||||||
|
* @example SELECT FILE_ARCHIVER.FN_ARCHIVE_TABLE_DATA(pSourceFileConfigKey => 123) FROM DUAL;
|
||||||
|
* @ex_rslt 0 (success) or error code
|
||||||
|
**/
|
||||||
|
FUNCTION FN_ARCHIVE_TABLE_DATA (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GATHER_TABLE_STAT
|
||||||
|
* @desc Gather info about EXTERNAL TABLE specified by pSourceFileConfigKey parameter (A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY).
|
||||||
|
* Data is inserted into A_TABLE_STAT and A_TABLE_STAT_HIST.
|
||||||
|
**/
|
||||||
|
PROCEDURE GATHER_TABLE_STAT (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name FN_GATHER_TABLE_STAT
|
||||||
|
* @desc Function wrapper for GATHER_TABLE_STAT procedure.
|
||||||
|
* Returns SQLCODE for Python library integration.
|
||||||
|
* Calls the main GATHER_TABLE_STAT procedure and captures execution result.
|
||||||
|
* @example SELECT FILE_ARCHIVER.FN_GATHER_TABLE_STAT(pSourceFileConfigKey => 123) FROM DUAL;
|
||||||
|
* @ex_rslt 0 (success) or error code
|
||||||
|
**/
|
||||||
|
FUNCTION FN_GATHER_TABLE_STAT (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GATHER_TABLE_STAT_ALL
|
||||||
|
* @desc Multi-level batch statistics gathering procedure with three granularity levels.
|
||||||
|
* Processes configurations based on IS_ARCHIVE_ENABLED setting (when pOnlyEnabled=TRUE).
|
||||||
|
* Gathers statistics for external tables and inserts data into A_TABLE_STAT and A_TABLE_STAT_HIST.
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 1) Gather stats for specific configuration key (highest priority)
|
||||||
|
* @param pSourceKey - (LEVEL 2) Gather stats for all tables in source system (e.g., 'LM', 'C2D') (medium priority)
|
||||||
|
* @param pGatherAll - (LEVEL 3) When TRUE, gather stats for ALL tables across all sources (lowest priority)
|
||||||
|
* @param pOnlyEnabled - When TRUE (default), only process tables with IS_ARCHIVE_ENABLED='Y'
|
||||||
|
* @example -- Level 1: CALL FILE_ARCHIVER.GATHER_TABLE_STAT_ALL(pSourceFileConfigKey => 123);
|
||||||
|
* @example -- Level 2: CALL FILE_ARCHIVER.GATHER_TABLE_STAT_ALL(pSourceKey => 'LM');
|
||||||
|
* @example -- Level 3: CALL FILE_ARCHIVER.GATHER_TABLE_STAT_ALL(pGatherAll => TRUE);
|
||||||
|
* @example -- All tables regardless of IS_ARCHIVE_ENABLED: CALL FILE_ARCHIVER.GATHER_TABLE_STAT_ALL(pGatherAll => TRUE, pOnlyEnabled => FALSE);
|
||||||
|
**/
|
||||||
|
PROCEDURE GATHER_TABLE_STAT_ALL (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceKey IN CT_MRDS.A_SOURCE.A_SOURCE_KEY%TYPE DEFAULT NULL,
|
||||||
|
pGatherAll IN BOOLEAN DEFAULT FALSE,
|
||||||
|
pOnlyEnabled IN BOOLEAN DEFAULT TRUE
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name FN_GATHER_TABLE_STAT_ALL
|
||||||
|
* @desc Function wrapper for GATHER_TABLE_STAT_ALL procedure.
|
||||||
|
* Returns SQLCODE for Python library integration.
|
||||||
|
* Calls the main GATHER_TABLE_STAT_ALL procedure and captures execution result.
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 1) Gather stats for specific configuration key (highest priority)
|
||||||
|
* @param pSourceKey - (LEVEL 2) Gather stats for all tables in source system (medium priority)
|
||||||
|
* @param pGatherAll - (LEVEL 3) When TRUE, gather stats for ALL tables across all sources (lowest priority)
|
||||||
|
* @param pOnlyEnabled - When TRUE (default), only process tables with IS_ARCHIVE_ENABLED='Y'
|
||||||
|
* @example SELECT FILE_ARCHIVER.FN_GATHER_TABLE_STAT_ALL(pSourceKey => 'LM') FROM DUAL;
|
||||||
|
* @ex_rslt 0 (success) or error code
|
||||||
|
**/
|
||||||
|
FUNCTION FN_GATHER_TABLE_STAT_ALL (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceKey IN CT_MRDS.A_SOURCE.A_SOURCE_KEY%TYPE DEFAULT NULL,
|
||||||
|
pGatherAll IN BOOLEAN DEFAULT FALSE,
|
||||||
|
pOnlyEnabled IN BOOLEAN DEFAULT TRUE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name ARCHIVE_ALL
|
||||||
|
* @desc Multi-level batch archival procedure with three granularity levels.
|
||||||
|
* Only processes configurations where IS_ARCHIVE_ENABLED='Y'.
|
||||||
|
* TRASH policy for each table is controlled by individual IS_KEEP_IN_TRASH column.
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 1) Archive specific configuration key (highest priority)
|
||||||
|
* @param pSourceKey - (LEVEL 2) Archive all enabled tables for source system (e.g., 'LM', 'C2D') (medium priority)
|
||||||
|
* @param pArchiveAll - (LEVEL 3) When TRUE, archive ALL enabled tables across all sources (lowest priority)
|
||||||
|
* @example -- Level 1: CALL FILE_ARCHIVER.ARCHIVE_ALL(pSourceFileConfigKey => 123);
|
||||||
|
* @example -- Level 2: CALL FILE_ARCHIVER.ARCHIVE_ALL(pSourceKey => 'LM');
|
||||||
|
* @example -- Level 3: CALL FILE_ARCHIVER.ARCHIVE_ALL(pArchiveAll => TRUE);
|
||||||
|
**/
|
||||||
|
PROCEDURE ARCHIVE_ALL (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceKey IN CT_MRDS.A_SOURCE.A_SOURCE_KEY%TYPE DEFAULT NULL,
|
||||||
|
pArchiveAll IN BOOLEAN DEFAULT FALSE
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name FN_ARCHIVE_ALL
|
||||||
|
* @desc Function wrapper for ARCHIVE_ALL procedure.
|
||||||
|
* Returns SQLCODE for Python library integration.
|
||||||
|
* Calls the main ARCHIVE_ALL procedure and captures execution result.
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 1) Archive specific configuration key (highest priority)
|
||||||
|
* @param pSourceKey - (LEVEL 2) Archive all enabled tables for source system (medium priority)
|
||||||
|
* @param pArchiveAll - (LEVEL 3) When TRUE, archive ALL enabled tables across all sources (lowest priority)
|
||||||
|
* @example SELECT FILE_ARCHIVER.FN_ARCHIVE_ALL(pSourceKey => 'LM') FROM DUAL;
|
||||||
|
* @ex_rslt 0 (success) or error code
|
||||||
|
**/
|
||||||
|
FUNCTION FN_ARCHIVE_ALL (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceKey IN CT_MRDS.A_SOURCE.A_SOURCE_KEY%TYPE DEFAULT NULL,
|
||||||
|
pArchiveAll IN BOOLEAN DEFAULT FALSE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name RESTORE_FILE_FROM_TRASH
|
||||||
|
* @desc Restores files from TRASH folder back to ODS at three different granularity levels.
|
||||||
|
* Moves files from TRASH subfolder back to ODS subfolder in DATA bucket.
|
||||||
|
* Updates status from ARCHIVED_AND_TRASHED to INGESTED and clears archival metadata.
|
||||||
|
* @param pSourceFileReceivedKey - (LEVEL 3) Specific file to restore by A_SOURCE_FILE_RECEIVED_KEY (highest priority)
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 2) Restore all files for specific configuration key (medium priority)
|
||||||
|
* @param pRestoreAll - (LEVEL 1) When TRUE, restore ALL files with ARCHIVED_AND_TRASHED status (lowest priority)
|
||||||
|
* @example -- Restore single file: CALL FILE_ARCHIVER.RESTORE_FILE_FROM_TRASH(pSourceFileReceivedKey => 12345);
|
||||||
|
* @example -- Restore all files for config: CALL FILE_ARCHIVER.RESTORE_FILE_FROM_TRASH(pSourceFileConfigKey => 341);
|
||||||
|
* @example -- Restore all TRASH globally: CALL FILE_ARCHIVER.RESTORE_FILE_FROM_TRASH(pRestoreAll => TRUE);
|
||||||
|
**/
|
||||||
|
PROCEDURE RESTORE_FILE_FROM_TRASH (
|
||||||
|
pSourceFileReceivedKey IN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pRestoreAll IN BOOLEAN DEFAULT FALSE
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name RESTORE_FILE_FROM_TRASH
|
||||||
|
* @desc Function overload for RESTORE_FILE_FROM_TRASH procedure.
|
||||||
|
* Returns SQLCODE for Python library integration.
|
||||||
|
* Calls the main RESTORE_FILE_FROM_TRASH procedure and captures execution result.
|
||||||
|
* @param pSourceFileReceivedKey - (LEVEL 3) Specific file to restore by A_SOURCE_FILE_RECEIVED_KEY (highest priority)
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 2) Restore all files for specific configuration key (medium priority)
|
||||||
|
* @param pRestoreAll - (LEVEL 1) When TRUE, restore ALL files with ARCHIVED_AND_TRASHED status (lowest priority)
|
||||||
|
* @example SELECT FILE_ARCHIVER.RESTORE_FILE_FROM_TRASH(pSourceFileReceivedKey => 12345) FROM DUAL;
|
||||||
|
* @ex_rslt 0 (success) or error code
|
||||||
|
**/
|
||||||
|
FUNCTION RESTORE_FILE_FROM_TRASH (
|
||||||
|
pSourceFileReceivedKey IN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pRestoreAll IN BOOLEAN DEFAULT FALSE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name PURGE_TRASH_FOLDER
|
||||||
|
* @desc Deletes files from TRASH folder at three different granularity levels.
|
||||||
|
* Updates status from ARCHIVED_AND_TRASHED to ARCHIVED_AND_PURGED for all affected files.
|
||||||
|
* WARNING: This operation is irreversible - files are permanently deleted from TRASH.
|
||||||
|
* @param pSourceFileReceivedKey - (LEVEL 3) Specific file to delete by A_SOURCE_FILE_RECEIVED_KEY (highest priority)
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 2) Delete all files for specific configuration key (medium priority)
|
||||||
|
* @param pPurgeAll - (LEVEL 1) When TRUE, delete ALL files with ARCHIVED_AND_TRASHED status (lowest priority)
|
||||||
|
* @example -- Delete single file: CALL FILE_ARCHIVER.PURGE_TRASH_FOLDER(pSourceFileReceivedKey => 12345);
|
||||||
|
* @example -- Delete all files for config: CALL FILE_ARCHIVER.PURGE_TRASH_FOLDER(pSourceFileConfigKey => 341);
|
||||||
|
* @example -- Delete all TRASH globally: CALL FILE_ARCHIVER.PURGE_TRASH_FOLDER(pPurgeAll => TRUE);
|
||||||
|
**/
|
||||||
|
PROCEDURE PURGE_TRASH_FOLDER (
|
||||||
|
pSourceFileReceivedKey IN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pPurgeAll IN BOOLEAN DEFAULT FALSE
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name PURGE_TRASH_FOLDER
|
||||||
|
* @desc Function overload for PURGE_TRASH_FOLDER procedure.
|
||||||
|
* Returns SQLCODE for Python library integration.
|
||||||
|
* Calls the main PURGE_TRASH_FOLDER procedure and captures execution result.
|
||||||
|
* WARNING: This operation is irreversible - files are permanently deleted from TRASH.
|
||||||
|
* @param pSourceFileReceivedKey - (LEVEL 3) Specific file to delete by A_SOURCE_FILE_RECEIVED_KEY (highest priority)
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 2) Delete all files for specific configuration key (medium priority)
|
||||||
|
* @param pPurgeAll - (LEVEL 1) When TRUE, delete ALL files with ARCHIVED_AND_TRASHED status (lowest priority)
|
||||||
|
* @example SELECT FILE_ARCHIVER.PURGE_TRASH_FOLDER(pSourceFileReceivedKey => 12345) FROM DUAL;
|
||||||
|
* @ex_rslt 0 (success) or error code
|
||||||
|
**/
|
||||||
|
FUNCTION PURGE_TRASH_FOLDER (
|
||||||
|
pSourceFileReceivedKey IN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pPurgeAll IN BOOLEAN DEFAULT FALSE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
-- PACKAGE VERSION MANAGEMENT FUNCTIONS
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_VERSION
|
||||||
|
* @desc Returns the current version number of the FILE_ARCHIVER package.
|
||||||
|
* Uses semantic versioning format (MAJOR.MINOR.PATCH).
|
||||||
|
* @example SELECT FILE_ARCHIVER.GET_VERSION() FROM DUAL;
|
||||||
|
* @ex_rslt 2.0.0
|
||||||
|
**/
|
||||||
|
FUNCTION GET_VERSION 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_ARCHIVER.GET_BUILD_INFO() FROM DUAL;
|
||||||
|
* @ex_rslt Package: FILE_ARCHIVER
|
||||||
|
* Version: 2.0.0
|
||||||
|
* Build Date: 2025-10-22 16:45: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_ARCHIVER.GET_VERSION_HISTORY() FROM DUAL;
|
||||||
|
* @ex_rslt FILE_ARCHIVER Version History:
|
||||||
|
* 2.0.0 (2025-10-22): Added package versioning system...
|
||||||
|
**/
|
||||||
|
FUNCTION GET_VERSION_HISTORY RETURN VARCHAR2;
|
||||||
|
|
||||||
|
END;
|
||||||
|
|
||||||
|
/
|
||||||
2079
MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_MANAGER.pkb
Normal file
2079
MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_MANAGER.pkb
Normal file
File diff suppressed because it is too large
Load Diff
640
MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_MANAGER.pkg
Normal file
640
MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_MANAGER.pkg
Normal file
@@ -0,0 +1,640 @@
|
|||||||
|
create or replace PACKAGE CT_MRDS.FILE_MANAGER
|
||||||
|
AUTHID CURRENT_USER
|
||||||
|
AS
|
||||||
|
/**
|
||||||
|
* General comment for package: Please put comments for functions and procedures as shown in below example.
|
||||||
|
* It is a standard.
|
||||||
|
* The structure of comment is used by GET_PACKAGE_DOCUMENTATION function
|
||||||
|
* which returns documentation text for confluence page (to Copy-Paste it).
|
||||||
|
**/
|
||||||
|
|
||||||
|
-- Example comment:
|
||||||
|
/**
|
||||||
|
* @name EX_PROCEDURE_NAME
|
||||||
|
* @desc Procedure description
|
||||||
|
* @example select FILE_MANAGER.EX_PROCEDURE_NAME(pParameter => 129) from dual;
|
||||||
|
* @ex_rslt Example Result
|
||||||
|
**/
|
||||||
|
|
||||||
|
-- Package Version Information (Semantic Versioning: MAJOR.MINOR.PATCH)
|
||||||
|
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) ||
|
||||||
|
'3.3.0 (2025-11-26): MARS-1056 - Fixed VARCHAR2 definitions in GENERATE_EXTERNAL_TABLE_PARAMS to preserve CHAR/BYTE semantics from template tables' || CHR(13)||CHR(10) ||
|
||||||
|
'3.2.1 (2025-11-24): MARS-1049 - Added pEncoding parameter support for CSV character set specification' || CHR(13)||CHR(10) ||
|
||||||
|
'3.2.0 (2025-10-22): Added package versioning system using centralized ENV_MANAGER functions' || CHR(13)||CHR(10) ||
|
||||||
|
'3.1.0 (2025-10-20): Enhanced PROCESS_SOURCE_FILE with 6-step validation workflow' || CHR(13)||CHR(10) ||
|
||||||
|
'3.0.0 (2025-10-15): Separated export procedures into dedicated DATA_EXPORTER package' || CHR(13)||CHR(10) ||
|
||||||
|
'2.5.0 (2025-10-10): Added DELETE_SOURCE_CASCADE for safe configuration removal' || CHR(13)||CHR(10) ||
|
||||||
|
'2.0.0 (2025-09-25): Added official path patterns support (INBOX 3-level, ODS 2-level, ARCHIVE 2-level)' || CHR(13)||CHR(10) ||
|
||||||
|
'1.0.0 (2025-09-01): Initial release with file processing and validation capabilities';
|
||||||
|
|
||||||
|
TYPE tSourceFileReceived IS RECORD
|
||||||
|
(
|
||||||
|
A_SOURCE_FILE_RECEIVED_KEY CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY%TYPE,
|
||||||
|
A_SOURCE_FILE_CONFIG_KEY CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_CONFIG_KEY%TYPE,
|
||||||
|
SOURCE_FILE_PREFIX_INBOX VARCHAR2(430),
|
||||||
|
SOURCE_FILE_PREFIX_ODS VARCHAR2(430),
|
||||||
|
SOURCE_FILE_PREFIX_QUARANTINE VARCHAR2(430),
|
||||||
|
SOURCE_FILE_PREFIX_ARCHIVE VARCHAR2(430),
|
||||||
|
SOURCE_FILE_NAME CT_MRDS.A_SOURCE_FILE_RECEIVED.SOURCE_FILE_NAME%TYPE,
|
||||||
|
RECEPTION_DATE CT_MRDS.A_SOURCE_FILE_RECEIVED.RECEPTION_DATE%TYPE,
|
||||||
|
PROCESSING_STATUS CT_MRDS.A_SOURCE_FILE_RECEIVED.PROCESSING_STATUS%TYPE,
|
||||||
|
EXTERNAL_TABLE_NAME CT_MRDS.A_SOURCE_FILE_RECEIVED.EXTERNAL_TABLE_NAME%TYPE
|
||||||
|
);
|
||||||
|
|
||||||
|
cgBL CONSTANT VARCHAR2(2) := CHR(13)||CHR(10);
|
||||||
|
vgSourceFileConfigKey PLS_INTEGER;
|
||||||
|
vgMsgTmp VARCHAR2(32000);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_SOURCE_FILE_CONFIG
|
||||||
|
* @desc Get source file type by matching the source file name against source file type naming patterns
|
||||||
|
* or by specifying the id of a received source file.
|
||||||
|
* @example ...
|
||||||
|
* @ex_rslt "CT_MRDS.A_SOURCE_FILE_CONFIG%ROWTYPE"
|
||||||
|
**/
|
||||||
|
FUNCTION GET_SOURCE_FILE_CONFIG(pFileUri IN VARCHAR2 DEFAULT NULL
|
||||||
|
, pSourceFileReceivedKey IN NUMBER DEFAULT NULL
|
||||||
|
, pSourceFileConfigKey IN NUMBER DEFAULT NULL)
|
||||||
|
RETURN CT_MRDS.A_SOURCE_FILE_CONFIG%ROWTYPE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name REGISTER_SOURCE_FILE_RECEIVED
|
||||||
|
* @desc Register a newly received source file in A_SOURCE_FILE_RECEIVED table.
|
||||||
|
* This overload automatically determines source file type from the file name.
|
||||||
|
* It returns the value of A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY column for newly added record.
|
||||||
|
* @example vSourceFileReceivedKey := FILE_MANAGER.REGISTER_SOURCE_FILE_RECEIVED(pSourceFileReceivedName => 'INBOX/C2D/UC_DISSEM/UC_NMA_DISSEM/UC_NMA_DISSEM-277740.csv');
|
||||||
|
* @ex_rslt 3245
|
||||||
|
**/
|
||||||
|
FUNCTION REGISTER_SOURCE_FILE_RECEIVED (
|
||||||
|
pSourceFileReceivedName IN VARCHAR2
|
||||||
|
)
|
||||||
|
RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name REGISTER_SOURCE_FILE_RECEIVED
|
||||||
|
* @desc Register a new new source file in A_SOURCE_FILE_RECEIVED table based on pSourceFileReceivedName and pSourceFileConfig.
|
||||||
|
* Then it returns the value of A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY column for newly added record.
|
||||||
|
* @example vSourceFileReceivedKey := FILE_MANAGER.REGISTER_SOURCE_FILE_RECEIVED(
|
||||||
|
* pSourceFileReceivedName => 'INBOX/C2D/UC_DISSEM/UC_NMA_DISSEM/UC_NMA_DISSEM-277740.csv'
|
||||||
|
* ,pSourceFileConfig => ...A_SOURCE_FILE_CONFIG%ROWTYPE... );
|
||||||
|
* @ex_rslt 3245
|
||||||
|
**/
|
||||||
|
FUNCTION REGISTER_SOURCE_FILE_RECEIVED (
|
||||||
|
pSourceFileReceivedName IN VARCHAR2,
|
||||||
|
pSourceFileConfig IN CT_MRDS.A_SOURCE_FILE_CONFIG%ROWTYPE
|
||||||
|
)
|
||||||
|
RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name SET_SOURCE_FILE_RECEIVED_STATUS
|
||||||
|
* @desc Set status of file in A_SOURCE_FILE_RECEIVED table - PROCESSING_STATUS column
|
||||||
|
* based on A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY
|
||||||
|
* and provided value of pStatus parameter
|
||||||
|
* @example exec FILE_MANAGER.SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => 377, pStatus => 'READY_FOR_INGESTION');
|
||||||
|
**/
|
||||||
|
PROCEDURE SET_SOURCE_FILE_RECEIVED_STATUS(
|
||||||
|
pSourceFileReceivedKey IN PLS_INTEGER,
|
||||||
|
pStatus IN VARCHAR2
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_EXTERNAL_TABLE_COLUMNS
|
||||||
|
* @desc Function used to get string with all table columns definitions based on pTargetTableTemplate "TEMPLATE TABLE" name.
|
||||||
|
* It used for creating "EXTERNAL TABLE" using CREATE_EXTERNAL_TABLE procedure.
|
||||||
|
* @example select FILE_MANAGER.GET_EXTERNAL_TABLE_COLUMNS(pTargetTableTemplate => 'CT_ET_TEMPLATES.LM_STANDING_FACILITIES_HEADER') from dual;
|
||||||
|
* @ex_rslt "A_KEY" NUMBER(38,0) NOT NULL ENABLE,
|
||||||
|
* "A_WORKFLOW_HISTORY_KEY" NUMBER(38,0) NOT NULL ENABLE,
|
||||||
|
* "REV_NUMBER" NUMBER(28,0),
|
||||||
|
* "REF_DATE" DATE,
|
||||||
|
* "FREE_TEXT" VARCHAR2(1000 CHAR),
|
||||||
|
* "MLF_BS_TOTAL" NUMBER(28,10),
|
||||||
|
* "DF_BS_TOTAL" NUMBER(28,10),
|
||||||
|
* "MLF_SF_TOTAL" NUMBER(28,10),
|
||||||
|
* "DF_SF_TOTAL" NUMBER(28,10)
|
||||||
|
**/
|
||||||
|
FUNCTION GET_EXTERNAL_TABLE_COLUMNS (
|
||||||
|
pTargetTableTemplate IN VARCHAR2
|
||||||
|
)
|
||||||
|
RETURN CLOB;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name CREATE_EXTERNAL_TABLE
|
||||||
|
* @desc A wrapper procedure for DBMS_CLOUD.CREATE_EXTERNAL_TABLE which creates External Table
|
||||||
|
* MARS-1049: Added pEncoding parameter for CSV character set specification
|
||||||
|
* @param pEncoding - Character set encoding for CSV files (e.g., 'UTF8', 'WE8MSWIN1252')
|
||||||
|
* If provided, adds CHARACTERSET clause to external table definition
|
||||||
|
* @example
|
||||||
|
* begin
|
||||||
|
* FILE_MANAGER.CREATE_EXTERNAL_TABLE(
|
||||||
|
* pTableName => 'STANDING_FACILITIES_HEADER',
|
||||||
|
* pTemplateTableName => 'CT_ET_TEMPLATES.LM_STANDING_FACILITIES_HEADER',
|
||||||
|
* pPrefix => 'ODS/LM/STANDING_FACILITIES_HEADER/',
|
||||||
|
* pBucketUri => 'https://objectstorage.eu-frankfurt-1.oraclecloud.com/n/frcnomajoc7v/b/mrds_data_tst/o/',
|
||||||
|
* pFileName => NULL,
|
||||||
|
* pDelimiter => ',',
|
||||||
|
* pEncoding => 'UTF8'
|
||||||
|
* );
|
||||||
|
* end;
|
||||||
|
**/
|
||||||
|
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 -- MARS-1049: NOWY PARAMETR
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name CREATE_EXTERNAL_TABLE
|
||||||
|
* @desc Creates External Table for single file provided by
|
||||||
|
* pSourceFileReceivedKey parameter (A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY)
|
||||||
|
* @example exec FILE_MANAGER.CREATE_EXTERNAL_TABLE(pSourceFileReceivedKey => 377);;
|
||||||
|
**/
|
||||||
|
PROCEDURE CREATE_EXTERNAL_TABLE (
|
||||||
|
pSourceFileReceivedKey IN NUMBER
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name VALIDATE_SOURCE_FILE_RECEIVED
|
||||||
|
* @desc A wrapper procedure for DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE
|
||||||
|
* It validate External table build upon single file
|
||||||
|
* provided by pSourceFileReceivedKey parameter (A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY)
|
||||||
|
* @example exec FILE_MANAGER.VALIDATE_SOURCE_FILE_RECEIVED(pSourceFileReceivedKey => 377);
|
||||||
|
**/
|
||||||
|
PROCEDURE VALIDATE_SOURCE_FILE_RECEIVED
|
||||||
|
(
|
||||||
|
pSourceFileReceivedKey IN NUMBER
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name VALIDATE_EXTERNAL_TABLE
|
||||||
|
* @desc A wrapper function for DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE.
|
||||||
|
* It validates External Table provided by parameter pTableName.
|
||||||
|
* It returns: PASSED or FAILED.
|
||||||
|
* @example
|
||||||
|
* declare
|
||||||
|
* vStatus VARCHAR2(100);
|
||||||
|
* begin
|
||||||
|
* vStatus := FILE_MANAGER.VALIDATE_EXTERNAL_TABLE(pTableName => 'STANDING_FACILITIES_HEADER');
|
||||||
|
* DBMS_OUTPUT.PUT_LINE('vStatus = '||vStatus);
|
||||||
|
* end;
|
||||||
|
*
|
||||||
|
* @ex_rslt FAILED
|
||||||
|
**/
|
||||||
|
FUNCTION VALIDATE_EXTERNAL_TABLE(pTableName IN VARCHAR2)
|
||||||
|
RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name S_VALIDATE_EXTERNAL_TABLE
|
||||||
|
* @desc A function which checks if SELECT query reterns any rows.
|
||||||
|
* It trys to selects External Table provided by parameter pTableName.
|
||||||
|
* It returns: PASSED or FAILED.
|
||||||
|
* @example
|
||||||
|
* declare
|
||||||
|
* vStatus VARCHAR2(100);
|
||||||
|
* begin
|
||||||
|
* vStatus := FILE_MANAGER.S_VALIDATE_EXTERNAL_TABLE(pTableName => 'STANDING_FACILITIES_HEADER');
|
||||||
|
* DBMS_OUTPUT.PUT_LINE('vStatus = '||vStatus);
|
||||||
|
* end;
|
||||||
|
*
|
||||||
|
* @ex_rslt PASSED
|
||||||
|
**/
|
||||||
|
FUNCTION S_VALIDATE_EXTERNAL_TABLE(pTableName IN VARCHAR2)
|
||||||
|
RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name DROP_EXTERNAL_TABLE
|
||||||
|
* @desc It drops External Table for single file provided by
|
||||||
|
* pSourceFileReceivedKey parameter (A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY)
|
||||||
|
* @example exec FILE_MANAGER.DROP_EXTERNAL_TABLE(pSourceFileReceivedKey => 377);
|
||||||
|
**/
|
||||||
|
PROCEDURE DROP_EXTERNAL_TABLE (
|
||||||
|
pSourceFileReceivedKey IN NUMBER
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name COPY_FILE
|
||||||
|
* @desc It copies file provided by
|
||||||
|
* pSourceFileReceivedKey parameter (A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY)
|
||||||
|
* into destination provided by pDestination parameter.
|
||||||
|
* pDestination parameter allowed values are: 'ODS'
|
||||||
|
* @example exec FILE_MANAGER.COPY_FILE(pSourceFileReceivedKey => 377, pDestination => 'ODS');
|
||||||
|
**/
|
||||||
|
PROCEDURE COPY_FILE(
|
||||||
|
pSourceFileReceivedKey IN NUMBER,
|
||||||
|
pDestination IN VARCHAR2
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name MOVE_FILE
|
||||||
|
* @desc It moves file provided by
|
||||||
|
* pSourceFileReceivedKey parameter (A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY)
|
||||||
|
* into destination provided by pDestination parameter.
|
||||||
|
* pDestination parameter allowed values are: 'ODS', 'QUARANTINE'
|
||||||
|
* @example exec FILE_MANAGER.MOVE_FILE(pSourceFileReceivedKey => 377, pDestination => 'ODS');
|
||||||
|
**/
|
||||||
|
PROCEDURE MOVE_FILE(
|
||||||
|
pSourceFileReceivedKey IN NUMBER,
|
||||||
|
pDestination IN VARCHAR2
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name DELETE_FOLDER_CONTENTS
|
||||||
|
* @desc It deletes all files from specified folder in the cloud storage.
|
||||||
|
* The procedure lists all objects in the specified folder prefix and deletes them one by one.
|
||||||
|
* pBucketArea parameter specifies which bucket to use: 'INBOX', 'DATA', 'ARCHIVE'
|
||||||
|
* pFolderPrefix parameter specifies the folder path within the bucket (e.g., 'C2D/UC_DISSEM/UC_NMA_DISSEM/')
|
||||||
|
* @example exec FILE_MANAGER.DELETE_FOLDER_CONTENTS(pBucketArea => 'INBOX', pFolderPrefix => 'C2D/UC_DISSEM/UC_NMA_DISSEM/');
|
||||||
|
**/
|
||||||
|
PROCEDURE DELETE_FOLDER_CONTENTS(
|
||||||
|
pBucketArea IN VARCHAR2,
|
||||||
|
pFolderPrefix IN VARCHAR2
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name PROCESS_SOURCE_FILE
|
||||||
|
* @desc It process file provided by pSourceFileReceivedName parameter.
|
||||||
|
* Ubmrella procedure that calls:
|
||||||
|
* - REGISTER_SOURCE_FILE_RECEIVED;
|
||||||
|
* - CREATE_EXTERNAL_TABLE;
|
||||||
|
* - VALIDATE_SOURCE_FILE_RECEIVED;
|
||||||
|
* - DROP_EXTERNAL_TABLE;
|
||||||
|
* - MOVE_FILE;
|
||||||
|
* @example exec FILE_MANAGER.PROCESS_SOURCE_FILE(pSourceFileReceivedName => 'INBOX/C2D/UC_DISSEM/UC_NMA_DISSEM/UC_NMA_DISSEM-277740.csv');
|
||||||
|
**/
|
||||||
|
PROCEDURE PROCESS_SOURCE_FILE(pSourceFileReceivedName IN VARCHAR2)
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name PROCESS_SOURCE_FILE
|
||||||
|
* @desc It process file provided by pSourceFileReceivedName parameter and return processing result value.
|
||||||
|
* It returns (success/failure) => 0 / -(value).
|
||||||
|
* Ubmrella function that calls PROCESS_SOURCE_FILE procedure.
|
||||||
|
* @example
|
||||||
|
* declare
|
||||||
|
* vResult PLS_INTEGER;
|
||||||
|
* begin
|
||||||
|
* vResult := CT_MRDS.FILE_MANAGER.PROCESS_SOURCE_FILE(PSOURCEFILERECEIVEDNAME => 'INBOX/C2D/UC_DISSEM/UC_NMA_DISSEM/UC_NMA_DISSEM-277740.csv');
|
||||||
|
* DBMS_OUTPUT.PUT_LINE('vResult = ' || vResult);
|
||||||
|
* end;
|
||||||
|
* @ex_rslt 0
|
||||||
|
* -20021
|
||||||
|
**/
|
||||||
|
FUNCTION PROCESS_SOURCE_FILE(pSourceFileReceivedName IN VARCHAR2)
|
||||||
|
RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_DATE_FORMAT
|
||||||
|
* @desc Returns date format for specified template table name and column name.
|
||||||
|
* Date is taken from configuration A_COLUMN_DATE_FORMAT table.
|
||||||
|
* @example select FILE_MANAGER.GET_DATE_FORMAT(
|
||||||
|
* pTemplateTableName => 'STANDING_FACILITIES_HEADER',
|
||||||
|
* pColumnName => 'SNAPSHOT_DATE')
|
||||||
|
* from dual;
|
||||||
|
* @ex_rslt DD/MM/YYYY HH24:MI:SS
|
||||||
|
**/
|
||||||
|
FUNCTION GET_DATE_FORMAT(
|
||||||
|
pTemplateTableName IN VARCHAR2,
|
||||||
|
pColumnName IN VARCHAR2
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GENERATE_EXTERNAL_TABLE_PARAMS
|
||||||
|
* @desc It builds two strings: pColumnList and pFieldList for specified Template Table name, by parameter: pTemplateTableName.
|
||||||
|
* @example
|
||||||
|
* declare
|
||||||
|
* vColumnList CLOB;
|
||||||
|
* vFieldList CLOB;
|
||||||
|
* begin
|
||||||
|
* FILE_MANAGER.GENERATE_EXTERNAL_TABLE_PARAMS (
|
||||||
|
* pTemplateTableName => 'CT_ET_TEMPLATES.LM_STANDING_FACILITIES_HEADER'
|
||||||
|
* ,pColumnList => vColumnList
|
||||||
|
* ,pFieldList => vFieldList
|
||||||
|
* );
|
||||||
|
* DBMS_OUTPUT.PUT_LINE('vColumnList = '||vColumnList);
|
||||||
|
* DBMS_OUTPUT.PUT_LINE('vFieldList = '||vFieldList);
|
||||||
|
* end;
|
||||||
|
* /
|
||||||
|
**/
|
||||||
|
PROCEDURE GENERATE_EXTERNAL_TABLE_PARAMS (
|
||||||
|
pTemplateTableName IN VARCHAR2,
|
||||||
|
pColumnList OUT CLOB,
|
||||||
|
pFieldList OUT CLOB
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name ADD_SOURCE
|
||||||
|
* @desc Insert a new record to A_SOURCE table.
|
||||||
|
* pSourceKey is a PRIMARY KEY value.
|
||||||
|
**/
|
||||||
|
PROCEDURE ADD_SOURCE (
|
||||||
|
pSourceKey IN CT_MRDS.A_SOURCE.A_SOURCE_KEY%TYPE,
|
||||||
|
pSourceName IN CT_MRDS.A_SOURCE.SOURCE_NAME%TYPE
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name DELETE_SOURCE_CASCADE
|
||||||
|
* @desc Safely deletes a SOURCE specified by pSourceKey parameter from A_SOURCE table and all dependent tables:
|
||||||
|
* - A_SOURCE_FILE_CONFIG
|
||||||
|
* - A_SOURCE_FILE_RECEIVED
|
||||||
|
* - A_COLUMN_DATE_FORMAT (only if template table is not shared with other source systems)
|
||||||
|
* The procedure checks if template tables are shared before deleting date format configurations.
|
||||||
|
* If a template table is used by multiple source systems, date formats are preserved.
|
||||||
|
* @example CALL CT_MRDS.FILE_MANAGER.DELETE_SOURCE_CASCADE(pSourceKey => 'TEST_SYS');
|
||||||
|
**/
|
||||||
|
PROCEDURE DELETE_SOURCE_CASCADE (
|
||||||
|
pSourceKey IN CT_MRDS.A_SOURCE.A_SOURCE_KEY%TYPE
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_CONTAINER_SOURCE_FILE_CONFIG_KEY
|
||||||
|
* @desc For specified parameter pSourceFileId (A_SOURCE_FILE_CONFIG.SOURCE_FILE_ID)
|
||||||
|
* it returns A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY for related CONTAINER record.
|
||||||
|
* @example select FILE_MANAGER.GET_CONTAINER_SOURCE_FILE_CONFIG_KEY(
|
||||||
|
* pSourceFileId => 'UC_DISSEM')
|
||||||
|
* from dual;
|
||||||
|
* @ex_rslt 126
|
||||||
|
**/
|
||||||
|
FUNCTION GET_CONTAINER_SOURCE_FILE_CONFIG_KEY (
|
||||||
|
pSourceFileId IN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_ID%TYPE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_SOURCE_FILE_CONFIG_KEY
|
||||||
|
* @desc For specified input parameters,
|
||||||
|
* it returns A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY.
|
||||||
|
* @example select FILE_MANAGER.GET_SOURCE_FILE_CONFIG_KEY (
|
||||||
|
* pSourceFileType => 'INPUT'
|
||||||
|
* ,pSourceFileId => 'UC_DISSEM'
|
||||||
|
* ,pTableId => 'UC_NMA_DISSEM')
|
||||||
|
* from dual;
|
||||||
|
* @ex_rslt 126
|
||||||
|
**/
|
||||||
|
FUNCTION GET_SOURCE_FILE_CONFIG_KEY (
|
||||||
|
pSourceFileType IN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_TYPE%TYPE DEFAULT 'INPUT'
|
||||||
|
,pSourceFileId IN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_ID%TYPE
|
||||||
|
,pTableId IN CT_MRDS.A_SOURCE_FILE_CONFIG.TABLE_ID%TYPE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name ADD_SOURCE_FILE_CONFIG
|
||||||
|
* @desc Insert a new record to A_SOURCE_FILE_CONFIG table.
|
||||||
|
* MARS-1049: Added pEncoding parameter for CSV character set specification.
|
||||||
|
* @param pEncoding - Character set encoding for CSV files (e.g., 'UTF8', 'WE8MSWIN1252', 'EE8ISO8859P2')
|
||||||
|
* If NULL, no CHARACTERSET clause is added to external table definitions
|
||||||
|
* @example CALL CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||||
|
* pSourceKey => 'C2D', pSourceFileType => 'INPUT',
|
||||||
|
* pSourceFileId => 'UC_DISSEM', pTableId => 'METADATA_LOADS',
|
||||||
|
* pTemplateTableName => 'CT_ET_TEMPLATES.C2D_A_UC_DISSEM_METADATA_LOADS',
|
||||||
|
* pEncoding => 'UTF8'
|
||||||
|
* );
|
||||||
|
**/
|
||||||
|
PROCEDURE ADD_SOURCE_FILE_CONFIG (
|
||||||
|
pSourceKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_KEY%TYPE
|
||||||
|
,pSourceFileType IN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_TYPE%TYPE
|
||||||
|
,pSourceFileId IN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_ID%TYPE
|
||||||
|
,pSourceFileDesc IN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_DESC%TYPE
|
||||||
|
,pSourceFileNamePattern IN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_NAME_PATTERN%TYPE
|
||||||
|
,pTableId IN CT_MRDS.A_SOURCE_FILE_CONFIG.TABLE_ID%TYPE DEFAULT NULL
|
||||||
|
,pTemplateTableName IN CT_MRDS.A_SOURCE_FILE_CONFIG.TEMPLATE_TABLE_NAME%TYPE DEFAULT NULL
|
||||||
|
,pContainerFileKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.CONTAINER_FILE_KEY%TYPE DEFAULT NULL
|
||||||
|
,pEncoding IN CT_MRDS.A_SOURCE_FILE_CONFIG.ENCODING%TYPE DEFAULT NULL -- MARS-1049: NOWY PARAMETR
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name ADD_COLUMN_DATE_FORMAT
|
||||||
|
* @desc Insert a new record to A_COLUMN_DATE_FORMAT table.
|
||||||
|
**/
|
||||||
|
PROCEDURE ADD_COLUMN_DATE_FORMAT (
|
||||||
|
pTemplateTableName IN CT_MRDS.A_COLUMN_DATE_FORMAT.TEMPLATE_TABLE_NAME%TYPE
|
||||||
|
,pColumnName IN CT_MRDS.A_COLUMN_DATE_FORMAT.COLUMN_NAME%TYPE
|
||||||
|
,pDateFormat IN CT_MRDS.A_COLUMN_DATE_FORMAT.DATE_FORMAT%TYPE
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_BUCKET_URI
|
||||||
|
* @desc Function used to get string with bucket http url.
|
||||||
|
* Possible input values for pBucketArea are: 'INBOX', 'ODS', 'DATA', 'ARCHIVE'
|
||||||
|
* @example select FILE_MANAGER.GET_BUCKET_URI(pBucketArea => 'ODS') from dual;
|
||||||
|
* @ex_rslt https://objectstorage.eu-frankfurt-1.oraclecloud.com/n/frcnomajoc7v/b/mrds_data_tst/o/
|
||||||
|
**/
|
||||||
|
FUNCTION GET_BUCKET_URI(pBucketArea VARCHAR2)
|
||||||
|
RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_DET_SOURCE_FILE_CONFIG_INFO
|
||||||
|
* @desc Function returns details about A_SOURCE_FILE_CONFIG record
|
||||||
|
* for specified pSourceFileConfigKey (A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY).
|
||||||
|
* If pIncludeContainerInfo is <> 0 it returns additional info about related Container config record (A_SOURCE_FILE_CONFIG)
|
||||||
|
* If pIncludeColumnFormatInfo is <> 0 it returns additional info about related ColumnFormat config record (A_COLUMN_DATE_FORMAT)
|
||||||
|
* @example select FILE_MANAGER.GET_DET_SOURCE_FILE_CONFIG_INFO (
|
||||||
|
* pSourceFileConfigKey => 128
|
||||||
|
* ,pIncludeContainerInfo => 1
|
||||||
|
* ,pIncludeColumnFormatInfo => 1
|
||||||
|
* ) from dual;
|
||||||
|
* @ex_rslt
|
||||||
|
* Details about File Configuration:
|
||||||
|
* --------------------------------
|
||||||
|
* A_SOURCE_FILE_CONFIG_KEY = 128
|
||||||
|
* A_SOURCE_KEY = C2D
|
||||||
|
* ...
|
||||||
|
* --------------------------------
|
||||||
|
*
|
||||||
|
* Details about related Container Config:
|
||||||
|
* --------------------------------
|
||||||
|
* A_SOURCE_FILE_CONFIG_KEY = 126
|
||||||
|
* A_SOURCE_KEY = C2D
|
||||||
|
* ...
|
||||||
|
* --------------------------------
|
||||||
|
*
|
||||||
|
* Column Date Format config entries:
|
||||||
|
* --------------------------------
|
||||||
|
* TEMPLATE_TABLE_NAME = CT_ET_TEMPLATES.C2D_UC_MA_DISSEM
|
||||||
|
* ...
|
||||||
|
* --------------------------------
|
||||||
|
**/
|
||||||
|
FUNCTION GET_DET_SOURCE_FILE_CONFIG_INFO (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||||
|
,pIncludeContainerInfo IN PLS_INTEGER DEFAULT 1
|
||||||
|
,pIncludeColumnFormatInfo IN PLS_INTEGER DEFAULT 1
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_DET_SOURCE_FILE_RECEIVED_INFO
|
||||||
|
* @desc Function returns details about A_SOURCE_FILE_RECEIVED record
|
||||||
|
* for specified pSourceFileReceivedKey (A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY).
|
||||||
|
* If pIncludeConfigInfo is <> 0 it returns additional info about related Container config record (A_SOURCE_FILE_CONFIG)
|
||||||
|
* If pIncludeContainerInfo is <> 0 it returns additional info about related Container config record (A_SOURCE_FILE_CONFIG)
|
||||||
|
* If pIncludeColumnFormatInfo is <> 0 it returns additional info about related ColumnFormat config record (A_COLUMN_DATE_FORMAT)
|
||||||
|
* @example select FILE_MANAGER.GET_DET_SOURCE_FILE_RECEIVED_INFO (
|
||||||
|
* pSourceFileReceivedKey => 377
|
||||||
|
* ,pIncludeConfigInfo => 1
|
||||||
|
* ,pIncludeContainerInfo => 1
|
||||||
|
* ,pIncludeColumnFormatInfo => 1
|
||||||
|
* ) from dual;
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
FUNCTION GET_DET_SOURCE_FILE_RECEIVED_INFO (
|
||||||
|
pSourceFileReceivedKey IN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY%TYPE
|
||||||
|
,pIncludeConfigInfo IN PLS_INTEGER DEFAULT 1
|
||||||
|
,pIncludeContainerInfo IN PLS_INTEGER DEFAULT 1
|
||||||
|
,pIncludeColumnFormatInfo IN PLS_INTEGER DEFAULT 1
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_DET_USER_LOAD_OPERATIONS
|
||||||
|
* @desc Function returns details from USER_LOAD_OPERATIONS table
|
||||||
|
* for specified pOperationId.
|
||||||
|
* @example select FILE_MANAGER.GET_DET_USER_LOAD_OPERATIONS (pOperationId => 3608) from dual;
|
||||||
|
* @ex_rslt
|
||||||
|
* Details about USER_LOAD_OPERATIONS where ID = 3608
|
||||||
|
* --------------------------------
|
||||||
|
* ID = 3608
|
||||||
|
* TYPE = VALIDATE
|
||||||
|
* SID = 31260
|
||||||
|
* SERIAL# = 52915
|
||||||
|
* START_TIME = 2025-05-20 10.08.24.436983 EUROPE/BELGRADE
|
||||||
|
* UPDATE_TIME = 2025-05-20 10.08.24.458643 EUROPE/BELGRADE
|
||||||
|
* STATUS = FAILED
|
||||||
|
* OWNER_NAME = CT_MRDS
|
||||||
|
* TABLE_NAME = STANDING_FACILITIES_HEADER
|
||||||
|
* PARTITION_NAME =
|
||||||
|
* SUBPARTITION_NAME =
|
||||||
|
* FILE_URI_LIST =
|
||||||
|
* ROWS_LOADED =
|
||||||
|
* LOGFILE_TABLE = VALIDATE$3608_LOG
|
||||||
|
* BADFILE_TABLE = VALIDATE$3608_BAD
|
||||||
|
* STATUS_TABLE =
|
||||||
|
* TEMPEXT_TABLE =
|
||||||
|
* CREDENTIAL_NAME =
|
||||||
|
* EXPIRATION_TIME = 2025-05-22 10.08.24.436983000 EUROPE/BELGRADE
|
||||||
|
* --------------------------------
|
||||||
|
**/
|
||||||
|
FUNCTION GET_DET_USER_LOAD_OPERATIONS (
|
||||||
|
pOperationId PLS_INTEGER
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name ANALYZE_VALIDATION_ERRORS
|
||||||
|
* @desc Wrapper function that analyzes validation errors for a source file using its received key.
|
||||||
|
* Automatically derives template schema, table name, CSV URI and validation log table
|
||||||
|
* from file metadata and calls ENV_MANAGER.ANALYZE_VALIDATION_ERRORS.
|
||||||
|
* @example SELECT FILE_MANAGER.ANALYZE_VALIDATION_ERRORS(63) FROM DUAL;
|
||||||
|
* @ex_rslt Detailed validation analysis report with column mismatches and solutions
|
||||||
|
**/
|
||||||
|
FUNCTION ANALYZE_VALIDATION_ERRORS(
|
||||||
|
pSourceFileReceivedKey IN NUMBER
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
-- PACKAGE VERSION MANAGEMENT FUNCTIONS
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_VERSION
|
||||||
|
* @desc Returns the current version number of the FILE_MANAGER package.
|
||||||
|
* Uses semantic versioning format (MAJOR.MINOR.PATCH).
|
||||||
|
* @example SELECT FILE_MANAGER.GET_VERSION() FROM DUAL;
|
||||||
|
* @ex_rslt 3.2.0
|
||||||
|
**/
|
||||||
|
FUNCTION GET_VERSION 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.GET_BUILD_INFO() FROM DUAL;
|
||||||
|
* @ex_rslt Package: FILE_MANAGER
|
||||||
|
* Version: 3.2.0
|
||||||
|
* Build Date: 2025-10-22 16:30: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.GET_VERSION_HISTORY() FROM DUAL;
|
||||||
|
* @ex_rslt FILE_MANAGER Version History:
|
||||||
|
* 3.2.0 (2025-10-22): Added package versioning system...
|
||||||
|
**/
|
||||||
|
FUNCTION GET_VERSION_HISTORY RETURN VARCHAR2;
|
||||||
|
|
||||||
|
END;
|
||||||
|
|
||||||
|
/
|
||||||
|
|
||||||
|
/
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
WHENEVER SQLERROR CONTINUE
|
||||||
|
GRANT SELECT, INSERT, UPDATE, DELETE ON ct_ods.a_load_history TO ct_mrds;
|
||||||
|
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||||
|
|
||||||
|
-- ============================================================================
|
||||||
|
-- TRG_A_WORKFLOW_HISTORY Trigger Definition
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
-- Drop old trigger (different name) to ensure clean rename; ignore error if not exists
|
||||||
|
WHENEVER SQLERROR CONTINUE
|
||||||
|
drop TRIGGER ct_mrds.a_workflow_history;
|
||||||
|
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||||
|
|
||||||
|
|
||||||
|
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.service_name = 'ODS' AND :new.workflow_name IN (
|
||||||
|
'w_ODS_LM_STANDING_FACILITIES', 'w_ODS_CSDB_DEBT', 'w_ODS_CSDB_DEBT_DAILY', 'w_ODS_CSDB_RATINGS_FULL',
|
||||||
|
'w_ODS_TMS_LIMIT_ACCESS', 'w_ODS_TMS_PORTFOLIO_ACCESS', 'w_ODS_TMS_PORTFOLIO_TREE',
|
||||||
|
'w_ODS_TMS_COLLATERAL_INVENTORY', 'w_ODS_TOP_FULLBIDARRAY_COMPILED', 'w_ODS_TOP_ANNOUNCEMENT',
|
||||||
|
'w_ODS_TOP_ALLOTMENT_MODIFICATIONS', 'w_ODS_TOP_ALLOTMENT', 'w_ODS_CEPH_PRICING', 'w_ODS_C2D_MPEC'
|
||||||
|
) THEN
|
||||||
|
IF :new.workflow_successful = 'Y' AND :new.workflow_successful <> NVL(:old.workflow_successful, 'N') THEN
|
||||||
|
CASE
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_LM_STANDING_FACILITIES' THEN v_workflow_name := 'w_ODS_LM_STANDING_FACILITY';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TMS_LIMIT_ACCESS' THEN v_workflow_name := 'w_ODS_TMS_RAR_LIMITACCESS';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TMS_PORTFOLIO_ACCESS' THEN v_workflow_name := 'w_ODS_TMS_RAR_PORTFOLIOACCESS';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TMS_PORTFOLIO_TREE' THEN v_workflow_name := 'w_ODS_TMS_RAR_PORTFOLIOTREE';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TMS_COLLATERAL_INVENTORY' THEN v_workflow_name := 'w_ODS_TMS_RAR_RARCOLLATERALINVENTORY';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TOP_FULLBIDARRAY_COMPILED' THEN v_workflow_name := 'w_ODS_TOP_FULLBIDARRAY_COMPILED';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TOP_ANNOUNCEMENT' THEN v_workflow_name := 'w_ODS_TOP_ANNOUNCEMENT';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TOP_ALLOTMENT_MODIFICATIONS' THEN v_workflow_name := 'w_ODS_TOP_ALLOTMENT_MODIFICATIONS';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TOP_ALLOTMENT' THEN v_workflow_name := 'w_ODS_TOP_ALLOTMENT';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_CEPH_PRICING' THEN v_workflow_name := 'w_ODS_CEPH_PRICING';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_C2D_MPEC' THEN v_workflow_name := 'w_ODS_C2D_MPEC';
|
||||||
|
ELSE
|
||||||
|
v_workflow_name := :new.workflow_name;
|
||||||
|
END CASE;
|
||||||
|
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;
|
||||||
|
|
||||||
|
/
|
||||||
114
MARS_Packages/REL02_POST/MARS-1409/rollback_mars1409.sql
Normal file
114
MARS_Packages/REL02_POST/MARS-1409/rollback_mars1409.sql
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Master Rollback Script
|
||||||
|
-- ============================================================================
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Purpose: Rollback A_WORKFLOW_HISTORY_KEY column changes from A_SOURCE_FILE_RECEIVED
|
||||||
|
-- Target Schema: CT_MRDS
|
||||||
|
-- Estimated Time: 1-2 minutes
|
||||||
|
-- Prerequisites: Backup of current FILE_MANAGER package, ADMIN privileges
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
SET VERIFY OFF
|
||||||
|
SET FEEDBACK ON
|
||||||
|
SET ECHO OFF
|
||||||
|
|
||||||
|
-- Create log directory if it doesn't exist
|
||||||
|
host mkdir log 2>nul
|
||||||
|
|
||||||
|
-- Generate dynamic SPOOL filename with timestamp
|
||||||
|
var filename VARCHAR2(100)
|
||||||
|
BEGIN
|
||||||
|
:filename := 'log/ROLLBACK_MARS_1409_' || SYS_CONTEXT('USERENV', 'CON_NAME') || '_' || TO_CHAR(SYSDATE,'YYYYMMDD_HH24MISS') || '.log';
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
column filename new_value _filename
|
||||||
|
select :filename filename from dual;
|
||||||
|
spool &_filename
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
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: 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 ============================================================================
|
||||||
|
|
||||||
|
-- Confirm rollback with user
|
||||||
|
ACCEPT continue CHAR PROMPT 'Type YES to continue with rollback, or Ctrl+C to abort: '
|
||||||
|
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||||
|
BEGIN
|
||||||
|
IF '&continue' IS NULL OR TRIM('&continue') IS NULL OR UPPER(TRIM('&continue')) != 'YES' THEN
|
||||||
|
RAISE_APPLICATION_ERROR(-20000, 'Rollback aborted by user');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 1: Restore FILE_ARCHIVER package specification (previous version)
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@91_MARS_1409_rollback_CT_MRDS_FILE_ARCHIVER_SPEC.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 2: Restore FILE_ARCHIVER package body (previous version)
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@92_MARS_1409_rollback_CT_MRDS_FILE_ARCHIVER_BODY.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 3: Restore FILE_MANAGER package specification (previous version)
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@93_MARS_1409_rollback_CT_MRDS_FILE_MANAGER_SPEC.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
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: Drop A_WORKFLOW_HISTORY_KEY column
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@99_MARS_1409_rollback_workflow_history_key_column.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 9: Verify rollback
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@90_MARS_1409_verify_rollback.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT MARS-1409 Rollback Complete
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT Final Status:
|
||||||
|
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS rollback_end FROM DUAL;
|
||||||
|
PROMPT
|
||||||
|
PROMPT Review the log file for detailed results: &_filename
|
||||||
|
PROMPT ============================================================================
|
||||||
|
|
||||||
|
spool off
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
-- ====================================================================
|
||||||
|
-- A_SOURCE_FILE_RECEIVED Table
|
||||||
|
-- ====================================================================
|
||||||
|
-- Purpose: Track received files and their processing status
|
||||||
|
-- ====================================================================
|
||||||
|
|
||||||
|
CREATE TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED (
|
||||||
|
A_SOURCE_FILE_RECEIVED_KEY NUMBER(38,0) NOT NULL ENABLE,
|
||||||
|
A_SOURCE_FILE_CONFIG_KEY NUMBER(38,0) NOT NULL ENABLE,
|
||||||
|
SOURCE_FILE_NAME VARCHAR2(1000) NOT NULL,
|
||||||
|
CHECKSUM VARCHAR2(128),
|
||||||
|
CREATED TIMESTAMP(6) WITH TIME ZONE,
|
||||||
|
BYTES NUMBER,
|
||||||
|
RECEPTION_DATE DATE NOT NULL,
|
||||||
|
PROCESSING_STATUS VARCHAR2(200),
|
||||||
|
EXTERNAL_TABLE_NAME VARCHAR2(200),
|
||||||
|
PARTITION_YEAR VARCHAR2(4),
|
||||||
|
PARTITION_MONTH VARCHAR2(2),
|
||||||
|
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', '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)
|
||||||
|
CREATE UNIQUE INDEX CT_MRDS.A_SOURCE_FILE_RECEIVED_UK1
|
||||||
|
ON CT_MRDS.A_SOURCE_FILE_RECEIVED(CHECKSUM, CREATED, BYTES);
|
||||||
|
|
||||||
|
-- Column comments
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY IS
|
||||||
|
'Primary key - unique identifier for received file record';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_CONFIG_KEY IS
|
||||||
|
'Foreign key to A_SOURCE_FILE_CONFIG - links file to its configuration and processing rules';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.SOURCE_FILE_NAME IS
|
||||||
|
'Full object name/path of the received file in OCI Object Storage (includes INBOX prefix)';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.CHECKSUM IS
|
||||||
|
'MD5 checksum of file content for integrity verification and duplicate detection';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.CREATED IS
|
||||||
|
'Timestamp with timezone when file was created/uploaded to Object Storage (from DBMS_CLOUD.LIST_OBJECTS)';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.BYTES IS
|
||||||
|
'File size in bytes';
|
||||||
|
|
||||||
|
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 (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)';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PARTITION_YEAR IS
|
||||||
|
'Year partition value (YYYY format) when file was archived to ARCHIVE bucket with Hive-style partitioning';
|
||||||
|
|
||||||
|
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_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;
|
||||||
1171
MARS_Packages/REL02_POST/MARS-1409/rollback_version/ENV_MANAGER.pkb
Normal file
1171
MARS_Packages/REL02_POST/MARS-1409/rollback_version/ENV_MANAGER.pkb
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,625 @@
|
|||||||
|
create or replace PACKAGE CT_MRDS.ENV_MANAGER
|
||||||
|
AUTHID CURRENT_USER
|
||||||
|
AS
|
||||||
|
/**
|
||||||
|
* General comment for package: Please put comments for functions and procedures as shown in below example.
|
||||||
|
* It is a standard.
|
||||||
|
* The structure of comment is used by GET_PACKAGE_DOCUMENTATION function
|
||||||
|
* which returns documentation text for confluence page (to Copy-Paste it).
|
||||||
|
**/
|
||||||
|
|
||||||
|
-- Example comment:
|
||||||
|
/**
|
||||||
|
* @name EX_PROCEDURE_NAME
|
||||||
|
* @desc Procedure description
|
||||||
|
* @example select ENV_MANAGER.EX_PROCEDURE_NAME(pParameter => 129) from dual;
|
||||||
|
* @ex_rslt Example Result
|
||||||
|
**/
|
||||||
|
|
||||||
|
-- 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_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
|
||||||
|
|
||||||
|
-- Version History (Latest changes first)
|
||||||
|
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
|
||||||
|
'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) ||
|
||||||
|
'2.1.0 (2025-10-15): Added ANALYZE_VALIDATION_ERRORS function for comprehensive CSV validation analysis' || CHR(13)||CHR(10) ||
|
||||||
|
'2.0.0 (2025-10-01): Added LOG_PROCESS_ERROR procedure with enhanced error diagnostics and stack traces' || CHR(13)||CHR(10) ||
|
||||||
|
'1.5.0 (2025-09-20): Added console logging support with gvConsoleLoggingEnabled configuration' || CHR(13)||CHR(10) ||
|
||||||
|
'1.0.0 (2025-09-01): Initial release with error management and configuration system';
|
||||||
|
|
||||||
|
TYPE Error_Record IS RECORD (
|
||||||
|
code PLS_INTEGER,
|
||||||
|
message VARCHAR2(4000)
|
||||||
|
);
|
||||||
|
|
||||||
|
TYPE tErrorList IS TABLE OF Error_Record INDEX BY PLS_INTEGER;
|
||||||
|
|
||||||
|
Errors tErrorList;
|
||||||
|
|
||||||
|
|
||||||
|
guid VARCHAR2(32);
|
||||||
|
gvEnv VARCHAR2(200);
|
||||||
|
gvUsername VARCHAR2(128);
|
||||||
|
gvOsuser VARCHAR2(128);
|
||||||
|
gvMachine VARCHAR2(64);
|
||||||
|
gvModule VARCHAR2(64);
|
||||||
|
|
||||||
|
gvNameSpace VARCHAR2(200);
|
||||||
|
gvRegion VARCHAR2(200);
|
||||||
|
gvDataBucketName VARCHAR2(200);
|
||||||
|
gvInboxBucketName VARCHAR2(200);
|
||||||
|
gvArchiveBucketName VARCHAR2(200);
|
||||||
|
gvDataBucketUri VARCHAR2(200);
|
||||||
|
gvInboxBucketUri VARCHAR2(200);
|
||||||
|
gvArchiveBucketUri VARCHAR2(200);
|
||||||
|
gvCredentialName VARCHAR2(200);
|
||||||
|
|
||||||
|
-- Overwritten by variable "LoggingEnabled" in A_FILE_MANAGER_CONFIG.CONFIG_VARIABLE table
|
||||||
|
gvLoggingEnabled VARCHAR2(3) := 'ON'; -- 'ON' or 'OFF'
|
||||||
|
|
||||||
|
-- Overwritten by variable "MinLogLevel" in A_FILE_MANAGER_CONFIG.CONFIG_VARIABLE table
|
||||||
|
-- Possible values: DEBUG ,INFO ,WARNING ,ERROR
|
||||||
|
gvMinLogLevel VARCHAR2(10) := 'DEBUG';
|
||||||
|
|
||||||
|
-- Overwritten by variable "DefaultDateFormat" in A_FILE_MANAGER_CONFIG.CONFIG_VARIABLE table
|
||||||
|
gvDefaultDateFormat VARCHAR2(200) := 'DD/MM/YYYY HH24:MI:SS';
|
||||||
|
|
||||||
|
-- Overwritten by variable "ConsoleLoggingEnabled" in A_FILE_MANAGER_CONFIG.CONFIG_VARIABLE table
|
||||||
|
gvConsoleLoggingEnabled VARCHAR2(3) := 'ON'; -- 'ON' or 'OFF'
|
||||||
|
|
||||||
|
cgBL CONSTANT VARCHAR2(2) := CHR(13)||CHR(10);
|
||||||
|
|
||||||
|
vgSourceFileConfigKey PLS_INTEGER;
|
||||||
|
|
||||||
|
vgMsgTmp VARCHAR2(32000);
|
||||||
|
--Exceptions
|
||||||
|
ERR_EMPTY_FILEURI_AND_RECKEY EXCEPTION;
|
||||||
|
CODE_EMPTY_FILEURI_AND_RECKEY CONSTANT PLS_INTEGER := -20001;
|
||||||
|
MSG_EMPTY_FILEURI_AND_RECKEY VARCHAR2(4000) := 'Either pFileUri or pSourceFileReceivedKey must be not null';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_EMPTY_FILEURI_AND_RECKEY
|
||||||
|
,CODE_EMPTY_FILEURI_AND_RECKEY);
|
||||||
|
|
||||||
|
|
||||||
|
ERR_NO_CONFIG_MATCH_FOR_FILEURI EXCEPTION;
|
||||||
|
CODE_NO_CONFIG_MATCH_FOR_FILEURI CONSTANT PLS_INTEGER := -20002;
|
||||||
|
MSG_NO_CONFIG_MATCH_FOR_FILEURI VARCHAR2(4000) := 'No match for source file in A_SOURCE_FILE_CONFIG table'
|
||||||
|
||cgBL||' The file provided in parameter: pFileUri does not have '
|
||||||
|
||cgBL||' coresponding configuration in A_SOURCE_FILE_CONFIG table';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_NO_CONFIG_MATCH_FOR_FILEURI
|
||||||
|
,CODE_NO_CONFIG_MATCH_FOR_FILEURI);
|
||||||
|
|
||||||
|
ERR_MULTIPLE_MATCH_FOR_SRCFILE EXCEPTION;
|
||||||
|
CODE_MULTIPLE_MATCH_FOR_SRCFILE CONSTANT PLS_INTEGER := -20003;
|
||||||
|
MSG_MULTIPLE_MATCH_FOR_SRCFILE VARCHAR2(4000) := 'Multiple match for source file in A_SOURCE_FILE_CONFIG table';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MULTIPLE_MATCH_FOR_SRCFILE
|
||||||
|
,CODE_MULTIPLE_MATCH_FOR_SRCFILE);
|
||||||
|
|
||||||
|
ERR_MISSING_COLUMN_DATE_FORMAT EXCEPTION;
|
||||||
|
CODE_MISSING_COLUMN_DATE_FORMAT CONSTANT PLS_INTEGER := -20004;
|
||||||
|
MSG_MISSING_COLUMN_DATE_FORMAT VARCHAR2(4000) := 'Missing entry in config table: A_COLUMN_DATE_FORMAT primary key(TEMPLATE_TABLE_NAME, COLUMN_NAME)'
|
||||||
|
||cgBL||' Remember: each column which data_type IN (''DATE'', ''TIMESTAMP'')'
|
||||||
|
||cgBL||' should have DateFormat specified in A_COLUMN_DATE_FORMAT table '
|
||||||
|
||cgBL||' for example: ''YYYY-MM-DD''';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MISSING_COLUMN_DATE_FORMAT
|
||||||
|
,CODE_MISSING_COLUMN_DATE_FORMAT);
|
||||||
|
|
||||||
|
ERR_MULTIPLE_COLUMN_DATE_FORMAT EXCEPTION;
|
||||||
|
CODE_MULTIPLE_COLUMN_DATE_FORMAT CONSTANT PLS_INTEGER := -20005;
|
||||||
|
MSG_MULTIPLE_COLUMN_DATE_FORMAT VARCHAR2(4000) := 'Multiple records for date format in A_COLUMN_DATE_FORMAT table'
|
||||||
|
||cgBL||' There should be only one format specified for each DAT/TIMESTAMP column';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MULTIPLE_COLUMN_DATE_FORMAT
|
||||||
|
,CODE_MULTIPLE_COLUMN_DATE_FORMAT);
|
||||||
|
|
||||||
|
|
||||||
|
ERR_DIDNT_GET_LOAD_OPERATION_ID EXCEPTION;
|
||||||
|
CODE_DIDNT_GET_LOAD_OPERATION_ID CONSTANT PLS_INTEGER := -20006;
|
||||||
|
MSG_DIDNT_GET_LOAD_OPERATION_ID VARCHAR2(4000) := 'Didnt get load operation id from external table validation';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_DIDNT_GET_LOAD_OPERATION_ID
|
||||||
|
,CODE_DIDNT_GET_LOAD_OPERATION_ID);
|
||||||
|
|
||||||
|
ERR_NO_CONFIG_FOR_RECEIVED_FILE EXCEPTION;
|
||||||
|
CODE_NO_CONFIG_FOR_RECEIVED_FILE CONSTANT PLS_INTEGER := -20007;
|
||||||
|
MSG_NO_CONFIG_FOR_RECEIVED_FILE VARCHAR2(4000) := 'No match for received source file in A_SOURCE_FILE_CONFIG '
|
||||||
|
||cgBL||' or missing data in A_SOURCE_FILE_RECEIVED table for provided pSourceFileReceivedKey parameter';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_NO_CONFIG_FOR_RECEIVED_FILE
|
||||||
|
,CODE_NO_CONFIG_FOR_RECEIVED_FILE);
|
||||||
|
|
||||||
|
ERR_MULTI_CONFIG_FOR_RECEIVED_FILE EXCEPTION;
|
||||||
|
CODE_MULTI_CONFIG_FOR_RECEIVED_FILE CONSTANT PLS_INTEGER := -20008;
|
||||||
|
MSG_MULTI_CONFIG_FOR_RECEIVED_FILE VARCHAR2(4000) := 'Multiple matchs for received source file in A_SOURCE_FILE_CONFIG';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MULTI_CONFIG_FOR_RECEIVED_FILE
|
||||||
|
,CODE_MULTI_CONFIG_FOR_RECEIVED_FILE);
|
||||||
|
|
||||||
|
ERR_FILE_NOT_FOUND_ON_CLOUD EXCEPTION;
|
||||||
|
CODE_FILE_NOT_FOUND_ON_CLOUD CONSTANT PLS_INTEGER := -20009;
|
||||||
|
MSG_FILE_NOT_FOUND_ON_CLOUD VARCHAR2(4000) := 'File not found on the cloud';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_FILE_NOT_FOUND_ON_CLOUD
|
||||||
|
,CODE_FILE_NOT_FOUND_ON_CLOUD);
|
||||||
|
|
||||||
|
ERR_FILE_VALIDATION_FAILED EXCEPTION;
|
||||||
|
CODE_FILE_VALIDATION_FAILED CONSTANT PLS_INTEGER := -20010;
|
||||||
|
MSG_FILE_VALIDATION_FAILED VARCHAR2(4000) := 'File validation failed';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_FILE_VALIDATION_FAILED
|
||||||
|
,CODE_FILE_VALIDATION_FAILED);
|
||||||
|
|
||||||
|
ERR_EXCESS_COLUMNS_DETECTED EXCEPTION;
|
||||||
|
CODE_EXCESS_COLUMNS_DETECTED CONSTANT PLS_INTEGER := -20011;
|
||||||
|
MSG_EXCESS_COLUMNS_DETECTED VARCHAR2(4000) := 'CSV file contains more columns than template allows';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_EXCESS_COLUMNS_DETECTED
|
||||||
|
,CODE_EXCESS_COLUMNS_DETECTED);
|
||||||
|
|
||||||
|
ERR_NO_CONFIG_MATCH EXCEPTION;
|
||||||
|
CODE_NO_CONFIG_MATCH CONSTANT PLS_INTEGER := -20012;
|
||||||
|
MSG_NO_CONFIG_MATCH VARCHAR2(4000) := 'No match for specified parameters in A_SOURCE_FILE_CONFIG table';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_NO_CONFIG_MATCH
|
||||||
|
,CODE_NO_CONFIG_MATCH);
|
||||||
|
|
||||||
|
ERR_UNKNOWN_PREFIX EXCEPTION;
|
||||||
|
CODE_UNKNOWN_PREFIX CONSTANT PLS_INTEGER := -20013;
|
||||||
|
MSG_UNKNOWN_PREFIX VARCHAR2(4000) := 'Unknown prefix';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_UNKNOWN_PREFIX
|
||||||
|
,CODE_UNKNOWN_PREFIX);
|
||||||
|
|
||||||
|
ERR_TABLE_NOT_EXISTS EXCEPTION;
|
||||||
|
CODE_TABLE_NOT_EXISTS CONSTANT PLS_INTEGER := -20014;
|
||||||
|
MSG_TABLE_NOT_EXISTS VARCHAR2(4000) := 'Table does not exist';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_TABLE_NOT_EXISTS
|
||||||
|
,CODE_TABLE_NOT_EXISTS);
|
||||||
|
|
||||||
|
ERR_COLUMN_NOT_EXISTS EXCEPTION;
|
||||||
|
CODE_COLUMN_NOT_EXISTS CONSTANT PLS_INTEGER := -20015;
|
||||||
|
MSG_COLUMN_NOT_EXISTS VARCHAR2(4000) := 'Column does not exist in table';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_COLUMN_NOT_EXISTS
|
||||||
|
,CODE_COLUMN_NOT_EXISTS);
|
||||||
|
|
||||||
|
ERR_UNSUPPORTED_DATA_TYPE EXCEPTION;
|
||||||
|
CODE_UNSUPPORTED_DATA_TYPE CONSTANT PLS_INTEGER := -20016;
|
||||||
|
MSG_UNSUPPORTED_DATA_TYPE VARCHAR2(4000) := 'Unsupported data type';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_UNSUPPORTED_DATA_TYPE
|
||||||
|
,CODE_UNSUPPORTED_DATA_TYPE);
|
||||||
|
|
||||||
|
ERR_MISSING_SOURCE_KEY EXCEPTION;
|
||||||
|
CODE_MISSING_SOURCE_KEY CONSTANT PLS_INTEGER := -20017;
|
||||||
|
MSG_MISSING_SOURCE_KEY VARCHAR2(4000) := 'The Source was not found in parent table A_SOURCE';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MISSING_SOURCE_KEY
|
||||||
|
,CODE_MISSING_SOURCE_KEY);
|
||||||
|
|
||||||
|
ERR_NULL_SOURCE_FILE_CONFIG_KEY EXCEPTION;
|
||||||
|
CODE_NULL_SOURCE_FILE_CONFIG_KEY CONSTANT PLS_INTEGER := -20018;
|
||||||
|
MSG_NULL_SOURCE_FILE_CONFIG_KEY VARCHAR2(4000) := 'No entry in A_SOURCE_FILE_CONFIG table for specified A_SOURCE_FILE_CONFIG_KEY';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_NULL_SOURCE_FILE_CONFIG_KEY
|
||||||
|
,CODE_NULL_SOURCE_FILE_CONFIG_KEY);
|
||||||
|
|
||||||
|
ERR_DUPLICATED_SOURCE_KEY EXCEPTION;
|
||||||
|
CODE_DUPLICATED_SOURCE_KEY CONSTANT PLS_INTEGER := -20019;
|
||||||
|
MSG_DUPLICATED_SOURCE_KEY VARCHAR2(4000) := 'The Source already exists in the A_SOURCE table';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_DUPLICATED_SOURCE_KEY
|
||||||
|
,CODE_DUPLICATED_SOURCE_KEY);
|
||||||
|
|
||||||
|
ERR_MISSING_CONTAINER_CONFIG EXCEPTION;
|
||||||
|
CODE_MISSING_CONTAINER_CONFIG CONSTANT PLS_INTEGER := -20020;
|
||||||
|
MSG_MISSING_CONTAINER_CONFIG VARCHAR2(4000) := 'No match in A_SOURCE_FILE_CONFIG table where SOURCE_FILE_TYPE=''CONTAINER'' and specified SOURCE_FILE_ID';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MISSING_CONTAINER_CONFIG
|
||||||
|
,CODE_MISSING_CONTAINER_CONFIG);
|
||||||
|
|
||||||
|
ERR_MULTIPLE_CONTAINER_ENTRIES EXCEPTION;
|
||||||
|
CODE_MULTIPLE_CONTAINER_ENTRIES CONSTANT PLS_INTEGER := -20021;
|
||||||
|
MSG_MULTIPLE_CONTAINER_ENTRIES VARCHAR2(4000) := 'Multiple matches in A_SOURCE_FILE_CONFIG table where SOURCE_FILE_TYPE=''CONTAINER'' and specified SOURCE_FILE_ID';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MULTIPLE_CONTAINER_ENTRIES
|
||||||
|
,CODE_MULTIPLE_CONTAINER_ENTRIES);
|
||||||
|
|
||||||
|
ERR_WRONG_DESTINATION_PARAM EXCEPTION;
|
||||||
|
CODE_WRONG_DESTINATION_PARAM CONSTANT PLS_INTEGER := -20022;
|
||||||
|
MSG_WRONG_DESTINATION_PARAM VARCHAR2(4000) := 'Wrong destination parameter provided.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_WRONG_DESTINATION_PARAM
|
||||||
|
,CODE_WRONG_DESTINATION_PARAM);
|
||||||
|
|
||||||
|
ERR_FILE_NOT_EXISTS_ON_CLOUD EXCEPTION;
|
||||||
|
CODE_FILE_NOT_EXISTS_ON_CLOUD CONSTANT PLS_INTEGER := -20023;
|
||||||
|
MSG_FILE_NOT_EXISTS_ON_CLOUD VARCHAR2(4000) := 'File not exists on cloud.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_FILE_NOT_EXISTS_ON_CLOUD
|
||||||
|
,CODE_FILE_NOT_EXISTS_ON_CLOUD);
|
||||||
|
|
||||||
|
ERR_FILE_ALREADY_REGISTERED EXCEPTION;
|
||||||
|
CODE_FILE_ALREADY_REGISTERED CONSTANT PLS_INTEGER := -20024;
|
||||||
|
MSG_FILE_ALREADY_REGISTERED VARCHAR2(4000) := 'File already registered in A_SOURCE_FILE_RECEIVED table.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_FILE_ALREADY_REGISTERED
|
||||||
|
,CODE_FILE_ALREADY_REGISTERED);
|
||||||
|
|
||||||
|
ERR_WRONG_DATE_TIMESTAMP_FORMAT EXCEPTION;
|
||||||
|
CODE_WRONG_DATE_TIMESTAMP_FORMAT CONSTANT PLS_INTEGER := -20025;
|
||||||
|
MSG_WRONG_DATE_TIMESTAMP_FORMAT VARCHAR2(4000) := 'Provided DATE or TIMESTAMP format has errors (possible duplicated codes, ex: ''DD'').';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_WRONG_DATE_TIMESTAMP_FORMAT
|
||||||
|
,CODE_WRONG_DATE_TIMESTAMP_FORMAT);
|
||||||
|
|
||||||
|
ERR_ENVIRONMENT_NOT_SET EXCEPTION;
|
||||||
|
CODE_ENVIRONMENT_NOT_SET CONSTANT PLS_INTEGER := -20026;
|
||||||
|
MSG_ENVIRONMENT_NOT_SET VARCHAR2(4000) := 'EnvironmentID not set'
|
||||||
|
||cgBL||' Information about environment is needed to get proper configuration values.'
|
||||||
|
||cgBL||' It can be set up in two different ways:'
|
||||||
|
||cgBL||' 1. Set it on session level: execute DBMS_SESSION.SET_IDENTIFIER (client_id => ''dev'')'
|
||||||
|
||cgBL||' 2. Set it on configuration level: Insert into CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID,CONFIG_VARIABLE,CONFIG_VARIABLE_VALUE) values (''default'',''environment_id'',''dev'')'
|
||||||
|
||cgBL||' Session level setup (1.) takes precedence over configuration level one (2.)'
|
||||||
|
;
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_ENVIRONMENT_NOT_SET
|
||||||
|
,CODE_ENVIRONMENT_NOT_SET);
|
||||||
|
|
||||||
|
|
||||||
|
ERR_CONFIG_VARIABLE_NOT_SET EXCEPTION;
|
||||||
|
CODE_CONFIG_VARIABLE_NOT_SET CONSTANT PLS_INTEGER := -20027;
|
||||||
|
MSG_CONFIG_VARIABLE_NOT_SET VARCHAR2(4000) := 'Missing configuration value in A_FILE_MANAGER_CONFIG';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_CONFIG_VARIABLE_NOT_SET
|
||||||
|
,CODE_CONFIG_VARIABLE_NOT_SET);
|
||||||
|
|
||||||
|
ERR_NOT_INPUT_SOURCE_FILE_TYPE EXCEPTION;
|
||||||
|
CODE_NOT_INPUT_SOURCE_FILE_TYPE CONSTANT PLS_INTEGER := -20028;
|
||||||
|
MSG_NOT_INPUT_SOURCE_FILE_TYPE VARCHAR2(4000) := 'Archival can be executed only for A_SOURCE_FILE_CONFIG_KEY where SOURCE_FILE_TYPE=''INPUT''';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_NOT_INPUT_SOURCE_FILE_TYPE
|
||||||
|
,CODE_NOT_INPUT_SOURCE_FILE_TYPE);
|
||||||
|
|
||||||
|
ERR_EXP_DATA_FOR_ARCH_FAILED EXCEPTION;
|
||||||
|
CODE_EXP_DATA_FOR_ARCH_FAILED CONSTANT PLS_INTEGER := -20029;
|
||||||
|
MSG_EXP_DATA_FOR_ARCH_FAILED VARCHAR2(4000) := 'Export data for archival failed.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_EXP_DATA_FOR_ARCH_FAILED
|
||||||
|
,CODE_EXP_DATA_FOR_ARCH_FAILED);
|
||||||
|
|
||||||
|
ERR_RESTORE_FILE_FROM_TRASH EXCEPTION;
|
||||||
|
CODE_RESTORE_FILE_FROM_TRASH CONSTANT PLS_INTEGER := -20030;
|
||||||
|
MSG_RESTORE_FILE_FROM_TRASH VARCHAR2(4000) := 'Unexpected issues occured while archival process. Restoration of exported files failed.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_RESTORE_FILE_FROM_TRASH
|
||||||
|
,CODE_RESTORE_FILE_FROM_TRASH);
|
||||||
|
|
||||||
|
ERR_CHANGE_STAT_TO_ARCHIVED_FAILED EXCEPTION;
|
||||||
|
CODE_CHANGE_STAT_TO_ARCHIVED_FAILED CONSTANT PLS_INTEGER := -20031;
|
||||||
|
MSG_CHANGE_STAT_TO_ARCHIVED_FAILED VARCHAR2(4000) := 'Failed to change file status to: ARCHIVED in A_SOURCE_FILE_RECEIVED table.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_CHANGE_STAT_TO_ARCHIVED_FAILED
|
||||||
|
,CODE_CHANGE_STAT_TO_ARCHIVED_FAILED);
|
||||||
|
|
||||||
|
ERR_MOVE_FILE_TO_TRASH_FAILED EXCEPTION;
|
||||||
|
CODE_MOVE_FILE_TO_TRASH_FAILED CONSTANT PLS_INTEGER := -20032;
|
||||||
|
MSG_MOVE_FILE_TO_TRASH_FAILED VARCHAR2(4000) := 'FAILED to move file to TRASH before DROPPING it.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MOVE_FILE_TO_TRASH_FAILED
|
||||||
|
,CODE_MOVE_FILE_TO_TRASH_FAILED);
|
||||||
|
|
||||||
|
ERR_DROP_EXPORTED_FILES_FAILED EXCEPTION;
|
||||||
|
CODE_DROP_EXPORTED_FILES_FAILED CONSTANT PLS_INTEGER := -20033;
|
||||||
|
MSG_DROP_EXPORTED_FILES_FAILED VARCHAR2(4000) := 'FAILED to move file to TRASH before DROPPING it.';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_DROP_EXPORTED_FILES_FAILED
|
||||||
|
,CODE_DROP_EXPORTED_FILES_FAILED);
|
||||||
|
|
||||||
|
ERR_INVALID_BUCKET_AREA EXCEPTION;
|
||||||
|
CODE_INVALID_BUCKET_AREA CONSTANT PLS_INTEGER := -20034;
|
||||||
|
MSG_INVALID_BUCKET_AREA VARCHAR2(4000) := 'Invalid bucket area specified. Valid values: INBOX, ODS, DATA, ARCHIVE';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_INVALID_BUCKET_AREA
|
||||||
|
,CODE_INVALID_BUCKET_AREA);
|
||||||
|
|
||||||
|
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';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_INVALID_PARALLEL_DEGREE
|
||||||
|
,CODE_INVALID_PARALLEL_DEGREE);
|
||||||
|
|
||||||
|
ERR_PARALLEL_EXECUTION_FAILED EXCEPTION;
|
||||||
|
CODE_PARALLEL_EXECUTION_FAILED CONSTANT PLS_INTEGER := -20111;
|
||||||
|
MSG_PARALLEL_EXECUTION_FAILED VARCHAR2(4000) := 'Parallel execution failed';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_PARALLEL_EXECUTION_FAILED
|
||||||
|
,CODE_PARALLEL_EXECUTION_FAILED);
|
||||||
|
|
||||||
|
ERR_UNKNOWN EXCEPTION;
|
||||||
|
CODE_UNKNOWN CONSTANT PLS_INTEGER := -20999;
|
||||||
|
MSG_UNKNOWN VARCHAR2(4000) := 'Unknown Error Occured';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_UNKNOWN
|
||||||
|
,CODE_UNKNOWN);
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name LOG_PROCESS_EVENT
|
||||||
|
* @desc Insert a new log record into A_PROCESS_LOG table.
|
||||||
|
* Also outputs to console if gvConsoleLoggingEnabled = 'ON'.
|
||||||
|
* Respects logging level configuration (gvMinLogLevel).
|
||||||
|
* @example ENV_MANAGER.LOG_PROCESS_EVENT('Process completed successfully', 'INFO', 'pParam1=value1');
|
||||||
|
* @ex_rslt Record inserted into A_PROCESS_LOG table and optionally displayed in console output
|
||||||
|
**/
|
||||||
|
PROCEDURE LOG_PROCESS_EVENT (
|
||||||
|
pLogMessage VARCHAR2
|
||||||
|
,pLogLevel VARCHAR2 DEFAULT 'ERROR'
|
||||||
|
,pParameters VARCHAR2 DEFAULT NULL
|
||||||
|
,pProcessName VARCHAR2 DEFAULT 'FILE_MANAGER'
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name LOG_PROCESS_ERROR
|
||||||
|
* @desc Insert a detailed error record into A_PROCESS_LOG table with full stack trace, backtrace, and call stack.
|
||||||
|
* This procedure captures comprehensive error information for debugging purposes while
|
||||||
|
* allowing clean user-facing error messages to be raised separately.
|
||||||
|
* @param pLogMessage - Base error message description
|
||||||
|
* @param pParameters - Procedure parameters for context
|
||||||
|
* @param pProcessName - Name of the calling process/package
|
||||||
|
* @ex_rslt Record inserted into A_PROCESS_LOG table with complete error stack information
|
||||||
|
*/
|
||||||
|
PROCEDURE LOG_PROCESS_ERROR (
|
||||||
|
pLogMessage VARCHAR2
|
||||||
|
,pParameters VARCHAR2 DEFAULT NULL
|
||||||
|
,pProcessName VARCHAR2 DEFAULT 'FILE_MANAGER'
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name INIT_ERRORS
|
||||||
|
* @desc Loads data into Errors array.
|
||||||
|
* Errors array is a list of Record(Error_Code, Error_Message) index by Error_Code.
|
||||||
|
* Called automatically during package initialization.
|
||||||
|
* @example Called automatically when package is first referenced
|
||||||
|
* @ex_rslt Errors array populated with all error codes and messages
|
||||||
|
**/
|
||||||
|
PROCEDURE INIT_ERRORS;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_DEFAULT_ENV
|
||||||
|
* @desc It returns string with name of default environment.
|
||||||
|
* Return string is A_FILE_MANAGER_CONFIG.ENVIRONMENT_ID value.
|
||||||
|
* @example select ENV_MANAGER.GET_DEFAULT_ENV() from dual;
|
||||||
|
* @ex_rslt dev
|
||||||
|
**/
|
||||||
|
FUNCTION GET_DEFAULT_ENV
|
||||||
|
RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name INIT_VARIABLES
|
||||||
|
* @desc For specified pEnv parameter (A_FILE_MANAGER_CONFIG.ENVIRONMENT_ID)
|
||||||
|
* Assign values to following global package variables:
|
||||||
|
* - gvNameSpace
|
||||||
|
* - gvRegion
|
||||||
|
* - gvCredentialName
|
||||||
|
* - gvInboxBucketName
|
||||||
|
* - gvDataBucketName
|
||||||
|
* - gvArchiveBucketName
|
||||||
|
* - gvInboxBucketUri
|
||||||
|
* - gvDataBucketUri
|
||||||
|
* - gvArchiveBucketUri
|
||||||
|
* - gvLoggingEnabled
|
||||||
|
* - gvMinLogLevel
|
||||||
|
* - gvDefaultDateFormat
|
||||||
|
* - gvConsoleLoggingEnabled
|
||||||
|
**/
|
||||||
|
PROCEDURE INIT_VARIABLES(
|
||||||
|
pEnv VARCHAR2
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_ERROR_MESSAGE
|
||||||
|
* @desc It returns string with error message for specified pCode (Error_Code).
|
||||||
|
* Error message is take from Errors Array loaded by INIT_ERRORS procedure
|
||||||
|
* @example select ENV_MANAGER.GET_ERROR_MESSAGE(pCode => -20009) from dual;
|
||||||
|
* @ex_rslt File not found on the cloud
|
||||||
|
**/
|
||||||
|
FUNCTION GET_ERROR_MESSAGE(
|
||||||
|
pCode PLS_INTEGER
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_ERROR_STACK
|
||||||
|
* @desc It returns string with all possible error stack info.
|
||||||
|
* Error message is take from Errors Array loaded by INIT_ERRORS procedure
|
||||||
|
* @example
|
||||||
|
* select ENV_MANAGER.GET_ERROR_STACK(
|
||||||
|
* pFormat => 'OUTPUT'
|
||||||
|
* ,pCode => -20009
|
||||||
|
* ,pSourceFileReceivedKey => NULL)
|
||||||
|
* from dual
|
||||||
|
* @ex_rslt
|
||||||
|
* ------------------------------------------------------+
|
||||||
|
* Error Message:
|
||||||
|
* ORA-0000: normal, successful completion
|
||||||
|
* -------------------------------------------------------
|
||||||
|
* Error Stack:
|
||||||
|
* -------------------------------------------------------
|
||||||
|
* Error Backtrace:
|
||||||
|
* ------------------------------------------------------+
|
||||||
|
**/
|
||||||
|
FUNCTION GET_ERROR_STACK(
|
||||||
|
pFormat VARCHAR2
|
||||||
|
,pCode PLS_INTEGER
|
||||||
|
,pSourceFileReceivedKey CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY%TYPE DEFAULT NULL
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name FORMAT_PARAMETERS
|
||||||
|
* @desc Formats parameter list for logging purposes.
|
||||||
|
* Converts SYS.ODCIVARCHAR2LIST to formatted string with proper NULL handling.
|
||||||
|
* @example select ENV_MANAGER.FORMAT_PARAMETERS(SYS.ODCIVARCHAR2LIST('param1=value1', 'param2=NULL')) from dual;
|
||||||
|
* @ex_rslt param1=value1 ,
|
||||||
|
* param2=NULL
|
||||||
|
**/
|
||||||
|
FUNCTION FORMAT_PARAMETERS(
|
||||||
|
pParameterList SYS.ODCIVARCHAR2LIST
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name ANALYZE_VALIDATION_ERRORS
|
||||||
|
* @desc Analyzes CSV validation errors and generates detailed diagnostic report.
|
||||||
|
* Compares CSV structure with template table and provides specific error analysis.
|
||||||
|
* Includes suggested solutions for common validation issues.
|
||||||
|
* @param pValidationLogTable - Name of validation log table (e.g., VALIDATE$242_LOG)
|
||||||
|
* @param pTemplateSchema - Schema of template table (e.g., CT_ET_TEMPLATES)
|
||||||
|
* @param pTemplateTable - Name of template table (e.g., MOCK_PROC_TABLE)
|
||||||
|
* @param pCsvFileUri - URI of CSV file being validated
|
||||||
|
* @example SELECT ENV_MANAGER.ANALYZE_VALIDATION_ERRORS('VALIDATE$242_LOG', 'CT_ET_TEMPLATES', 'MOCK_PROC_TABLE', 'https://...') FROM DUAL;
|
||||||
|
* @ex_rslt Detailed validation analysis report with column mismatches and solutions
|
||||||
|
**/
|
||||||
|
FUNCTION ANALYZE_VALIDATION_ERRORS(
|
||||||
|
pValidationLogTable VARCHAR2,
|
||||||
|
pTemplateSchema VARCHAR2,
|
||||||
|
pTemplateTable VARCHAR2,
|
||||||
|
pCsvFileUri VARCHAR2
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
-- PACKAGE VERSION MANAGEMENT FUNCTIONS
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_VERSION
|
||||||
|
* @desc Returns the current version number of the ENV_MANAGER package.
|
||||||
|
* Uses semantic versioning format (MAJOR.MINOR.PATCH).
|
||||||
|
* @example SELECT ENV_MANAGER.GET_VERSION() FROM DUAL;
|
||||||
|
* @ex_rslt 3.0.0
|
||||||
|
**/
|
||||||
|
FUNCTION GET_VERSION RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_BUILD_INFO
|
||||||
|
* @desc Returns comprehensive build information including version, build date, and author.
|
||||||
|
* Formatted for display in logs or monitoring systems.
|
||||||
|
* @example SELECT ENV_MANAGER.GET_BUILD_INFO() FROM DUAL;
|
||||||
|
* @ex_rslt Package: ENV_MANAGER
|
||||||
|
* Version: 3.0.0
|
||||||
|
* Build Date: 2025-10-22 16: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.
|
||||||
|
* Shows evolution of package features over time.
|
||||||
|
* @example SELECT ENV_MANAGER.GET_VERSION_HISTORY() FROM DUAL;
|
||||||
|
* @ex_rslt ENV_MANAGER Version History:
|
||||||
|
* 3.0.0 (2025-10-22): Added package versioning system...
|
||||||
|
* 2.1.0 (2025-10-15): Added ANALYZE_VALIDATION_ERRORS function...
|
||||||
|
**/
|
||||||
|
FUNCTION GET_VERSION_HISTORY RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_PACKAGE_VERSION_INFO
|
||||||
|
* @desc Universal function to get formatted version information for any package.
|
||||||
|
* This centralized function is used by all packages in the system.
|
||||||
|
* @param pPackageName - Name of the package
|
||||||
|
* @param pVersion - Version string (MAJOR.MINOR.PATCH format)
|
||||||
|
* @param pBuildDate - Build date timestamp
|
||||||
|
* @param pAuthor - Package author name
|
||||||
|
* @example SELECT ENV_MANAGER.GET_PACKAGE_VERSION_INFO('FILE_MANAGER', '2.1.0', '2025-10-22 15:00:00', 'Grzegorz Michalski') FROM DUAL;
|
||||||
|
* @ex_rslt Package: FILE_MANAGER
|
||||||
|
* Version: 2.1.0
|
||||||
|
* Build Date: 2025-10-22 15:00:00
|
||||||
|
* Author: Grzegorz Michalski
|
||||||
|
**/
|
||||||
|
FUNCTION GET_PACKAGE_VERSION_INFO(
|
||||||
|
pPackageName VARCHAR2,
|
||||||
|
pVersion VARCHAR2,
|
||||||
|
pBuildDate VARCHAR2,
|
||||||
|
pAuthor VARCHAR2
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name FORMAT_VERSION_HISTORY
|
||||||
|
* @desc Universal function to format version history for any package.
|
||||||
|
* Adds package name header and proper formatting.
|
||||||
|
* @param pPackageName - Name of the package
|
||||||
|
* @param pVersionHistory - Complete version history text
|
||||||
|
* @example SELECT ENV_MANAGER.FORMAT_VERSION_HISTORY('FILE_MANAGER', '2.1.0 (2025-10-22): Export procedures...') FROM DUAL;
|
||||||
|
* @ex_rslt FILE_MANAGER Version History:
|
||||||
|
* 2.1.0 (2025-10-22): Export procedures...
|
||||||
|
**/
|
||||||
|
FUNCTION FORMAT_VERSION_HISTORY(
|
||||||
|
pPackageName VARCHAR2,
|
||||||
|
pVersionHistory VARCHAR2
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
-- PACKAGE HASH + CHANGE DETECTION FUNCTIONS
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name CALCULATE_PACKAGE_HASH
|
||||||
|
* @desc Calculates SHA256 hash of package source code from ALL_SOURCE.
|
||||||
|
* Returns hash for both SPEC and BODY (if exists).
|
||||||
|
* Used for automatic change detection.
|
||||||
|
* @param pPackageOwner - Schema owner of the package
|
||||||
|
* @param pPackageName - Name of the package
|
||||||
|
* @param pPackageType - Type of package code ('PACKAGE' for SPEC, 'PACKAGE BODY' for BODY)
|
||||||
|
* @example SELECT ENV_MANAGER.CALCULATE_PACKAGE_HASH('CT_MRDS', 'FILE_MANAGER', 'PACKAGE') FROM DUAL;
|
||||||
|
* @ex_rslt A7B3C5D9E8F1234567890ABCDEF... (64-character SHA256 hash)
|
||||||
|
**/
|
||||||
|
FUNCTION CALCULATE_PACKAGE_HASH(
|
||||||
|
pPackageOwner VARCHAR2,
|
||||||
|
pPackageName VARCHAR2,
|
||||||
|
pPackageType VARCHAR2 -- 'PACKAGE' or 'PACKAGE BODY'
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name TRACK_PACKAGE_VERSION
|
||||||
|
* @desc Records package version and source code hash in A_PACKAGE_VERSION_TRACKING table.
|
||||||
|
* Automatically detects if source code changed without version update.
|
||||||
|
* Should be called after every package deployment.
|
||||||
|
* @param pPackageOwner - Schema owner of the package
|
||||||
|
* @param pPackageName - Name of the package
|
||||||
|
* @param pPackageVersion - Current version from PACKAGE_VERSION constant
|
||||||
|
* @param pPackageBuildDate - Build date from PACKAGE_BUILD_DATE constant
|
||||||
|
* @param pPackageAuthor - Author from PACKAGE_AUTHOR constant
|
||||||
|
* @example EXEC ENV_MANAGER.TRACK_PACKAGE_VERSION('CT_MRDS', 'FILE_MANAGER', '3.2.0', '2025-10-22 16:30:00', 'Grzegorz Michalski');
|
||||||
|
* @ex_rslt Record inserted into A_PACKAGE_VERSION_TRACKING with change detection status
|
||||||
|
**/
|
||||||
|
PROCEDURE TRACK_PACKAGE_VERSION(
|
||||||
|
pPackageOwner VARCHAR2,
|
||||||
|
pPackageName VARCHAR2,
|
||||||
|
pPackageVersion VARCHAR2,
|
||||||
|
pPackageBuildDate VARCHAR2,
|
||||||
|
pPackageAuthor VARCHAR2
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name CHECK_PACKAGE_CHANGES
|
||||||
|
* @desc Checks if package source code has changed since last tracking.
|
||||||
|
* Compares current hash with last recorded hash in A_PACKAGE_VERSION_TRACKING.
|
||||||
|
* Returns detailed change detection report.
|
||||||
|
* @param pPackageOwner - Schema owner of the package
|
||||||
|
* @param pPackageName - Name of the package
|
||||||
|
* @example SELECT ENV_MANAGER.CHECK_PACKAGE_CHANGES('CT_MRDS', 'FILE_MANAGER') FROM DUAL;
|
||||||
|
* @ex_rslt WARNING: Package changed without version update!
|
||||||
|
* Last Version: 3.2.0
|
||||||
|
* Current Hash (SPEC): A7B3C5D9...
|
||||||
|
* Last Hash (SPEC): B8C4D6E0...
|
||||||
|
* RECOMMENDATION: Update PACKAGE_VERSION and PACKAGE_BUILD_DATE
|
||||||
|
**/
|
||||||
|
FUNCTION CHECK_PACKAGE_CHANGES(
|
||||||
|
pPackageOwner VARCHAR2,
|
||||||
|
pPackageName VARCHAR2
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_PACKAGE_HASH_INFO
|
||||||
|
* @desc Returns formatted information about package hash and tracking history.
|
||||||
|
* Includes current hash, last tracked hash, and change detection status.
|
||||||
|
* @param pPackageOwner - Schema owner of the package
|
||||||
|
* @param pPackageName - Name of the package
|
||||||
|
* @example SELECT ENV_MANAGER.GET_PACKAGE_HASH_INFO('CT_MRDS', 'FILE_MANAGER') FROM DUAL;
|
||||||
|
* @ex_rslt Package: CT_MRDS.FILE_MANAGER
|
||||||
|
* Current Version: 3.2.0
|
||||||
|
* Current Hash (SPEC): A7B3C5D9...
|
||||||
|
* Last Tracked: 2025-10-22 16:30:00
|
||||||
|
* Status: OK - No changes detected
|
||||||
|
**/
|
||||||
|
FUNCTION GET_PACKAGE_HASH_INFO(
|
||||||
|
pPackageOwner VARCHAR2,
|
||||||
|
pPackageName VARCHAR2
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
END ENV_MANAGER;
|
||||||
|
/
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,279 @@
|
|||||||
|
create or replace PACKAGE CT_MRDS.FILE_ARCHIVER
|
||||||
|
AUTHID CURRENT_USER
|
||||||
|
AS
|
||||||
|
/**
|
||||||
|
* General comment for package: Please put comments for functions and procedures as shown in below example.
|
||||||
|
* It is a standard.
|
||||||
|
* The structure of comment is used by GET_PACKAGE_DOCUMENTATION function
|
||||||
|
* which returns documentation text for confluence page (to Copy-Paste it).
|
||||||
|
**/
|
||||||
|
|
||||||
|
-- Example comment:
|
||||||
|
/**
|
||||||
|
* @name EX_PROCEDURE_NAME
|
||||||
|
* @desc Procedure description
|
||||||
|
* @example select LOGGING_AND_ERROR_MANAGER.EX_PROCEDURE_NAME(pParameter => 129) from dual;
|
||||||
|
* @ex_rslt Example Result
|
||||||
|
**/
|
||||||
|
|
||||||
|
-- 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_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
|
||||||
|
|
||||||
|
-- Version History (Latest changes first)
|
||||||
|
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
|
||||||
|
'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) ||
|
||||||
|
'3.1.2 (2026-02-06): Fixed missing PARTITION_YEAR/PARTITION_MONTH assignments in UPDATE statement and export query circular dependency (now filters by workflow_start instead of partition fields)' || CHR(13)||CHR(10) ||
|
||||||
|
'3.1.1 (2026-02-06): Fixed ORA-01422 error when DBMS_CLOUD.EXPORT_DATA creates multiple parquet files (parallel execution). Now stores archive directory prefix instead of individual filenames' || CHR(13)||CHR(10) ||
|
||||||
|
'3.1.0 (2026-01-29): Added function overloads for ARCHIVE_TABLE_DATA and GATHER_TABLE_STAT returning SQLCODE for Python library integration' || CHR(13)||CHR(10) ||
|
||||||
|
'3.0.0 (2026-01-27): MARS-828 - Added flexible archival strategies (MINIMUM_AGE_MONTHS with 0=current month, HYBRID) via ARCHIVAL_STRATEGY configuration' || 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-18): Enhanced ARCHIVE_TABLE_DATA with Hive-style partitioning support' || CHR(13)||CHR(10) ||
|
||||||
|
'1.0.0 (2025-09-15): Initial release with table archival and statistics gathering';
|
||||||
|
|
||||||
|
cgBL CONSTANT VARCHAR2(2) := ENV_MANAGER.cgBL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_TABLE_STAT
|
||||||
|
* @desc Private function to retrieve table statistics for archival processing.
|
||||||
|
* Returns A_TABLE_STAT record with table metadata and row counts.
|
||||||
|
* @param pSourceFileConfigKey - Configuration key for source file
|
||||||
|
* @return CT_MRDS.A_TABLE_STAT%ROWTYPE - Table statistics record
|
||||||
|
* @private Internal function for archival operations
|
||||||
|
**/
|
||||||
|
FUNCTION GET_TABLE_STAT(pSourceFileConfigKey IN NUMBER) RETURN CT_MRDS.A_TABLE_STAT%ROWTYPE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name ARCHIVE_TABLE_DATA
|
||||||
|
* @desc Wrapper procedure for DBMS_CLOUD.EXPORT_DATA.
|
||||||
|
* Exports data from table specified by pSourceFileConfigKey(A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY) into PARQUET file on OCI infrustructure.
|
||||||
|
* Each YEAR_MONTH pair goes to seperate file (implicit partitioning).
|
||||||
|
* TRASH policy is controlled by A_SOURCE_FILE_CONFIG.IS_KEEP_IN_TRASH column ('Y'=keep in TRASH, 'N'=delete immediately).
|
||||||
|
**/
|
||||||
|
PROCEDURE ARCHIVE_TABLE_DATA (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name FN_ARCHIVE_TABLE_DATA
|
||||||
|
* @desc Function wrapper for ARCHIVE_TABLE_DATA procedure.
|
||||||
|
* Returns SQLCODE for Python library integration.
|
||||||
|
* Calls the main ARCHIVE_TABLE_DATA procedure and captures execution result.
|
||||||
|
* TRASH policy is controlled by A_SOURCE_FILE_CONFIG.IS_KEEP_IN_TRASH column ('Y'=keep in TRASH, 'N'=delete immediately).
|
||||||
|
* @example SELECT FILE_ARCHIVER.FN_ARCHIVE_TABLE_DATA(pSourceFileConfigKey => 123) FROM DUAL;
|
||||||
|
* @ex_rslt 0 (success) or error code
|
||||||
|
**/
|
||||||
|
FUNCTION FN_ARCHIVE_TABLE_DATA (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GATHER_TABLE_STAT
|
||||||
|
* @desc Gather info about EXTERNAL TABLE specified by pSourceFileConfigKey parameter (A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY).
|
||||||
|
* Data is inserted into A_TABLE_STAT and A_TABLE_STAT_HIST.
|
||||||
|
**/
|
||||||
|
PROCEDURE GATHER_TABLE_STAT (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name FN_GATHER_TABLE_STAT
|
||||||
|
* @desc Function wrapper for GATHER_TABLE_STAT procedure.
|
||||||
|
* Returns SQLCODE for Python library integration.
|
||||||
|
* Calls the main GATHER_TABLE_STAT procedure and captures execution result.
|
||||||
|
* @example SELECT FILE_ARCHIVER.FN_GATHER_TABLE_STAT(pSourceFileConfigKey => 123) FROM DUAL;
|
||||||
|
* @ex_rslt 0 (success) or error code
|
||||||
|
**/
|
||||||
|
FUNCTION FN_GATHER_TABLE_STAT (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GATHER_TABLE_STAT_ALL
|
||||||
|
* @desc Multi-level batch statistics gathering procedure with three granularity levels.
|
||||||
|
* Processes configurations based on IS_ARCHIVE_ENABLED setting (when pOnlyEnabled=TRUE).
|
||||||
|
* Gathers statistics for external tables and inserts data into A_TABLE_STAT and A_TABLE_STAT_HIST.
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 1) Gather stats for specific configuration key (highest priority)
|
||||||
|
* @param pSourceKey - (LEVEL 2) Gather stats for all tables in source system (e.g., 'LM', 'C2D') (medium priority)
|
||||||
|
* @param pGatherAll - (LEVEL 3) When TRUE, gather stats for ALL tables across all sources (lowest priority)
|
||||||
|
* @param pOnlyEnabled - When TRUE (default), only process tables with IS_ARCHIVE_ENABLED='Y'
|
||||||
|
* @example -- Level 1: CALL FILE_ARCHIVER.GATHER_TABLE_STAT_ALL(pSourceFileConfigKey => 123);
|
||||||
|
* @example -- Level 2: CALL FILE_ARCHIVER.GATHER_TABLE_STAT_ALL(pSourceKey => 'LM');
|
||||||
|
* @example -- Level 3: CALL FILE_ARCHIVER.GATHER_TABLE_STAT_ALL(pGatherAll => TRUE);
|
||||||
|
* @example -- All tables regardless of IS_ARCHIVE_ENABLED: CALL FILE_ARCHIVER.GATHER_TABLE_STAT_ALL(pGatherAll => TRUE, pOnlyEnabled => FALSE);
|
||||||
|
**/
|
||||||
|
PROCEDURE GATHER_TABLE_STAT_ALL (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceKey IN CT_MRDS.A_SOURCE.A_SOURCE_KEY%TYPE DEFAULT NULL,
|
||||||
|
pGatherAll IN BOOLEAN DEFAULT FALSE,
|
||||||
|
pOnlyEnabled IN BOOLEAN DEFAULT TRUE
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name FN_GATHER_TABLE_STAT_ALL
|
||||||
|
* @desc Function wrapper for GATHER_TABLE_STAT_ALL procedure.
|
||||||
|
* Returns SQLCODE for Python library integration.
|
||||||
|
* Calls the main GATHER_TABLE_STAT_ALL procedure and captures execution result.
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 1) Gather stats for specific configuration key (highest priority)
|
||||||
|
* @param pSourceKey - (LEVEL 2) Gather stats for all tables in source system (medium priority)
|
||||||
|
* @param pGatherAll - (LEVEL 3) When TRUE, gather stats for ALL tables across all sources (lowest priority)
|
||||||
|
* @param pOnlyEnabled - When TRUE (default), only process tables with IS_ARCHIVE_ENABLED='Y'
|
||||||
|
* @example SELECT FILE_ARCHIVER.FN_GATHER_TABLE_STAT_ALL(pSourceKey => 'LM') FROM DUAL;
|
||||||
|
* @ex_rslt 0 (success) or error code
|
||||||
|
**/
|
||||||
|
FUNCTION FN_GATHER_TABLE_STAT_ALL (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceKey IN CT_MRDS.A_SOURCE.A_SOURCE_KEY%TYPE DEFAULT NULL,
|
||||||
|
pGatherAll IN BOOLEAN DEFAULT FALSE,
|
||||||
|
pOnlyEnabled IN BOOLEAN DEFAULT TRUE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name ARCHIVE_ALL
|
||||||
|
* @desc Multi-level batch archival procedure with three granularity levels.
|
||||||
|
* Only processes configurations where IS_ARCHIVE_ENABLED='Y'.
|
||||||
|
* TRASH policy for each table is controlled by individual IS_KEEP_IN_TRASH column.
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 1) Archive specific configuration key (highest priority)
|
||||||
|
* @param pSourceKey - (LEVEL 2) Archive all enabled tables for source system (e.g., 'LM', 'C2D') (medium priority)
|
||||||
|
* @param pArchiveAll - (LEVEL 3) When TRUE, archive ALL enabled tables across all sources (lowest priority)
|
||||||
|
* @example -- Level 1: CALL FILE_ARCHIVER.ARCHIVE_ALL(pSourceFileConfigKey => 123);
|
||||||
|
* @example -- Level 2: CALL FILE_ARCHIVER.ARCHIVE_ALL(pSourceKey => 'LM');
|
||||||
|
* @example -- Level 3: CALL FILE_ARCHIVER.ARCHIVE_ALL(pArchiveAll => TRUE);
|
||||||
|
**/
|
||||||
|
PROCEDURE ARCHIVE_ALL (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceKey IN CT_MRDS.A_SOURCE.A_SOURCE_KEY%TYPE DEFAULT NULL,
|
||||||
|
pArchiveAll IN BOOLEAN DEFAULT FALSE
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name FN_ARCHIVE_ALL
|
||||||
|
* @desc Function wrapper for ARCHIVE_ALL procedure.
|
||||||
|
* Returns SQLCODE for Python library integration.
|
||||||
|
* Calls the main ARCHIVE_ALL procedure and captures execution result.
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 1) Archive specific configuration key (highest priority)
|
||||||
|
* @param pSourceKey - (LEVEL 2) Archive all enabled tables for source system (medium priority)
|
||||||
|
* @param pArchiveAll - (LEVEL 3) When TRUE, archive ALL enabled tables across all sources (lowest priority)
|
||||||
|
* @example SELECT FILE_ARCHIVER.FN_ARCHIVE_ALL(pSourceKey => 'LM') FROM DUAL;
|
||||||
|
* @ex_rslt 0 (success) or error code
|
||||||
|
**/
|
||||||
|
FUNCTION FN_ARCHIVE_ALL (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceKey IN CT_MRDS.A_SOURCE.A_SOURCE_KEY%TYPE DEFAULT NULL,
|
||||||
|
pArchiveAll IN BOOLEAN DEFAULT FALSE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name RESTORE_FILE_FROM_TRASH
|
||||||
|
* @desc Restores files from TRASH folder back to ODS at three different granularity levels.
|
||||||
|
* Moves files from TRASH subfolder back to ODS subfolder in DATA bucket.
|
||||||
|
* Updates status from ARCHIVED_AND_TRASHED to INGESTED and clears archival metadata.
|
||||||
|
* @param pSourceFileReceivedKey - (LEVEL 3) Specific file to restore by A_SOURCE_FILE_RECEIVED_KEY (highest priority)
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 2) Restore all files for specific configuration key (medium priority)
|
||||||
|
* @param pRestoreAll - (LEVEL 1) When TRUE, restore ALL files with ARCHIVED_AND_TRASHED status (lowest priority)
|
||||||
|
* @example -- Restore single file: CALL FILE_ARCHIVER.RESTORE_FILE_FROM_TRASH(pSourceFileReceivedKey => 12345);
|
||||||
|
* @example -- Restore all files for config: CALL FILE_ARCHIVER.RESTORE_FILE_FROM_TRASH(pSourceFileConfigKey => 341);
|
||||||
|
* @example -- Restore all TRASH globally: CALL FILE_ARCHIVER.RESTORE_FILE_FROM_TRASH(pRestoreAll => TRUE);
|
||||||
|
**/
|
||||||
|
PROCEDURE RESTORE_FILE_FROM_TRASH (
|
||||||
|
pSourceFileReceivedKey IN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pRestoreAll IN BOOLEAN DEFAULT FALSE
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name RESTORE_FILE_FROM_TRASH
|
||||||
|
* @desc Function overload for RESTORE_FILE_FROM_TRASH procedure.
|
||||||
|
* Returns SQLCODE for Python library integration.
|
||||||
|
* Calls the main RESTORE_FILE_FROM_TRASH procedure and captures execution result.
|
||||||
|
* @param pSourceFileReceivedKey - (LEVEL 3) Specific file to restore by A_SOURCE_FILE_RECEIVED_KEY (highest priority)
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 2) Restore all files for specific configuration key (medium priority)
|
||||||
|
* @param pRestoreAll - (LEVEL 1) When TRUE, restore ALL files with ARCHIVED_AND_TRASHED status (lowest priority)
|
||||||
|
* @example SELECT FILE_ARCHIVER.RESTORE_FILE_FROM_TRASH(pSourceFileReceivedKey => 12345) FROM DUAL;
|
||||||
|
* @ex_rslt 0 (success) or error code
|
||||||
|
**/
|
||||||
|
FUNCTION RESTORE_FILE_FROM_TRASH (
|
||||||
|
pSourceFileReceivedKey IN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pRestoreAll IN BOOLEAN DEFAULT FALSE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name PURGE_TRASH_FOLDER
|
||||||
|
* @desc Deletes files from TRASH folder at three different granularity levels.
|
||||||
|
* Updates status from ARCHIVED_AND_TRASHED to ARCHIVED_AND_PURGED for all affected files.
|
||||||
|
* WARNING: This operation is irreversible - files are permanently deleted from TRASH.
|
||||||
|
* @param pSourceFileReceivedKey - (LEVEL 3) Specific file to delete by A_SOURCE_FILE_RECEIVED_KEY (highest priority)
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 2) Delete all files for specific configuration key (medium priority)
|
||||||
|
* @param pPurgeAll - (LEVEL 1) When TRUE, delete ALL files with ARCHIVED_AND_TRASHED status (lowest priority)
|
||||||
|
* @example -- Delete single file: CALL FILE_ARCHIVER.PURGE_TRASH_FOLDER(pSourceFileReceivedKey => 12345);
|
||||||
|
* @example -- Delete all files for config: CALL FILE_ARCHIVER.PURGE_TRASH_FOLDER(pSourceFileConfigKey => 341);
|
||||||
|
* @example -- Delete all TRASH globally: CALL FILE_ARCHIVER.PURGE_TRASH_FOLDER(pPurgeAll => TRUE);
|
||||||
|
**/
|
||||||
|
PROCEDURE PURGE_TRASH_FOLDER (
|
||||||
|
pSourceFileReceivedKey IN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pPurgeAll IN BOOLEAN DEFAULT FALSE
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name PURGE_TRASH_FOLDER
|
||||||
|
* @desc Function overload for PURGE_TRASH_FOLDER procedure.
|
||||||
|
* Returns SQLCODE for Python library integration.
|
||||||
|
* Calls the main PURGE_TRASH_FOLDER procedure and captures execution result.
|
||||||
|
* WARNING: This operation is irreversible - files are permanently deleted from TRASH.
|
||||||
|
* @param pSourceFileReceivedKey - (LEVEL 3) Specific file to delete by A_SOURCE_FILE_RECEIVED_KEY (highest priority)
|
||||||
|
* @param pSourceFileConfigKey - (LEVEL 2) Delete all files for specific configuration key (medium priority)
|
||||||
|
* @param pPurgeAll - (LEVEL 1) When TRUE, delete ALL files with ARCHIVED_AND_TRASHED status (lowest priority)
|
||||||
|
* @example SELECT FILE_ARCHIVER.PURGE_TRASH_FOLDER(pSourceFileReceivedKey => 12345) FROM DUAL;
|
||||||
|
* @ex_rslt 0 (success) or error code
|
||||||
|
**/
|
||||||
|
FUNCTION PURGE_TRASH_FOLDER (
|
||||||
|
pSourceFileReceivedKey IN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY%TYPE DEFAULT NULL,
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE DEFAULT NULL,
|
||||||
|
pPurgeAll IN BOOLEAN DEFAULT FALSE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
-- PACKAGE VERSION MANAGEMENT FUNCTIONS
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_VERSION
|
||||||
|
* @desc Returns the current version number of the FILE_ARCHIVER package.
|
||||||
|
* Uses semantic versioning format (MAJOR.MINOR.PATCH).
|
||||||
|
* @example SELECT FILE_ARCHIVER.GET_VERSION() FROM DUAL;
|
||||||
|
* @ex_rslt 2.0.0
|
||||||
|
**/
|
||||||
|
FUNCTION GET_VERSION 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_ARCHIVER.GET_BUILD_INFO() FROM DUAL;
|
||||||
|
* @ex_rslt Package: FILE_ARCHIVER
|
||||||
|
* Version: 2.0.0
|
||||||
|
* Build Date: 2025-10-22 16:45: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_ARCHIVER.GET_VERSION_HISTORY() FROM DUAL;
|
||||||
|
* @ex_rslt FILE_ARCHIVER Version History:
|
||||||
|
* 2.0.0 (2025-10-22): Added package versioning system...
|
||||||
|
**/
|
||||||
|
FUNCTION GET_VERSION_HISTORY RETURN VARCHAR2;
|
||||||
|
|
||||||
|
END;
|
||||||
|
|
||||||
|
/
|
||||||
2009
MARS_Packages/REL02_POST/MARS-1409/rollback_version/FILE_MANAGER.pkb
Normal file
2009
MARS_Packages/REL02_POST/MARS-1409/rollback_version/FILE_MANAGER.pkb
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,639 @@
|
|||||||
|
create or replace PACKAGE CT_MRDS.FILE_MANAGER
|
||||||
|
AUTHID CURRENT_USER
|
||||||
|
AS
|
||||||
|
/**
|
||||||
|
* General comment for package: Please put comments for functions and procedures as shown in below example.
|
||||||
|
* It is a standard.
|
||||||
|
* The structure of comment is used by GET_PACKAGE_DOCUMENTATION function
|
||||||
|
* which returns documentation text for confluence page (to Copy-Paste it).
|
||||||
|
**/
|
||||||
|
|
||||||
|
-- Example comment:
|
||||||
|
/**
|
||||||
|
* @name EX_PROCEDURE_NAME
|
||||||
|
* @desc Procedure description
|
||||||
|
* @example select FILE_MANAGER.EX_PROCEDURE_NAME(pParameter => 129) from dual;
|
||||||
|
* @ex_rslt Example Result
|
||||||
|
**/
|
||||||
|
|
||||||
|
-- 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_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
|
||||||
|
|
||||||
|
-- Version History (Latest changes first)
|
||||||
|
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
|
||||||
|
'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) ||
|
||||||
|
'3.3.0 (2025-11-26): MARS-1056 - Fixed VARCHAR2 definitions in GENERATE_EXTERNAL_TABLE_PARAMS to preserve CHAR/BYTE semantics from template tables' || CHR(13)||CHR(10) ||
|
||||||
|
'3.2.1 (2025-11-24): MARS-1049 - Added pEncoding parameter support for CSV character set specification' || CHR(13)||CHR(10) ||
|
||||||
|
'3.2.0 (2025-10-22): Added package versioning system using centralized ENV_MANAGER functions' || CHR(13)||CHR(10) ||
|
||||||
|
'3.1.0 (2025-10-20): Enhanced PROCESS_SOURCE_FILE with 6-step validation workflow' || CHR(13)||CHR(10) ||
|
||||||
|
'3.0.0 (2025-10-15): Separated export procedures into dedicated DATA_EXPORTER package' || CHR(13)||CHR(10) ||
|
||||||
|
'2.5.0 (2025-10-10): Added DELETE_SOURCE_CASCADE for safe configuration removal' || CHR(13)||CHR(10) ||
|
||||||
|
'2.0.0 (2025-09-25): Added official path patterns support (INBOX 3-level, ODS 2-level, ARCHIVE 2-level)' || CHR(13)||CHR(10) ||
|
||||||
|
'1.0.0 (2025-09-01): Initial release with file processing and validation capabilities';
|
||||||
|
|
||||||
|
TYPE tSourceFileReceived IS RECORD
|
||||||
|
(
|
||||||
|
A_SOURCE_FILE_RECEIVED_KEY CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY%TYPE,
|
||||||
|
A_SOURCE_FILE_CONFIG_KEY CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_CONFIG_KEY%TYPE,
|
||||||
|
SOURCE_FILE_PREFIX_INBOX VARCHAR2(430),
|
||||||
|
SOURCE_FILE_PREFIX_ODS VARCHAR2(430),
|
||||||
|
SOURCE_FILE_PREFIX_QUARANTINE VARCHAR2(430),
|
||||||
|
SOURCE_FILE_PREFIX_ARCHIVE VARCHAR2(430),
|
||||||
|
SOURCE_FILE_NAME CT_MRDS.A_SOURCE_FILE_RECEIVED.SOURCE_FILE_NAME%TYPE,
|
||||||
|
RECEPTION_DATE CT_MRDS.A_SOURCE_FILE_RECEIVED.RECEPTION_DATE%TYPE,
|
||||||
|
PROCESSING_STATUS CT_MRDS.A_SOURCE_FILE_RECEIVED.PROCESSING_STATUS%TYPE,
|
||||||
|
EXTERNAL_TABLE_NAME CT_MRDS.A_SOURCE_FILE_RECEIVED.EXTERNAL_TABLE_NAME%TYPE
|
||||||
|
);
|
||||||
|
|
||||||
|
cgBL CONSTANT VARCHAR2(2) := CHR(13)||CHR(10);
|
||||||
|
vgSourceFileConfigKey PLS_INTEGER;
|
||||||
|
vgMsgTmp VARCHAR2(32000);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_SOURCE_FILE_CONFIG
|
||||||
|
* @desc Get source file type by matching the source file name against source file type naming patterns
|
||||||
|
* or by specifying the id of a received source file.
|
||||||
|
* @example ...
|
||||||
|
* @ex_rslt "CT_MRDS.A_SOURCE_FILE_CONFIG%ROWTYPE"
|
||||||
|
**/
|
||||||
|
FUNCTION GET_SOURCE_FILE_CONFIG(pFileUri IN VARCHAR2 DEFAULT NULL
|
||||||
|
, pSourceFileReceivedKey IN NUMBER DEFAULT NULL
|
||||||
|
, pSourceFileConfigKey IN NUMBER DEFAULT NULL)
|
||||||
|
RETURN CT_MRDS.A_SOURCE_FILE_CONFIG%ROWTYPE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name REGISTER_SOURCE_FILE_RECEIVED
|
||||||
|
* @desc Register a newly received source file in A_SOURCE_FILE_RECEIVED table.
|
||||||
|
* This overload automatically determines source file type from the file name.
|
||||||
|
* It returns the value of A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY column for newly added record.
|
||||||
|
* @example vSourceFileReceivedKey := FILE_MANAGER.REGISTER_SOURCE_FILE_RECEIVED(pSourceFileReceivedName => 'INBOX/C2D/UC_DISSEM/UC_NMA_DISSEM/UC_NMA_DISSEM-277740.csv');
|
||||||
|
* @ex_rslt 3245
|
||||||
|
**/
|
||||||
|
FUNCTION REGISTER_SOURCE_FILE_RECEIVED (
|
||||||
|
pSourceFileReceivedName IN VARCHAR2
|
||||||
|
)
|
||||||
|
RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name REGISTER_SOURCE_FILE_RECEIVED
|
||||||
|
* @desc Register a new new source file in A_SOURCE_FILE_RECEIVED table based on pSourceFileReceivedName and pSourceFileConfig.
|
||||||
|
* Then it returns the value of A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY column for newly added record.
|
||||||
|
* @example vSourceFileReceivedKey := FILE_MANAGER.REGISTER_SOURCE_FILE_RECEIVED(
|
||||||
|
* pSourceFileReceivedName => 'INBOX/C2D/UC_DISSEM/UC_NMA_DISSEM/UC_NMA_DISSEM-277740.csv'
|
||||||
|
* ,pSourceFileConfig => ...A_SOURCE_FILE_CONFIG%ROWTYPE... );
|
||||||
|
* @ex_rslt 3245
|
||||||
|
**/
|
||||||
|
FUNCTION REGISTER_SOURCE_FILE_RECEIVED (
|
||||||
|
pSourceFileReceivedName IN VARCHAR2,
|
||||||
|
pSourceFileConfig IN CT_MRDS.A_SOURCE_FILE_CONFIG%ROWTYPE
|
||||||
|
)
|
||||||
|
RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name SET_SOURCE_FILE_RECEIVED_STATUS
|
||||||
|
* @desc Set status of file in A_SOURCE_FILE_RECEIVED table - PROCESSING_STATUS column
|
||||||
|
* based on A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY
|
||||||
|
* and provided value of pStatus parameter
|
||||||
|
* @example exec FILE_MANAGER.SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => 377, pStatus => 'READY_FOR_INGESTION');
|
||||||
|
**/
|
||||||
|
PROCEDURE SET_SOURCE_FILE_RECEIVED_STATUS(
|
||||||
|
pSourceFileReceivedKey IN PLS_INTEGER,
|
||||||
|
pStatus IN VARCHAR2
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_EXTERNAL_TABLE_COLUMNS
|
||||||
|
* @desc Function used to get string with all table columns definitions based on pTargetTableTemplate "TEMPLATE TABLE" name.
|
||||||
|
* It used for creating "EXTERNAL TABLE" using CREATE_EXTERNAL_TABLE procedure.
|
||||||
|
* @example select FILE_MANAGER.GET_EXTERNAL_TABLE_COLUMNS(pTargetTableTemplate => 'CT_ET_TEMPLATES.LM_STANDING_FACILITIES_HEADER') from dual;
|
||||||
|
* @ex_rslt "A_KEY" NUMBER(38,0) NOT NULL ENABLE,
|
||||||
|
* "A_WORKFLOW_HISTORY_KEY" NUMBER(38,0) NOT NULL ENABLE,
|
||||||
|
* "REV_NUMBER" NUMBER(28,0),
|
||||||
|
* "REF_DATE" DATE,
|
||||||
|
* "FREE_TEXT" VARCHAR2(1000 CHAR),
|
||||||
|
* "MLF_BS_TOTAL" NUMBER(28,10),
|
||||||
|
* "DF_BS_TOTAL" NUMBER(28,10),
|
||||||
|
* "MLF_SF_TOTAL" NUMBER(28,10),
|
||||||
|
* "DF_SF_TOTAL" NUMBER(28,10)
|
||||||
|
**/
|
||||||
|
FUNCTION GET_EXTERNAL_TABLE_COLUMNS (
|
||||||
|
pTargetTableTemplate IN VARCHAR2
|
||||||
|
)
|
||||||
|
RETURN CLOB;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name CREATE_EXTERNAL_TABLE
|
||||||
|
* @desc A wrapper procedure for DBMS_CLOUD.CREATE_EXTERNAL_TABLE which creates External Table
|
||||||
|
* MARS-1049: Added pEncoding parameter for CSV character set specification
|
||||||
|
* @param pEncoding - Character set encoding for CSV files (e.g., 'UTF8', 'WE8MSWIN1252')
|
||||||
|
* If provided, adds CHARACTERSET clause to external table definition
|
||||||
|
* @example
|
||||||
|
* begin
|
||||||
|
* FILE_MANAGER.CREATE_EXTERNAL_TABLE(
|
||||||
|
* pTableName => 'STANDING_FACILITIES_HEADER',
|
||||||
|
* pTemplateTableName => 'CT_ET_TEMPLATES.LM_STANDING_FACILITIES_HEADER',
|
||||||
|
* pPrefix => 'ODS/LM/STANDING_FACILITIES_HEADER/',
|
||||||
|
* pBucketUri => 'https://objectstorage.eu-frankfurt-1.oraclecloud.com/n/frcnomajoc7v/b/mrds_data_tst/o/',
|
||||||
|
* pFileName => NULL,
|
||||||
|
* pDelimiter => ',',
|
||||||
|
* pEncoding => 'UTF8'
|
||||||
|
* );
|
||||||
|
* end;
|
||||||
|
**/
|
||||||
|
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 -- MARS-1049: NOWY PARAMETR
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name CREATE_EXTERNAL_TABLE
|
||||||
|
* @desc Creates External Table for single file provided by
|
||||||
|
* pSourceFileReceivedKey parameter (A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY)
|
||||||
|
* @example exec FILE_MANAGER.CREATE_EXTERNAL_TABLE(pSourceFileReceivedKey => 377);;
|
||||||
|
**/
|
||||||
|
PROCEDURE CREATE_EXTERNAL_TABLE (
|
||||||
|
pSourceFileReceivedKey IN NUMBER
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name VALIDATE_SOURCE_FILE_RECEIVED
|
||||||
|
* @desc A wrapper procedure for DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE
|
||||||
|
* It validate External table build upon single file
|
||||||
|
* provided by pSourceFileReceivedKey parameter (A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY)
|
||||||
|
* @example exec FILE_MANAGER.VALIDATE_SOURCE_FILE_RECEIVED(pSourceFileReceivedKey => 377);
|
||||||
|
**/
|
||||||
|
PROCEDURE VALIDATE_SOURCE_FILE_RECEIVED
|
||||||
|
(
|
||||||
|
pSourceFileReceivedKey IN NUMBER
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name VALIDATE_EXTERNAL_TABLE
|
||||||
|
* @desc A wrapper function for DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE.
|
||||||
|
* It validates External Table provided by parameter pTableName.
|
||||||
|
* It returns: PASSED or FAILED.
|
||||||
|
* @example
|
||||||
|
* declare
|
||||||
|
* vStatus VARCHAR2(100);
|
||||||
|
* begin
|
||||||
|
* vStatus := FILE_MANAGER.VALIDATE_EXTERNAL_TABLE(pTableName => 'STANDING_FACILITIES_HEADER');
|
||||||
|
* DBMS_OUTPUT.PUT_LINE('vStatus = '||vStatus);
|
||||||
|
* end;
|
||||||
|
*
|
||||||
|
* @ex_rslt FAILED
|
||||||
|
**/
|
||||||
|
FUNCTION VALIDATE_EXTERNAL_TABLE(pTableName IN VARCHAR2)
|
||||||
|
RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name S_VALIDATE_EXTERNAL_TABLE
|
||||||
|
* @desc A function which checks if SELECT query reterns any rows.
|
||||||
|
* It trys to selects External Table provided by parameter pTableName.
|
||||||
|
* It returns: PASSED or FAILED.
|
||||||
|
* @example
|
||||||
|
* declare
|
||||||
|
* vStatus VARCHAR2(100);
|
||||||
|
* begin
|
||||||
|
* vStatus := FILE_MANAGER.S_VALIDATE_EXTERNAL_TABLE(pTableName => 'STANDING_FACILITIES_HEADER');
|
||||||
|
* DBMS_OUTPUT.PUT_LINE('vStatus = '||vStatus);
|
||||||
|
* end;
|
||||||
|
*
|
||||||
|
* @ex_rslt PASSED
|
||||||
|
**/
|
||||||
|
FUNCTION S_VALIDATE_EXTERNAL_TABLE(pTableName IN VARCHAR2)
|
||||||
|
RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name DROP_EXTERNAL_TABLE
|
||||||
|
* @desc It drops External Table for single file provided by
|
||||||
|
* pSourceFileReceivedKey parameter (A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY)
|
||||||
|
* @example exec FILE_MANAGER.DROP_EXTERNAL_TABLE(pSourceFileReceivedKey => 377);
|
||||||
|
**/
|
||||||
|
PROCEDURE DROP_EXTERNAL_TABLE (
|
||||||
|
pSourceFileReceivedKey IN NUMBER
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name COPY_FILE
|
||||||
|
* @desc It copies file provided by
|
||||||
|
* pSourceFileReceivedKey parameter (A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY)
|
||||||
|
* into destination provided by pDestination parameter.
|
||||||
|
* pDestination parameter allowed values are: 'ODS'
|
||||||
|
* @example exec FILE_MANAGER.COPY_FILE(pSourceFileReceivedKey => 377, pDestination => 'ODS');
|
||||||
|
**/
|
||||||
|
PROCEDURE COPY_FILE(
|
||||||
|
pSourceFileReceivedKey IN NUMBER,
|
||||||
|
pDestination IN VARCHAR2
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name MOVE_FILE
|
||||||
|
* @desc It moves file provided by
|
||||||
|
* pSourceFileReceivedKey parameter (A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY)
|
||||||
|
* into destination provided by pDestination parameter.
|
||||||
|
* pDestination parameter allowed values are: 'ODS', 'QUARANTINE'
|
||||||
|
* @example exec FILE_MANAGER.MOVE_FILE(pSourceFileReceivedKey => 377, pDestination => 'ODS');
|
||||||
|
**/
|
||||||
|
PROCEDURE MOVE_FILE(
|
||||||
|
pSourceFileReceivedKey IN NUMBER,
|
||||||
|
pDestination IN VARCHAR2
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name DELETE_FOLDER_CONTENTS
|
||||||
|
* @desc It deletes all files from specified folder in the cloud storage.
|
||||||
|
* The procedure lists all objects in the specified folder prefix and deletes them one by one.
|
||||||
|
* pBucketArea parameter specifies which bucket to use: 'INBOX', 'DATA', 'ARCHIVE'
|
||||||
|
* pFolderPrefix parameter specifies the folder path within the bucket (e.g., 'C2D/UC_DISSEM/UC_NMA_DISSEM/')
|
||||||
|
* @example exec FILE_MANAGER.DELETE_FOLDER_CONTENTS(pBucketArea => 'INBOX', pFolderPrefix => 'C2D/UC_DISSEM/UC_NMA_DISSEM/');
|
||||||
|
**/
|
||||||
|
PROCEDURE DELETE_FOLDER_CONTENTS(
|
||||||
|
pBucketArea IN VARCHAR2,
|
||||||
|
pFolderPrefix IN VARCHAR2
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name PROCESS_SOURCE_FILE
|
||||||
|
* @desc It process file provided by pSourceFileReceivedName parameter.
|
||||||
|
* Ubmrella procedure that calls:
|
||||||
|
* - REGISTER_SOURCE_FILE_RECEIVED;
|
||||||
|
* - CREATE_EXTERNAL_TABLE;
|
||||||
|
* - VALIDATE_SOURCE_FILE_RECEIVED;
|
||||||
|
* - DROP_EXTERNAL_TABLE;
|
||||||
|
* - MOVE_FILE;
|
||||||
|
* @example exec FILE_MANAGER.PROCESS_SOURCE_FILE(pSourceFileReceivedName => 'INBOX/C2D/UC_DISSEM/UC_NMA_DISSEM/UC_NMA_DISSEM-277740.csv');
|
||||||
|
**/
|
||||||
|
PROCEDURE PROCESS_SOURCE_FILE(pSourceFileReceivedName IN VARCHAR2)
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name PROCESS_SOURCE_FILE
|
||||||
|
* @desc It process file provided by pSourceFileReceivedName parameter and return processing result value.
|
||||||
|
* It returns (success/failure) => 0 / -(value).
|
||||||
|
* Ubmrella function that calls PROCESS_SOURCE_FILE procedure.
|
||||||
|
* @example
|
||||||
|
* declare
|
||||||
|
* vResult PLS_INTEGER;
|
||||||
|
* begin
|
||||||
|
* vResult := CT_MRDS.FILE_MANAGER.PROCESS_SOURCE_FILE(PSOURCEFILERECEIVEDNAME => 'INBOX/C2D/UC_DISSEM/UC_NMA_DISSEM/UC_NMA_DISSEM-277740.csv');
|
||||||
|
* DBMS_OUTPUT.PUT_LINE('vResult = ' || vResult);
|
||||||
|
* end;
|
||||||
|
* @ex_rslt 0
|
||||||
|
* -20021
|
||||||
|
**/
|
||||||
|
FUNCTION PROCESS_SOURCE_FILE(pSourceFileReceivedName IN VARCHAR2)
|
||||||
|
RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_DATE_FORMAT
|
||||||
|
* @desc Returns date format for specified template table name and column name.
|
||||||
|
* Date is taken from configuration A_COLUMN_DATE_FORMAT table.
|
||||||
|
* @example select FILE_MANAGER.GET_DATE_FORMAT(
|
||||||
|
* pTemplateTableName => 'STANDING_FACILITIES_HEADER',
|
||||||
|
* pColumnName => 'SNAPSHOT_DATE')
|
||||||
|
* from dual;
|
||||||
|
* @ex_rslt DD/MM/YYYY HH24:MI:SS
|
||||||
|
**/
|
||||||
|
FUNCTION GET_DATE_FORMAT(
|
||||||
|
pTemplateTableName IN VARCHAR2,
|
||||||
|
pColumnName IN VARCHAR2
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GENERATE_EXTERNAL_TABLE_PARAMS
|
||||||
|
* @desc It builds two strings: pColumnList and pFieldList for specified Template Table name, by parameter: pTemplateTableName.
|
||||||
|
* @example
|
||||||
|
* declare
|
||||||
|
* vColumnList CLOB;
|
||||||
|
* vFieldList CLOB;
|
||||||
|
* begin
|
||||||
|
* FILE_MANAGER.GENERATE_EXTERNAL_TABLE_PARAMS (
|
||||||
|
* pTemplateTableName => 'CT_ET_TEMPLATES.LM_STANDING_FACILITIES_HEADER'
|
||||||
|
* ,pColumnList => vColumnList
|
||||||
|
* ,pFieldList => vFieldList
|
||||||
|
* );
|
||||||
|
* DBMS_OUTPUT.PUT_LINE('vColumnList = '||vColumnList);
|
||||||
|
* DBMS_OUTPUT.PUT_LINE('vFieldList = '||vFieldList);
|
||||||
|
* end;
|
||||||
|
* /
|
||||||
|
**/
|
||||||
|
PROCEDURE GENERATE_EXTERNAL_TABLE_PARAMS (
|
||||||
|
pTemplateTableName IN VARCHAR2,
|
||||||
|
pColumnList OUT CLOB,
|
||||||
|
pFieldList OUT CLOB
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name ADD_SOURCE
|
||||||
|
* @desc Insert a new record to A_SOURCE table.
|
||||||
|
* pSourceKey is a PRIMARY KEY value.
|
||||||
|
**/
|
||||||
|
PROCEDURE ADD_SOURCE (
|
||||||
|
pSourceKey IN CT_MRDS.A_SOURCE.A_SOURCE_KEY%TYPE,
|
||||||
|
pSourceName IN CT_MRDS.A_SOURCE.SOURCE_NAME%TYPE
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name DELETE_SOURCE_CASCADE
|
||||||
|
* @desc Safely deletes a SOURCE specified by pSourceKey parameter from A_SOURCE table and all dependent tables:
|
||||||
|
* - A_SOURCE_FILE_CONFIG
|
||||||
|
* - A_SOURCE_FILE_RECEIVED
|
||||||
|
* - A_COLUMN_DATE_FORMAT (only if template table is not shared with other source systems)
|
||||||
|
* The procedure checks if template tables are shared before deleting date format configurations.
|
||||||
|
* If a template table is used by multiple source systems, date formats are preserved.
|
||||||
|
* @example CALL CT_MRDS.FILE_MANAGER.DELETE_SOURCE_CASCADE(pSourceKey => 'TEST_SYS');
|
||||||
|
**/
|
||||||
|
PROCEDURE DELETE_SOURCE_CASCADE (
|
||||||
|
pSourceKey IN CT_MRDS.A_SOURCE.A_SOURCE_KEY%TYPE
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_CONTAINER_SOURCE_FILE_CONFIG_KEY
|
||||||
|
* @desc For specified parameter pSourceFileId (A_SOURCE_FILE_CONFIG.SOURCE_FILE_ID)
|
||||||
|
* it returns A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY for related CONTAINER record.
|
||||||
|
* @example select FILE_MANAGER.GET_CONTAINER_SOURCE_FILE_CONFIG_KEY(
|
||||||
|
* pSourceFileId => 'UC_DISSEM')
|
||||||
|
* from dual;
|
||||||
|
* @ex_rslt 126
|
||||||
|
**/
|
||||||
|
FUNCTION GET_CONTAINER_SOURCE_FILE_CONFIG_KEY (
|
||||||
|
pSourceFileId IN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_ID%TYPE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_SOURCE_FILE_CONFIG_KEY
|
||||||
|
* @desc For specified input parameters,
|
||||||
|
* it returns A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY.
|
||||||
|
* @example select FILE_MANAGER.GET_SOURCE_FILE_CONFIG_KEY (
|
||||||
|
* pSourceFileType => 'INPUT'
|
||||||
|
* ,pSourceFileId => 'UC_DISSEM'
|
||||||
|
* ,pTableId => 'UC_NMA_DISSEM')
|
||||||
|
* from dual;
|
||||||
|
* @ex_rslt 126
|
||||||
|
**/
|
||||||
|
FUNCTION GET_SOURCE_FILE_CONFIG_KEY (
|
||||||
|
pSourceFileType IN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_TYPE%TYPE DEFAULT 'INPUT'
|
||||||
|
,pSourceFileId IN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_ID%TYPE
|
||||||
|
,pTableId IN CT_MRDS.A_SOURCE_FILE_CONFIG.TABLE_ID%TYPE
|
||||||
|
) RETURN PLS_INTEGER;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name ADD_SOURCE_FILE_CONFIG
|
||||||
|
* @desc Insert a new record to A_SOURCE_FILE_CONFIG table.
|
||||||
|
* MARS-1049: Added pEncoding parameter for CSV character set specification.
|
||||||
|
* @param pEncoding - Character set encoding for CSV files (e.g., 'UTF8', 'WE8MSWIN1252', 'EE8ISO8859P2')
|
||||||
|
* If NULL, no CHARACTERSET clause is added to external table definitions
|
||||||
|
* @example CALL CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||||
|
* pSourceKey => 'C2D', pSourceFileType => 'INPUT',
|
||||||
|
* pSourceFileId => 'UC_DISSEM', pTableId => 'METADATA_LOADS',
|
||||||
|
* pTemplateTableName => 'CT_ET_TEMPLATES.C2D_A_UC_DISSEM_METADATA_LOADS',
|
||||||
|
* pEncoding => 'UTF8'
|
||||||
|
* );
|
||||||
|
**/
|
||||||
|
PROCEDURE ADD_SOURCE_FILE_CONFIG (
|
||||||
|
pSourceKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_KEY%TYPE
|
||||||
|
,pSourceFileType IN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_TYPE%TYPE
|
||||||
|
,pSourceFileId IN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_ID%TYPE
|
||||||
|
,pSourceFileDesc IN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_DESC%TYPE
|
||||||
|
,pSourceFileNamePattern IN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_NAME_PATTERN%TYPE
|
||||||
|
,pTableId IN CT_MRDS.A_SOURCE_FILE_CONFIG.TABLE_ID%TYPE DEFAULT NULL
|
||||||
|
,pTemplateTableName IN CT_MRDS.A_SOURCE_FILE_CONFIG.TEMPLATE_TABLE_NAME%TYPE DEFAULT NULL
|
||||||
|
,pContainerFileKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.CONTAINER_FILE_KEY%TYPE DEFAULT NULL
|
||||||
|
,pEncoding IN CT_MRDS.A_SOURCE_FILE_CONFIG.ENCODING%TYPE DEFAULT NULL -- MARS-1049: NOWY PARAMETR
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name ADD_COLUMN_DATE_FORMAT
|
||||||
|
* @desc Insert a new record to A_COLUMN_DATE_FORMAT table.
|
||||||
|
**/
|
||||||
|
PROCEDURE ADD_COLUMN_DATE_FORMAT (
|
||||||
|
pTemplateTableName IN CT_MRDS.A_COLUMN_DATE_FORMAT.TEMPLATE_TABLE_NAME%TYPE
|
||||||
|
,pColumnName IN CT_MRDS.A_COLUMN_DATE_FORMAT.COLUMN_NAME%TYPE
|
||||||
|
,pDateFormat IN CT_MRDS.A_COLUMN_DATE_FORMAT.DATE_FORMAT%TYPE
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_BUCKET_URI
|
||||||
|
* @desc Function used to get string with bucket http url.
|
||||||
|
* Possible input values for pBucketArea are: 'INBOX', 'ODS', 'DATA', 'ARCHIVE'
|
||||||
|
* @example select FILE_MANAGER.GET_BUCKET_URI(pBucketArea => 'ODS') from dual;
|
||||||
|
* @ex_rslt https://objectstorage.eu-frankfurt-1.oraclecloud.com/n/frcnomajoc7v/b/mrds_data_tst/o/
|
||||||
|
**/
|
||||||
|
FUNCTION GET_BUCKET_URI(pBucketArea VARCHAR2)
|
||||||
|
RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_DET_SOURCE_FILE_CONFIG_INFO
|
||||||
|
* @desc Function returns details about A_SOURCE_FILE_CONFIG record
|
||||||
|
* for specified pSourceFileConfigKey (A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY).
|
||||||
|
* If pIncludeContainerInfo is <> 0 it returns additional info about related Container config record (A_SOURCE_FILE_CONFIG)
|
||||||
|
* If pIncludeColumnFormatInfo is <> 0 it returns additional info about related ColumnFormat config record (A_COLUMN_DATE_FORMAT)
|
||||||
|
* @example select FILE_MANAGER.GET_DET_SOURCE_FILE_CONFIG_INFO (
|
||||||
|
* pSourceFileConfigKey => 128
|
||||||
|
* ,pIncludeContainerInfo => 1
|
||||||
|
* ,pIncludeColumnFormatInfo => 1
|
||||||
|
* ) from dual;
|
||||||
|
* @ex_rslt
|
||||||
|
* Details about File Configuration:
|
||||||
|
* --------------------------------
|
||||||
|
* A_SOURCE_FILE_CONFIG_KEY = 128
|
||||||
|
* A_SOURCE_KEY = C2D
|
||||||
|
* ...
|
||||||
|
* --------------------------------
|
||||||
|
*
|
||||||
|
* Details about related Container Config:
|
||||||
|
* --------------------------------
|
||||||
|
* A_SOURCE_FILE_CONFIG_KEY = 126
|
||||||
|
* A_SOURCE_KEY = C2D
|
||||||
|
* ...
|
||||||
|
* --------------------------------
|
||||||
|
*
|
||||||
|
* Column Date Format config entries:
|
||||||
|
* --------------------------------
|
||||||
|
* TEMPLATE_TABLE_NAME = CT_ET_TEMPLATES.C2D_UC_MA_DISSEM
|
||||||
|
* ...
|
||||||
|
* --------------------------------
|
||||||
|
**/
|
||||||
|
FUNCTION GET_DET_SOURCE_FILE_CONFIG_INFO (
|
||||||
|
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||||
|
,pIncludeContainerInfo IN PLS_INTEGER DEFAULT 1
|
||||||
|
,pIncludeColumnFormatInfo IN PLS_INTEGER DEFAULT 1
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_DET_SOURCE_FILE_RECEIVED_INFO
|
||||||
|
* @desc Function returns details about A_SOURCE_FILE_RECEIVED record
|
||||||
|
* for specified pSourceFileReceivedKey (A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY).
|
||||||
|
* If pIncludeConfigInfo is <> 0 it returns additional info about related Container config record (A_SOURCE_FILE_CONFIG)
|
||||||
|
* If pIncludeContainerInfo is <> 0 it returns additional info about related Container config record (A_SOURCE_FILE_CONFIG)
|
||||||
|
* If pIncludeColumnFormatInfo is <> 0 it returns additional info about related ColumnFormat config record (A_COLUMN_DATE_FORMAT)
|
||||||
|
* @example select FILE_MANAGER.GET_DET_SOURCE_FILE_RECEIVED_INFO (
|
||||||
|
* pSourceFileReceivedKey => 377
|
||||||
|
* ,pIncludeConfigInfo => 1
|
||||||
|
* ,pIncludeContainerInfo => 1
|
||||||
|
* ,pIncludeColumnFormatInfo => 1
|
||||||
|
* ) from dual;
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
FUNCTION GET_DET_SOURCE_FILE_RECEIVED_INFO (
|
||||||
|
pSourceFileReceivedKey IN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_SOURCE_FILE_RECEIVED_KEY%TYPE
|
||||||
|
,pIncludeConfigInfo IN PLS_INTEGER DEFAULT 1
|
||||||
|
,pIncludeContainerInfo IN PLS_INTEGER DEFAULT 1
|
||||||
|
,pIncludeColumnFormatInfo IN PLS_INTEGER DEFAULT 1
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_DET_USER_LOAD_OPERATIONS
|
||||||
|
* @desc Function returns details from USER_LOAD_OPERATIONS table
|
||||||
|
* for specified pOperationId.
|
||||||
|
* @example select FILE_MANAGER.GET_DET_USER_LOAD_OPERATIONS (pOperationId => 3608) from dual;
|
||||||
|
* @ex_rslt
|
||||||
|
* Details about USER_LOAD_OPERATIONS where ID = 3608
|
||||||
|
* --------------------------------
|
||||||
|
* ID = 3608
|
||||||
|
* TYPE = VALIDATE
|
||||||
|
* SID = 31260
|
||||||
|
* SERIAL# = 52915
|
||||||
|
* START_TIME = 2025-05-20 10.08.24.436983 EUROPE/BELGRADE
|
||||||
|
* UPDATE_TIME = 2025-05-20 10.08.24.458643 EUROPE/BELGRADE
|
||||||
|
* STATUS = FAILED
|
||||||
|
* OWNER_NAME = CT_MRDS
|
||||||
|
* TABLE_NAME = STANDING_FACILITIES_HEADER
|
||||||
|
* PARTITION_NAME =
|
||||||
|
* SUBPARTITION_NAME =
|
||||||
|
* FILE_URI_LIST =
|
||||||
|
* ROWS_LOADED =
|
||||||
|
* LOGFILE_TABLE = VALIDATE$3608_LOG
|
||||||
|
* BADFILE_TABLE = VALIDATE$3608_BAD
|
||||||
|
* STATUS_TABLE =
|
||||||
|
* TEMPEXT_TABLE =
|
||||||
|
* CREDENTIAL_NAME =
|
||||||
|
* EXPIRATION_TIME = 2025-05-22 10.08.24.436983000 EUROPE/BELGRADE
|
||||||
|
* --------------------------------
|
||||||
|
**/
|
||||||
|
FUNCTION GET_DET_USER_LOAD_OPERATIONS (
|
||||||
|
pOperationId PLS_INTEGER
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name ANALYZE_VALIDATION_ERRORS
|
||||||
|
* @desc Wrapper function that analyzes validation errors for a source file using its received key.
|
||||||
|
* Automatically derives template schema, table name, CSV URI and validation log table
|
||||||
|
* from file metadata and calls ENV_MANAGER.ANALYZE_VALIDATION_ERRORS.
|
||||||
|
* @example SELECT FILE_MANAGER.ANALYZE_VALIDATION_ERRORS(63) FROM DUAL;
|
||||||
|
* @ex_rslt Detailed validation analysis report with column mismatches and solutions
|
||||||
|
**/
|
||||||
|
FUNCTION ANALYZE_VALIDATION_ERRORS(
|
||||||
|
pSourceFileReceivedKey IN NUMBER
|
||||||
|
) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
-- PACKAGE VERSION MANAGEMENT FUNCTIONS
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name GET_VERSION
|
||||||
|
* @desc Returns the current version number of the FILE_MANAGER package.
|
||||||
|
* Uses semantic versioning format (MAJOR.MINOR.PATCH).
|
||||||
|
* @example SELECT FILE_MANAGER.GET_VERSION() FROM DUAL;
|
||||||
|
* @ex_rslt 3.2.0
|
||||||
|
**/
|
||||||
|
FUNCTION GET_VERSION 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.GET_BUILD_INFO() FROM DUAL;
|
||||||
|
* @ex_rslt Package: FILE_MANAGER
|
||||||
|
* Version: 3.2.0
|
||||||
|
* Build Date: 2025-10-22 16:30: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.GET_VERSION_HISTORY() FROM DUAL;
|
||||||
|
* @ex_rslt FILE_MANAGER Version History:
|
||||||
|
* 3.2.0 (2025-10-22): Added package versioning system...
|
||||||
|
**/
|
||||||
|
FUNCTION GET_VERSION_HISTORY RETURN VARCHAR2;
|
||||||
|
|
||||||
|
END;
|
||||||
|
|
||||||
|
/
|
||||||
|
|
||||||
|
/
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
WHENEVER SQLERROR CONTINUE
|
||||||
|
GRANT SELECT, INSERT, UPDATE, DELETE ON ct_ods.a_load_history TO ct_mrds;
|
||||||
|
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||||
|
|
||||||
|
-- Drop new trigger (MARS-1409 name) before restoring old trigger name
|
||||||
|
WHENEVER SQLERROR CONTINUE
|
||||||
|
drop TRIGGER ct_mrds.TRG_A_WORKFLOW_HISTORY;
|
||||||
|
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||||
|
|
||||||
|
create or replace TRIGGER ct_mrds.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.service_name = 'ODS' AND :new.workflow_name IN (
|
||||||
|
'w_ODS_LM_STANDING_FACILITIES', 'w_ODS_CSDB_DEBT', 'w_ODS_CSDB_DEBT_DAILY', 'w_ODS_CSDB_RATINGS_FULL',
|
||||||
|
'w_ODS_TMS_LIMIT_ACCESS', 'w_ODS_TMS_PORTFOLIO_ACCESS', 'w_ODS_TMS_PORTFOLIO_TREE',
|
||||||
|
'w_ODS_TMS_COLLATERAL_INVENTORY', 'w_ODS_TOP_FULLBIDARRAY_COMPILED', 'w_ODS_TOP_ANNOUNCEMENT',
|
||||||
|
'w_ODS_TOP_ALLOTMENT_MODIFICATIONS', 'w_ODS_TOP_ALLOTMENT', 'w_ODS_CEPH_PRICING', 'w_ODS_C2D_MPEC'
|
||||||
|
) THEN
|
||||||
|
IF :new.workflow_successful = 'Y' AND :new.workflow_successful <> NVL(:old.workflow_successful, 'N') THEN
|
||||||
|
CASE
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_LM_STANDING_FACILITIES' THEN v_workflow_name := 'w_ODS_LM_STANDING_FACILITY';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TMS_LIMIT_ACCESS' THEN v_workflow_name := 'w_ODS_TMS_RAR_LIMITACCESS';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TMS_PORTFOLIO_ACCESS' THEN v_workflow_name := 'w_ODS_TMS_RAR_PORTFOLIOACCESS';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TMS_PORTFOLIO_TREE' THEN v_workflow_name := 'w_ODS_TMS_RAR_PORTFOLIOTREE';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TMS_COLLATERAL_INVENTORY' THEN v_workflow_name := 'w_ODS_TMS_RAR_RARCOLLATERALINVENTORY';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TOP_FULLBIDARRAY_COMPILED' THEN v_workflow_name := 'w_ODS_TOP_FULLBIDARRAY_COMPILED';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TOP_ANNOUNCEMENT' THEN v_workflow_name := 'w_ODS_TOP_ANNOUNCEMENT';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TOP_ALLOTMENT_MODIFICATIONS' THEN v_workflow_name := 'w_ODS_TOP_ALLOTMENT_MODIFICATIONS';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_TOP_ALLOTMENT' THEN v_workflow_name := 'w_ODS_TOP_ALLOTMENT';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_CEPH_PRICING' THEN v_workflow_name := 'w_ODS_CEPH_PRICING';
|
||||||
|
WHEN :new.workflow_name = 'w_ODS_C2D_MPEC' THEN v_workflow_name := 'w_ODS_C2D_MPEC';
|
||||||
|
ELSE
|
||||||
|
v_workflow_name := :new.workflow_name;
|
||||||
|
END CASE;
|
||||||
|
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;
|
||||||
|
|
||||||
|
/
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Package Version Tracking
|
||||||
|
-- ============================================================================
|
||||||
|
-- Purpose: Record package versions in A_PACKAGE_VERSION_TRACKING table
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT Recording Package Versions
|
||||||
|
PROMPT ============================================================================
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
v_file_manager_version VARCHAR2(50);
|
||||||
|
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
|
||||||
|
v_file_manager_version := CT_MRDS.FILE_MANAGER.GET_VERSION();
|
||||||
|
v_file_manager_build := CT_MRDS.FILE_MANAGER.GET_BUILD_INFO();
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('FILE_MANAGER Version: ' || v_file_manager_version);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('FILE_MANAGER Build: ' || v_file_manager_build);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: Could not retrieve FILE_MANAGER version');
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- Get ENV_MANAGER version
|
||||||
|
BEGIN
|
||||||
|
v_env_manager_version := CT_MRDS.ENV_MANAGER.GET_VERSION();
|
||||||
|
v_env_manager_build := CT_MRDS.ENV_MANAGER.GET_BUILD_INFO();
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ENV_MANAGER Version: ' || v_env_manager_version);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ENV_MANAGER Build: ' || v_env_manager_build);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: Could not retrieve ENV_MANAGER version');
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- Get FILE_ARCHIVER version
|
||||||
|
BEGIN
|
||||||
|
v_file_archiver_version := CT_MRDS.FILE_ARCHIVER.GET_VERSION();
|
||||||
|
v_file_archiver_build := CT_MRDS.FILE_ARCHIVER.GET_BUILD_INFO();
|
||||||
|
|
||||||
|
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('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;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT Version Tracking Complete
|
||||||
|
PROMPT ============================================================================
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Package Version Verification
|
||||||
|
-- ============================================================================
|
||||||
|
-- Purpose: Verify package versions after installation
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
SET VERIFY OFF
|
||||||
|
SET FEEDBACK OFF
|
||||||
|
SET ECHO OFF
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT Package Version Verification
|
||||||
|
PROMPT ============================================================================
|
||||||
|
|
||||||
|
-- FILE_MANAGER version
|
||||||
|
PROMPT
|
||||||
|
PROMPT CT_MRDS.FILE_MANAGER Package:
|
||||||
|
SELECT CT_MRDS.FILE_MANAGER.GET_VERSION() AS VERSION FROM DUAL;
|
||||||
|
SELECT CT_MRDS.FILE_MANAGER.GET_BUILD_INFO() AS BUILD_INFO FROM DUAL;
|
||||||
|
|
||||||
|
-- ENV_MANAGER version
|
||||||
|
PROMPT
|
||||||
|
PROMPT CT_MRDS.ENV_MANAGER Package:
|
||||||
|
SELECT CT_MRDS.ENV_MANAGER.GET_VERSION() AS VERSION FROM DUAL;
|
||||||
|
SELECT CT_MRDS.ENV_MANAGER.GET_BUILD_INFO() AS BUILD_INFO FROM DUAL;
|
||||||
|
|
||||||
|
-- Package compilation status
|
||||||
|
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', 'FILE_ARCHIVER')
|
||||||
|
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
|
||||||
|
ORDER BY object_name, object_type;
|
||||||
|
|
||||||
|
-- Check for compilation errors
|
||||||
|
PROMPT
|
||||||
|
PROMPT Compilation Errors (if any):
|
||||||
|
SELECT name, type, line, position, text
|
||||||
|
FROM user_errors
|
||||||
|
WHERE name IN ('FILE_MANAGER', 'ENV_MANAGER', 'FILE_ARCHIVER')
|
||||||
|
ORDER BY name, type, line, position;
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT Verification Complete
|
||||||
|
PROMPT ============================================================================
|
||||||
5
MARS_Packages/REL03/MARS-1005/.gitignore
vendored
Normal file
5
MARS_Packages/REL03/MARS-1005/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# Exclude temporary folders from version control
|
||||||
|
confluence/
|
||||||
|
log/
|
||||||
|
test/
|
||||||
|
mock_data/
|
||||||
618
MARS_Packages/REL03/MARS-1005/01_MARS_1005_export_top_data.sql
Normal file
618
MARS_Packages/REL03/MARS-1005/01_MARS_1005_export_top_data.sql
Normal file
@@ -0,0 +1,618 @@
|
|||||||
|
-- =====================================================================================
|
||||||
|
-- Script: 01_MARS_1005_export_top_data.sql
|
||||||
|
-- Purpose: Export OU_TOP historical data to ODS bucket (DATA bucket, CSV format)
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Created: 2026-03-06
|
||||||
|
-- MARS Issue: MARS-1005
|
||||||
|
-- Target: mrds_data_dev/ODS/TOP/
|
||||||
|
-- Tables:
|
||||||
|
-- 1. OU_TOP.LEGACY_ALLOTMENT -> ODS/TOP/TOP_ALLOTMENT
|
||||||
|
-- 2. OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_HEADER -> ODS/TOP/TOP_ALLOTMENT_MODIFICATION_HEADER
|
||||||
|
-- 3. OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_ITEM -> ODS/TOP/TOP_ALLOTMENT_MODIFICATION_ITEM
|
||||||
|
-- 4. OU_TOP.LEGACY_ANNOUNCEMENT -> ODS/TOP/TOP_ANNOUNCEMENT
|
||||||
|
-- 5. OU_TOP.LEGACY_FBL_ITEM -> ODS/TOP/TOP_FULLBIDLIST_ITEM
|
||||||
|
-- 6. OU_TOP.LEGACY_FULLBID_ARRAY_COMPILED -> ODS/TOP/TOP_FULLBID_ARRAY_COMPILED
|
||||||
|
-- =====================================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED;
|
||||||
|
SET TIMING ON;
|
||||||
|
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT MARS-1005: OU_TOP Historical Data Export
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT Export Strategy:
|
||||||
|
PROMPT - Source: OU_TOP schema tables (operational database)
|
||||||
|
PROMPT - Target: DATA/ODS bucket as CSV files
|
||||||
|
PROMPT - Method: DATA_EXPORTER.EXPORT_TABLE_DATA
|
||||||
|
PROMPT - Registration: Files registered in A_SOURCE_FILE_RECEIVED
|
||||||
|
PROMPT - Path Structure: ODS/TOP/TOP_*/
|
||||||
|
PROMPT Tables (6):
|
||||||
|
PROMPT ALLOTMENT, ALLOTMENT_MODIFICATION_HEADER, ALLOTMENT_MODIFICATION_ITEM,
|
||||||
|
PROMPT ANNOUNCEMENT, FBL_ITEM (->TOP_FULLBIDLIST_ITEM), FULLBID_ARRAY_COMPILED
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
|
||||||
|
-- Log export start
|
||||||
|
INSERT INTO CT_MRDS.A_PROCESS_LOG (PROCESS_NAME, PROCEDURE_NAME, LOG_LEVEL, LOG_MESSAGE, PROCEDURE_PARAMETERS)
|
||||||
|
VALUES ('MARS-1005', 'EXPORT_TOP_DATA', 'INFO', 'Starting historical OU_TOP data export',
|
||||||
|
'Tables: ALLOTMENT, ALLOTMENT_MODIFICATION_HEADER, ALLOTMENT_MODIFICATION_ITEM, ANNOUNCEMENT, FBL_ITEM, FULLBID_ARRAY_COMPILED');
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT PRE-EXPORT CHECK: Verify Existing Files in ODS Bucket
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
|
||||||
|
-- Helper procedure (inline) to check one folder
|
||||||
|
-- Check 1: ALLOTMENT
|
||||||
|
DECLARE
|
||||||
|
vFileCount NUMBER := 0;
|
||||||
|
vRecordCount NUMBER := 0;
|
||||||
|
vLocationUri VARCHAR2(1000);
|
||||||
|
vPrintCount NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_ALLOTMENT/';
|
||||||
|
SELECT COUNT(*) INTO vFileCount
|
||||||
|
FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri))
|
||||||
|
WHERE object_name NOT LIKE '%/';
|
||||||
|
IF vFileCount > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('===============================================================================');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('PRE-EXPORT CHECK: TOP_ALLOTMENT files already exist in DATA bucket');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount);
|
||||||
|
FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)');
|
||||||
|
vPrintCount := vPrintCount + 1;
|
||||||
|
EXIT WHEN vPrintCount >= 10;
|
||||||
|
END LOOP;
|
||||||
|
IF vFileCount > 10 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ... and ' || (vFileCount - 10) || ' more file(s)');
|
||||||
|
END IF;
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_ALLOTMENT_ODS' INTO vRecordCount;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount);
|
||||||
|
EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('WARNING: Cannot count via external table: ' || SQLERRM);
|
||||||
|
END;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('===============================================================================');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('PRE-EXPORT CHECK: No existing TOP_ALLOTMENT files found - bucket is clean');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Check 2: ALLOTMENT_MODIFICATION_HEADER
|
||||||
|
DECLARE
|
||||||
|
vFileCount NUMBER := 0;
|
||||||
|
vRecordCount NUMBER := 0;
|
||||||
|
vLocationUri VARCHAR2(1000);
|
||||||
|
vPrintCount NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_HEADER/';
|
||||||
|
SELECT COUNT(*) INTO vFileCount
|
||||||
|
FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri))
|
||||||
|
WHERE object_name NOT LIKE '%/';
|
||||||
|
IF vFileCount > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('===============================================================================');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('PRE-EXPORT CHECK: TOP_ALLOTMENT_MODIFICATION_HEADER files already exist in DATA bucket');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount);
|
||||||
|
FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)');
|
||||||
|
vPrintCount := vPrintCount + 1;
|
||||||
|
EXIT WHEN vPrintCount >= 10;
|
||||||
|
END LOOP;
|
||||||
|
IF vFileCount > 10 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ... and ' || (vFileCount - 10) || ' more file(s)');
|
||||||
|
END IF;
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_ALLOTMENT_MODIFICATION_HEADER_ODS' INTO vRecordCount;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount);
|
||||||
|
EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('WARNING: Cannot count via external table: ' || SQLERRM);
|
||||||
|
END;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('===============================================================================');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('PRE-EXPORT CHECK: No existing TOP_ALLOTMENT_MODIFICATION_HEADER files found - bucket is clean');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Check 3: ALLOTMENT_MODIFICATION_ITEM
|
||||||
|
DECLARE
|
||||||
|
vFileCount NUMBER := 0;
|
||||||
|
vRecordCount NUMBER := 0;
|
||||||
|
vLocationUri VARCHAR2(1000);
|
||||||
|
vPrintCount NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_ITEM/';
|
||||||
|
SELECT COUNT(*) INTO vFileCount
|
||||||
|
FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri))
|
||||||
|
WHERE object_name NOT LIKE '%/';
|
||||||
|
IF vFileCount > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('===============================================================================');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('PRE-EXPORT CHECK: TOP_ALLOTMENT_MODIFICATION_ITEM files already exist in DATA bucket');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount);
|
||||||
|
FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)');
|
||||||
|
vPrintCount := vPrintCount + 1;
|
||||||
|
EXIT WHEN vPrintCount >= 10;
|
||||||
|
END LOOP;
|
||||||
|
IF vFileCount > 10 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ... and ' || (vFileCount - 10) || ' more file(s)');
|
||||||
|
END IF;
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_ALLOTMENT_MODIFICATION_ITEM_ODS' INTO vRecordCount;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount);
|
||||||
|
EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('WARNING: Cannot count via external table: ' || SQLERRM);
|
||||||
|
END;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('===============================================================================');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('PRE-EXPORT CHECK: No existing TOP_ALLOTMENT_MODIFICATION_ITEM files found - bucket is clean');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Check 4: ANNOUNCEMENT
|
||||||
|
DECLARE
|
||||||
|
vFileCount NUMBER := 0;
|
||||||
|
vRecordCount NUMBER := 0;
|
||||||
|
vLocationUri VARCHAR2(1000);
|
||||||
|
vPrintCount NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_ANNOUNCEMENT/';
|
||||||
|
SELECT COUNT(*) INTO vFileCount
|
||||||
|
FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri))
|
||||||
|
WHERE object_name NOT LIKE '%/';
|
||||||
|
IF vFileCount > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('===============================================================================');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('PRE-EXPORT CHECK: TOP_ANNOUNCEMENT files already exist in DATA bucket');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount);
|
||||||
|
FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)');
|
||||||
|
vPrintCount := vPrintCount + 1;
|
||||||
|
EXIT WHEN vPrintCount >= 10;
|
||||||
|
END LOOP;
|
||||||
|
IF vFileCount > 10 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ... and ' || (vFileCount - 10) || ' more file(s)');
|
||||||
|
END IF;
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_ANNOUNCEMENT_ODS' INTO vRecordCount;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount);
|
||||||
|
EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('WARNING: Cannot count via external table: ' || SQLERRM);
|
||||||
|
END;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('===============================================================================');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('PRE-EXPORT CHECK: No existing TOP_ANNOUNCEMENT files found - bucket is clean');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Check 5: FBL_ITEM (folder: TOP_FULLBIDLIST_ITEM)
|
||||||
|
DECLARE
|
||||||
|
vFileCount NUMBER := 0;
|
||||||
|
vRecordCount NUMBER := 0;
|
||||||
|
vLocationUri VARCHAR2(1000);
|
||||||
|
vPrintCount NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_FULLBIDLIST_ITEM/';
|
||||||
|
SELECT COUNT(*) INTO vFileCount
|
||||||
|
FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri))
|
||||||
|
WHERE object_name NOT LIKE '%/';
|
||||||
|
IF vFileCount > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('===============================================================================');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('PRE-EXPORT CHECK: TOP_FULLBIDLIST_ITEM files already exist in DATA bucket');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount);
|
||||||
|
FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)');
|
||||||
|
vPrintCount := vPrintCount + 1;
|
||||||
|
EXIT WHEN vPrintCount >= 10;
|
||||||
|
END LOOP;
|
||||||
|
IF vFileCount > 10 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ... and ' || (vFileCount - 10) || ' more file(s)');
|
||||||
|
END IF;
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_FULLBIDLIST_ITEM_ODS' INTO vRecordCount;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount);
|
||||||
|
EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('WARNING: Cannot count via external table: ' || SQLERRM);
|
||||||
|
END;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('===============================================================================');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('PRE-EXPORT CHECK: No existing TOP_FULLBIDLIST_ITEM files found - bucket is clean');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Check 6: FULLBID_ARRAY_COMPILED
|
||||||
|
DECLARE
|
||||||
|
vFileCount NUMBER := 0;
|
||||||
|
vRecordCount NUMBER := 0;
|
||||||
|
vLocationUri VARCHAR2(1000);
|
||||||
|
vPrintCount NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_FULLBID_ARRAY_COMPILED/';
|
||||||
|
SELECT COUNT(*) INTO vFileCount
|
||||||
|
FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri))
|
||||||
|
WHERE object_name NOT LIKE '%/';
|
||||||
|
IF vFileCount > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('===============================================================================');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('PRE-EXPORT CHECK: TOP_FULLBID_ARRAY_COMPILED files already exist in DATA bucket');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount);
|
||||||
|
FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)');
|
||||||
|
vPrintCount := vPrintCount + 1;
|
||||||
|
EXIT WHEN vPrintCount >= 10;
|
||||||
|
END LOOP;
|
||||||
|
IF vFileCount > 10 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ... and ' || (vFileCount - 10) || ' more file(s)');
|
||||||
|
END IF;
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_FULLBID_ARRAY_COMPILED_ODS' INTO vRecordCount;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount);
|
||||||
|
EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('WARNING: Cannot count via external table: ' || SQLERRM);
|
||||||
|
END;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('===============================================================================');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('PRE-EXPORT CHECK: No existing TOP_FULLBID_ARRAY_COMPILED files found - bucket is clean');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT PRE-EXPORT: Verify Source and Target Table Readiness
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
v1Source NUMBER := 0; v2Source NUMBER := 0; v3Source NUMBER := 0;
|
||||||
|
v4Source NUMBER := 0; v5Source NUMBER := 0; v6Source NUMBER := 0;
|
||||||
|
v1Target NUMBER := 0; v2Target NUMBER := 0; v3Target NUMBER := 0;
|
||||||
|
v4Target NUMBER := 0; v5Target NUMBER := 0; v6Target NUMBER := 0;
|
||||||
|
vTotalSource NUMBER := 0;
|
||||||
|
vTotalTarget NUMBER := 0;
|
||||||
|
|
||||||
|
-- safe_count: ONLY for ODS external tables
|
||||||
|
-- Returns 0 when no data file (ORA-29913, ORA-29400, KUP-13023); re-raises all other errors
|
||||||
|
PROCEDURE safe_count(pSql VARCHAR2, pResult OUT NUMBER) IS
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE pSql INTO pResult;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
IF SQLCODE IN (-29913, -29400) OR SQLERRM LIKE '%KUP-13023%' THEN
|
||||||
|
pResult := 0;
|
||||||
|
ELSE
|
||||||
|
RAISE;
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
BEGIN
|
||||||
|
-- Source counts (direct - if table does not exist, error propagates)
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT' INTO v1Source;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_HEADER' INTO v2Source;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_ITEM' INTO v3Source;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ANNOUNCEMENT' INTO v4Source;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_FBL_ITEM' INTO v5Source;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_FULLBID_ARRAY_COMPILED' INTO v6Source;
|
||||||
|
vTotalSource := v1Source + v2Source + v3Source + v4Source + v5Source + v6Source;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Source table record counts (pre-export):');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- ALLOTMENT: ' || v1Source);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- ALLOTMENT_MODIFICATION_HEADER: ' || v2Source);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- ALLOTMENT_MODIFICATION_ITEM: ' || v3Source);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- ANNOUNCEMENT: ' || v4Source);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- FBL_ITEM: ' || v5Source);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- FULLBID_ARRAY_COMPILED: ' || v6Source);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- TOTAL SOURCE: ' || vTotalSource);
|
||||||
|
|
||||||
|
-- Target external table counts
|
||||||
|
safe_count('SELECT COUNT(*) FROM ODS.TOP_ALLOTMENT_ODS', v1Target);
|
||||||
|
safe_count('SELECT COUNT(*) FROM ODS.TOP_ALLOTMENT_MODIFICATION_HEADER_ODS', v2Target);
|
||||||
|
safe_count('SELECT COUNT(*) FROM ODS.TOP_ALLOTMENT_MODIFICATION_ITEM_ODS', v3Target);
|
||||||
|
safe_count('SELECT COUNT(*) FROM ODS.TOP_ANNOUNCEMENT_ODS', v4Target);
|
||||||
|
safe_count('SELECT COUNT(*) FROM ODS.TOP_FULLBIDLIST_ITEM_ODS', v5Target);
|
||||||
|
safe_count('SELECT COUNT(*) FROM ODS.TOP_FULLBID_ARRAY_COMPILED_ODS', v6Target);
|
||||||
|
|
||||||
|
vTotalTarget := GREATEST(v1Target,0) + GREATEST(v2Target,0) + GREATEST(v3Target,0)
|
||||||
|
+ GREATEST(v4Target,0) + GREATEST(v5Target,0) + GREATEST(v6Target,0);
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Target external table record counts (pre-export):');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- TOP_ALLOTMENT_ODS: ' || v1Target);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- TOP_ALLOTMENT_MODIFICATION_HEADER_ODS: ' || v2Target);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- TOP_ALLOTMENT_MODIFICATION_ITEM_ODS: ' || v3Target);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- TOP_ANNOUNCEMENT_ODS: ' || v4Target);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- TOP_FULLBIDLIST_ITEM_ODS: ' || v5Target);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- TOP_FULLBID_ARRAY_COMPILED_ODS: ' || v6Target);
|
||||||
|
|
||||||
|
IF vTotalSource > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: Source tables contain data - ready for export');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: Source tables exist but contain no data - export will produce empty files');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF vTotalTarget = 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: Target external tables are clean - ready for fresh export');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: Target tables contain ' || vTotalTarget || ' records - may be re-run');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Proceeding with export...');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT TABLE 1/6: OU_TOP.LEGACY_ALLOTMENT -> ODS/TOP/TOP_ALLOTMENT
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA(
|
||||||
|
pSchemaName => 'OU_TOP',
|
||||||
|
pTableName => 'LEGACY_ALLOTMENT',
|
||||||
|
pKeyColumnName => 'A_ETL_LOAD_SET_FK', -- ETL key for data lookup
|
||||||
|
pBucketArea => 'ODS',
|
||||||
|
pFolderName => 'ODS/TOP/TOP_ALLOTMENT',
|
||||||
|
pTemplateTableName => 'CT_ET_TEMPLATES.TOP_ALLOTMENT',
|
||||||
|
pMaxFileSize => 104857600,
|
||||||
|
pRegisterExport => TRUE,
|
||||||
|
pProcessName => 'MARS-1005'
|
||||||
|
);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: ALLOTMENT export completed successfully');
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DECLARE vErrorMsg VARCHAR2(4000) := SUBSTR(SQLERRM, 1, 4000); BEGIN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: ALLOTMENT export failed: ' || vErrorMsg);
|
||||||
|
INSERT INTO CT_MRDS.A_PROCESS_LOG (guid, Username, Osuser, Machine, Module, process_name, procedure_name, procedure_parameters, log_level, log_message)
|
||||||
|
VALUES ('MARS-1005', USER, SYS_CONTEXT('USERENV','OS_USER'), SYS_CONTEXT('USERENV','HOST'),
|
||||||
|
'MARS-1005', 'MARS-1005', 'EXPORT_ALLOTMENT', NULL, 'ERROR', 'Export failed: ' || vErrorMsg);
|
||||||
|
COMMIT;
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT TABLE 2/6: OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_HEADER -> ODS/TOP/TOP_ALLOTMENT_MODIFICATION_HEADER
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA(
|
||||||
|
pSchemaName => 'OU_TOP',
|
||||||
|
pTableName => 'LEGACY_ALLOTMENT_MODIFICATION_HEADER',
|
||||||
|
pKeyColumnName => 'A_ETL_LOAD_SET_FK', -- ETL key for data lookup
|
||||||
|
pBucketArea => 'ODS',
|
||||||
|
pFolderName => 'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_HEADER',
|
||||||
|
pTemplateTableName => 'CT_ET_TEMPLATES.TOP_ALLOTMENT_MODIFICATION_HEADER',
|
||||||
|
pMaxFileSize => 104857600,
|
||||||
|
pRegisterExport => TRUE,
|
||||||
|
pProcessName => 'MARS-1005'
|
||||||
|
);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: ALLOTMENT_MODIFICATION_HEADER export completed successfully');
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DECLARE vErrorMsg VARCHAR2(4000) := SUBSTR(SQLERRM, 1, 4000); BEGIN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: ALLOTMENT_MODIFICATION_HEADER export failed: ' || vErrorMsg);
|
||||||
|
INSERT INTO CT_MRDS.A_PROCESS_LOG (guid, Username, Osuser, Machine, Module, process_name, procedure_name, procedure_parameters, log_level, log_message)
|
||||||
|
VALUES ('MARS-1005', USER, SYS_CONTEXT('USERENV','OS_USER'), SYS_CONTEXT('USERENV','HOST'),
|
||||||
|
'MARS-1005', 'MARS-1005', 'EXPORT_ALLOTMENT_MOD_HEADER', NULL, 'ERROR', 'Export failed: ' || vErrorMsg);
|
||||||
|
COMMIT;
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT TABLE 3/6: OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_ITEM -> ODS/TOP/TOP_ALLOTMENT_MODIFICATION_ITEM
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA(
|
||||||
|
pSchemaName => 'OU_TOP',
|
||||||
|
pTableName => 'LEGACY_ALLOTMENT_MODIFICATION_ITEM',
|
||||||
|
pKeyColumnName => 'A_ETL_LOAD_SET_FK', -- ETL key for data lookup
|
||||||
|
pBucketArea => 'ODS',
|
||||||
|
pFolderName => 'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_ITEM',
|
||||||
|
pTemplateTableName => 'CT_ET_TEMPLATES.TOP_ALLOTMENT_MODIFICATION_ITEM',
|
||||||
|
pMaxFileSize => 104857600,
|
||||||
|
pRegisterExport => TRUE,
|
||||||
|
pProcessName => 'MARS-1005'
|
||||||
|
);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: ALLOTMENT_MODIFICATION_ITEM export completed successfully');
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DECLARE vErrorMsg VARCHAR2(4000) := SUBSTR(SQLERRM, 1, 4000); BEGIN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: ALLOTMENT_MODIFICATION_ITEM export failed: ' || vErrorMsg);
|
||||||
|
INSERT INTO CT_MRDS.A_PROCESS_LOG (guid, Username, Osuser, Machine, Module, process_name, procedure_name, procedure_parameters, log_level, log_message)
|
||||||
|
VALUES ('MARS-1005', USER, SYS_CONTEXT('USERENV','OS_USER'), SYS_CONTEXT('USERENV','HOST'),
|
||||||
|
'MARS-1005', 'MARS-1005', 'EXPORT_ALLOTMENT_MOD_ITEM', NULL, 'ERROR', 'Export failed: ' || vErrorMsg);
|
||||||
|
COMMIT;
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT TABLE 4/6: OU_TOP.LEGACY_ANNOUNCEMENT -> ODS/TOP/TOP_ANNOUNCEMENT
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA(
|
||||||
|
pSchemaName => 'OU_TOP',
|
||||||
|
pTableName => 'LEGACY_ANNOUNCEMENT',
|
||||||
|
pKeyColumnName => 'A_ETL_LOAD_SET_FK', -- ETL key for data lookup
|
||||||
|
pBucketArea => 'ODS',
|
||||||
|
pFolderName => 'ODS/TOP/TOP_ANNOUNCEMENT',
|
||||||
|
pTemplateTableName => 'CT_ET_TEMPLATES.TOP_ANNOUNCEMENT',
|
||||||
|
pMaxFileSize => 104857600,
|
||||||
|
pRegisterExport => TRUE,
|
||||||
|
pProcessName => 'MARS-1005'
|
||||||
|
);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: ANNOUNCEMENT export completed successfully');
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DECLARE vErrorMsg VARCHAR2(4000) := SUBSTR(SQLERRM, 1, 4000); BEGIN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: ANNOUNCEMENT export failed: ' || vErrorMsg);
|
||||||
|
INSERT INTO CT_MRDS.A_PROCESS_LOG (guid, Username, Osuser, Machine, Module, process_name, procedure_name, procedure_parameters, log_level, log_message)
|
||||||
|
VALUES ('MARS-1005', USER, SYS_CONTEXT('USERENV','OS_USER'), SYS_CONTEXT('USERENV','HOST'),
|
||||||
|
'MARS-1005', 'MARS-1005', 'EXPORT_ANNOUNCEMENT', NULL, 'ERROR', 'Export failed: ' || vErrorMsg);
|
||||||
|
COMMIT;
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT TABLE 5/6: OU_TOP.LEGACY_FBL_ITEM -> ODS/TOP/TOP_FULLBIDLIST_ITEM
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA(
|
||||||
|
pSchemaName => 'OU_TOP',
|
||||||
|
pTableName => 'LEGACY_FBL_ITEM',
|
||||||
|
pKeyColumnName => 'A_ETL_LOAD_SET_FK', -- ETL key for data lookup
|
||||||
|
pBucketArea => 'ODS',
|
||||||
|
pFolderName => 'ODS/TOP/TOP_FULLBIDLIST_ITEM',
|
||||||
|
pTemplateTableName => 'CT_ET_TEMPLATES.TOP_FULLBIDLIST_ITEM',
|
||||||
|
pMaxFileSize => 104857600,
|
||||||
|
pRegisterExport => TRUE,
|
||||||
|
pProcessName => 'MARS-1005'
|
||||||
|
);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: FBL_ITEM export completed successfully');
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DECLARE vErrorMsg VARCHAR2(4000) := SUBSTR(SQLERRM, 1, 4000); BEGIN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: FBL_ITEM export failed: ' || vErrorMsg);
|
||||||
|
INSERT INTO CT_MRDS.A_PROCESS_LOG (guid, Username, Osuser, Machine, Module, process_name, procedure_name, procedure_parameters, log_level, log_message)
|
||||||
|
VALUES ('MARS-1005', USER, SYS_CONTEXT('USERENV','OS_USER'), SYS_CONTEXT('USERENV','HOST'),
|
||||||
|
'MARS-1005', 'MARS-1005', 'EXPORT_FBL_ITEM', NULL, 'ERROR', 'Export failed: ' || vErrorMsg);
|
||||||
|
COMMIT;
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT TABLE 6/6: OU_TOP.LEGACY_FULLBID_ARRAY_COMPILED -> ODS/TOP/TOP_FULLBID_ARRAY_COMPILED
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA(
|
||||||
|
pSchemaName => 'OU_TOP',
|
||||||
|
pTableName => 'LEGACY_FULLBID_ARRAY_COMPILED',
|
||||||
|
pKeyColumnName => 'A_ETL_LOAD_SET_FK', -- ETL key for data lookup
|
||||||
|
pBucketArea => 'ODS',
|
||||||
|
pFolderName => 'ODS/TOP/TOP_FULLBID_ARRAY_COMPILED',
|
||||||
|
pTemplateTableName => 'CT_ET_TEMPLATES.TOP_FULLBID_ARRAY_COMPILED',
|
||||||
|
pMaxFileSize => 104857600,
|
||||||
|
pRegisterExport => TRUE,
|
||||||
|
pProcessName => 'MARS-1005'
|
||||||
|
);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: FULLBID_ARRAY_COMPILED export completed successfully');
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DECLARE vErrorMsg VARCHAR2(4000) := SUBSTR(SQLERRM, 1, 4000); BEGIN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: FULLBID_ARRAY_COMPILED export failed: ' || vErrorMsg);
|
||||||
|
INSERT INTO CT_MRDS.A_PROCESS_LOG (guid, Username, Osuser, Machine, Module, process_name, procedure_name, procedure_parameters, log_level, log_message)
|
||||||
|
VALUES ('MARS-1005', USER, SYS_CONTEXT('USERENV','OS_USER'), SYS_CONTEXT('USERENV','HOST'),
|
||||||
|
'MARS-1005', 'MARS-1005', 'EXPORT_FULLBID_ARRAY_COMPILED', NULL, 'ERROR', 'Export failed: ' || vErrorMsg);
|
||||||
|
COMMIT;
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT Export Summary - Checking Results
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
|
||||||
|
-- Log completion
|
||||||
|
INSERT INTO CT_MRDS.A_PROCESS_LOG (PROCESS_NAME, PROCEDURE_NAME, LOG_LEVEL, LOG_MESSAGE)
|
||||||
|
VALUES ('MARS-1005', 'EXPORT_TOP_DATA', 'INFO', 'All OU_TOP historical exports completed successfully');
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT MARS-1005 OU_TOP Export Completed!
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT POST-EXPORT: Source vs Target Record Count Comparison
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
v1S NUMBER := 0; v2S NUMBER := 0; v3S NUMBER := 0;
|
||||||
|
v4S NUMBER := 0; v5S NUMBER := 0; v6S NUMBER := 0;
|
||||||
|
v1T NUMBER := 0; v2T NUMBER := 0; v3T NUMBER := 0;
|
||||||
|
v4T NUMBER := 0; v5T NUMBER := 0; v6T NUMBER := 0;
|
||||||
|
vTotalS NUMBER := 0;
|
||||||
|
vTotalT NUMBER := 0;
|
||||||
|
vMismatch NUMBER := 0;
|
||||||
|
|
||||||
|
-- safe_count: ONLY for ODS external tables
|
||||||
|
-- Returns 0 when no data file (ORA-29913, ORA-29400, KUP-13023); re-raises all other errors
|
||||||
|
PROCEDURE safe_count(pSql VARCHAR2, pResult OUT NUMBER) IS
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE pSql INTO pResult;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
IF SQLCODE IN (-29913, -29400) OR SQLERRM LIKE '%KUP-13023%' THEN
|
||||||
|
pResult := 0;
|
||||||
|
ELSE
|
||||||
|
RAISE;
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
|
||||||
|
PROCEDURE print_row(pTable VARCHAR2, pSrc NUMBER, pTgt NUMBER) IS
|
||||||
|
BEGIN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(
|
||||||
|
RPAD(pTable, 40) || ' | ' ||
|
||||||
|
RPAD(TO_CHAR(pSrc), 8) || ' | ' ||
|
||||||
|
RPAD(TO_CHAR(pTgt), 8) || ' | ' ||
|
||||||
|
CASE WHEN pSrc = pTgt THEN 'OK' ELSE 'MISMATCH' END);
|
||||||
|
END;
|
||||||
|
BEGIN
|
||||||
|
-- Source (direct - if table does not exist, error propagates)
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT' INTO v1S;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_HEADER' INTO v2S;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_ITEM' INTO v3S;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ANNOUNCEMENT' INTO v4S;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_FBL_ITEM' INTO v5S;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_FULLBID_ARRAY_COMPILED' INTO v6S;
|
||||||
|
vTotalS := v1S + v2S + v3S + v4S + v5S + v6S;
|
||||||
|
|
||||||
|
-- Target
|
||||||
|
safe_count('SELECT COUNT(*) FROM ODS.TOP_ALLOTMENT_ODS', v1T);
|
||||||
|
safe_count('SELECT COUNT(*) FROM ODS.TOP_ALLOTMENT_MODIFICATION_HEADER_ODS', v2T);
|
||||||
|
safe_count('SELECT COUNT(*) FROM ODS.TOP_ALLOTMENT_MODIFICATION_ITEM_ODS', v3T);
|
||||||
|
safe_count('SELECT COUNT(*) FROM ODS.TOP_ANNOUNCEMENT_ODS', v4T);
|
||||||
|
safe_count('SELECT COUNT(*) FROM ODS.TOP_FULLBIDLIST_ITEM_ODS', v5T);
|
||||||
|
safe_count('SELECT COUNT(*) FROM ODS.TOP_FULLBID_ARRAY_COMPILED_ODS', v6T);
|
||||||
|
vTotalT := v1T + v2T + v3T + v4T + v5T + v6T;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('POST-EXPORT VERIFICATION SUMMARY');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(RPAD('Table', 40) || ' | Source | Target | Match');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(RPAD('-', 75, '-'));
|
||||||
|
print_row('ALLOTMENT', v1S, v1T); IF v1S != v1T THEN vMismatch := vMismatch + 1; END IF;
|
||||||
|
print_row('ALLOTMENT_MODIFICATION_HEADER', v2S, v2T); IF v2S != v2T THEN vMismatch := vMismatch + 1; END IF;
|
||||||
|
print_row('ALLOTMENT_MODIFICATION_ITEM', v3S, v3T); IF v3S != v3T THEN vMismatch := vMismatch + 1; END IF;
|
||||||
|
print_row('ANNOUNCEMENT', v4S, v4T); IF v4S != v4T THEN vMismatch := vMismatch + 1; END IF;
|
||||||
|
print_row('FBL_ITEM (->FULLBIDLIST_ITEM)', v5S, v5T); IF v5S != v5T THEN vMismatch := vMismatch + 1; END IF;
|
||||||
|
print_row('FULLBID_ARRAY_COMPILED', v6S, v6T); IF v6S != v6T THEN vMismatch := vMismatch + 1; END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE(RPAD('-', 75, '-'));
|
||||||
|
print_row('TOTAL', vTotalS, vTotalT);
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
IF vMismatch = 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: All record counts match - export verified');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: ' || vMismatch || ' table(s) have record count mismatches');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Please review export logs and external table access permissions');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Log export completion
|
||||||
|
INSERT INTO CT_MRDS.A_PROCESS_LOG (PROCESS_NAME, PROCEDURE_NAME, LOG_LEVEL, LOG_MESSAGE, PROCEDURE_PARAMETERS)
|
||||||
|
VALUES ('MARS-1005', 'EXPORT_TOP_DATA', 'INFO', 'Historical OU_TOP data export completed',
|
||||||
|
'Check verification scripts for detailed results');
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT MARS-1005 OU_TOP Historical Data Export - COMPLETED
|
||||||
|
PROMPT
|
||||||
|
PROMPT Next steps:
|
||||||
|
PROMPT 1. Run: @02_MARS_1005_verify_exports.sql (verify file registration)
|
||||||
|
PROMPT 2. Run: @03_MARS_1005_verify_data_integrity.sql (full data verification)
|
||||||
|
PROMPT =====================================================================================
|
||||||
215
MARS_Packages/REL03/MARS-1005/02_MARS_1005_verify_exports.sql
Normal file
215
MARS_Packages/REL03/MARS-1005/02_MARS_1005_verify_exports.sql
Normal file
@@ -0,0 +1,215 @@
|
|||||||
|
-- ===================================================================
|
||||||
|
-- MARS-1005 Verify Exports: Check Export Results and File Creation
|
||||||
|
-- ===================================================================
|
||||||
|
-- Purpose: Verify that OU_TOP historical data export completed successfully
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-03-06
|
||||||
|
-- MARS Issue: MARS-1005
|
||||||
|
-- Tables: 6 OU_TOP.LEGACY_* tables exported to ODS/TOP/ bucket paths
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
SET TIMING ON
|
||||||
|
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT MARS-1005 Export Verification
|
||||||
|
PROMPT =========================================================================
|
||||||
|
|
||||||
|
-- Check 1: Verify files were registered in A_SOURCE_FILE_RECEIVED
|
||||||
|
PROMPT Checking export file registration (PROCESS_NAME = MARS-1005)...
|
||||||
|
DECLARE
|
||||||
|
vFileCount NUMBER := 0;
|
||||||
|
vTotalBytes NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*), NVL(SUM(BYTES), 0)
|
||||||
|
INTO vFileCount, vTotalBytes
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005'
|
||||||
|
AND RECEPTION_DATE >= SYSDATE - 1/24; -- Last hour
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Registered export files (last hour): ' || vFileCount);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Total file size: ' || ROUND(vTotalBytes / 1024, 2) || ' KB');
|
||||||
|
|
||||||
|
IF vFileCount = 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: No export files found in registration');
|
||||||
|
ELSIF vFileCount < 6 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: Expected at least 6 files (1 per table), found: ' || vFileCount);
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: All expected export files registered (>= 6)');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Check 2: Show recent export registrations by table
|
||||||
|
PROMPT Recent export file registrations per table:
|
||||||
|
SELECT
|
||||||
|
A_SOURCE_FILE_CONFIG_KEY AS CONFIG_KEY,
|
||||||
|
SUBSTR(SOURCE_FILE_NAME, 1, 55) AS FILE_NAME,
|
||||||
|
PROCESSING_STATUS,
|
||||||
|
ROUND(NVL(BYTES, 0) / 1024, 2) AS SIZE_KB,
|
||||||
|
TO_CHAR(RECEPTION_DATE, 'HH24:MI:SS') AS TIME_EXPORTED
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005'
|
||||||
|
AND RECEPTION_DATE >= SYSDATE - 1/24
|
||||||
|
ORDER BY A_SOURCE_FILE_CONFIG_KEY, RECEPTION_DATE DESC;
|
||||||
|
|
||||||
|
-- Check 2b: File count per A_SOURCE_FILE_CONFIG_KEY
|
||||||
|
PROMPT Export file count per source config key:
|
||||||
|
SELECT
|
||||||
|
r.A_SOURCE_FILE_CONFIG_KEY,
|
||||||
|
c.TABLE_ID,
|
||||||
|
COUNT(*) AS FILE_COUNT,
|
||||||
|
ROUND(NVL(SUM(r.BYTES), 0) / 1024, 2) AS TOTAL_KB
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED r
|
||||||
|
JOIN CT_MRDS.A_SOURCE_FILE_CONFIG c
|
||||||
|
ON r.A_SOURCE_FILE_CONFIG_KEY = c.A_SOURCE_FILE_CONFIG_KEY
|
||||||
|
WHERE r.PROCESS_NAME = 'MARS-1005'
|
||||||
|
AND r.RECEPTION_DATE >= SYSDATE - 1/24
|
||||||
|
GROUP BY r.A_SOURCE_FILE_CONFIG_KEY, c.TABLE_ID
|
||||||
|
ORDER BY r.A_SOURCE_FILE_CONFIG_KEY;
|
||||||
|
|
||||||
|
-- Check 3: Verify export process logs
|
||||||
|
PROMPT Checking export process logs...
|
||||||
|
DECLARE
|
||||||
|
vLogCount NUMBER := 0;
|
||||||
|
vErrorCount NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*), SUM(CASE WHEN LOG_LEVEL = 'ERROR' THEN 1 ELSE 0 END)
|
||||||
|
INTO vLogCount, vErrorCount
|
||||||
|
FROM CT_MRDS.A_PROCESS_LOG
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005'
|
||||||
|
AND LOG_TIMESTAMP >= SYSTIMESTAMP - INTERVAL '1' HOUR;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: Process log entries: ' || vLogCount);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: Error entries: ' || vErrorCount);
|
||||||
|
|
||||||
|
IF vErrorCount > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: ' || vErrorCount || ' errors found in process log');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: No errors found in process log');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Check 4: Display recent process logs
|
||||||
|
PROMPT Recent MARS-1005 process logs:
|
||||||
|
SELECT
|
||||||
|
TO_CHAR(LOG_TIMESTAMP, 'HH24:MI:SS') AS TIME,
|
||||||
|
PROCEDURE_NAME,
|
||||||
|
LOG_LEVEL,
|
||||||
|
SUBSTR(LOG_MESSAGE, 1, 60) AS MESSAGE
|
||||||
|
FROM CT_MRDS.A_PROCESS_LOG
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005'
|
||||||
|
AND LOG_TIMESTAMP >= SYSTIMESTAMP - INTERVAL '1' HOUR
|
||||||
|
ORDER BY LOG_TIMESTAMP DESC
|
||||||
|
FETCH FIRST 10 ROWS ONLY;
|
||||||
|
|
||||||
|
-- Check 5: Cloud bucket file verification across all 6 TOP folders
|
||||||
|
PROMPT Checking cloud bucket files in ODS/TOP/ paths...
|
||||||
|
DECLARE
|
||||||
|
vCredentialName VARCHAR2(100) := 'OCI$RESOURCE_PRINCIPAL';
|
||||||
|
vDataBucketUri VARCHAR2(500);
|
||||||
|
vTotalFiles NUMBER := 0;
|
||||||
|
|
||||||
|
TYPE t_folder IS TABLE OF VARCHAR2(200);
|
||||||
|
vFolders t_folder := t_folder(
|
||||||
|
'ODS/TOP/TOP_ALLOTMENT/',
|
||||||
|
'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_HEADER/',
|
||||||
|
'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_ITEM/',
|
||||||
|
'ODS/TOP/TOP_ANNOUNCEMENT/',
|
||||||
|
'ODS/TOP/TOP_FULLBIDLIST_ITEM/',
|
||||||
|
'ODS/TOP/TOP_FULLBID_ARRAY_COMPILED/'
|
||||||
|
);
|
||||||
|
|
||||||
|
vFolderFiles NUMBER;
|
||||||
|
vFolderSize NUMBER;
|
||||||
|
BEGIN
|
||||||
|
vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Bucket URI: ' || vDataBucketUri);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(RPAD('Folder', 55) || RPAD('Files', 8) || 'Total KB');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(RPAD('-', 75, '-'));
|
||||||
|
|
||||||
|
FOR i IN 1..vFolders.COUNT LOOP
|
||||||
|
vFolderFiles := 0;
|
||||||
|
vFolderSize := 0;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*), NVL(SUM(bytes), 0)
|
||||||
|
INTO vFolderFiles, vFolderSize
|
||||||
|
FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(
|
||||||
|
credential_name => vCredentialName,
|
||||||
|
location_uri => vDataBucketUri || vFolders(i)
|
||||||
|
))
|
||||||
|
WHERE object_name NOT LIKE '%/';
|
||||||
|
EXCEPTION WHEN OTHERS THEN NULL;
|
||||||
|
END;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE(
|
||||||
|
RPAD(vFolders(i), 55) ||
|
||||||
|
RPAD(TO_CHAR(vFolderFiles), 8) ||
|
||||||
|
ROUND(vFolderSize / 1024, 2) || ' KB'
|
||||||
|
);
|
||||||
|
vTotalFiles := vTotalFiles + vFolderFiles;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE(RPAD('-', 75, '-'));
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Total files across all TOP folders: ' || vTotalFiles);
|
||||||
|
|
||||||
|
IF vTotalFiles = 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: No files found in any TOP folder');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: Files present in ODS/TOP/ bucket paths');
|
||||||
|
END IF;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: Cannot access cloud bucket: ' || SQLERRM);
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT MARS-1005 Export Verification Summary
|
||||||
|
PROMPT =========================================================================
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
vFileRegCount NUMBER := 0;
|
||||||
|
vLogErrorCount NUMBER := 0;
|
||||||
|
vOverallStatus VARCHAR2(20);
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO vFileRegCount
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005'
|
||||||
|
AND RECEPTION_DATE >= SYSDATE - 1/24;
|
||||||
|
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO vLogErrorCount
|
||||||
|
FROM CT_MRDS.A_PROCESS_LOG
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005'
|
||||||
|
AND LOG_LEVEL = 'ERROR'
|
||||||
|
AND LOG_TIMESTAMP >= SYSTIMESTAMP - INTERVAL '1' HOUR;
|
||||||
|
|
||||||
|
IF vFileRegCount >= 6 AND vLogErrorCount = 0 THEN
|
||||||
|
vOverallStatus := 'SUCCESS';
|
||||||
|
ELSIF vFileRegCount > 0 AND vLogErrorCount = 0 THEN
|
||||||
|
vOverallStatus := 'PARTIAL SUCCESS';
|
||||||
|
ELSE
|
||||||
|
vOverallStatus := 'ISSUES DETECTED';
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('MARS-1005 Export Verification: ' || vOverallStatus);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- Registered files (last hour): ' || vFileRegCount || ' (expected: >= 6, one per table)');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- Process errors: ' || vLogErrorCount);
|
||||||
|
|
||||||
|
IF vOverallStatus = 'SUCCESS' THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: All validations passed - export successful');
|
||||||
|
ELSIF vOverallStatus = 'PARTIAL SUCCESS' THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: Some tables may have incomplete exports - review registrations above');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ISSUES DETECTED: Review process logs and bucket contents above');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT Export Verification Completed
|
||||||
|
PROMPT =========================================================================
|
||||||
@@ -0,0 +1,359 @@
|
|||||||
|
-- ===================================================================
|
||||||
|
-- MARS-1005 Verify Data Integrity: Source vs Exported Data Validation
|
||||||
|
-- ===================================================================
|
||||||
|
-- Purpose: Verify data integrity between 6 OU_TOP.LEGACY_* source tables
|
||||||
|
-- and corresponding ODS external tables after export
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-03-06
|
||||||
|
-- MARS Issue: MARS-1005
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
SET TIMING ON
|
||||||
|
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT MARS-1005 Data Integrity Verification
|
||||||
|
PROMPT =========================================================================
|
||||||
|
|
||||||
|
-- Check 1: Source table record counts
|
||||||
|
PROMPT Checking source table record counts (OU_TOP.LEGACY_* tables)...
|
||||||
|
DECLARE
|
||||||
|
v1Rows NUMBER := 0; v2Rows NUMBER := 0; v3Rows NUMBER := 0;
|
||||||
|
v4Rows NUMBER := 0; v5Rows NUMBER := 0; v6Rows NUMBER := 0;
|
||||||
|
vTotalRows NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT' INTO v1Rows;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_HEADER' INTO v2Rows;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_ITEM' INTO v3Rows;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ANNOUNCEMENT' INTO v4Rows;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_FBL_ITEM' INTO v5Rows;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_FULLBID_ARRAY_COMPILED' INTO v6Rows;
|
||||||
|
|
||||||
|
vTotalRows := v1Rows + v2Rows + v3Rows + v4Rows + v5Rows + v6Rows;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Source table record counts:');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_ALLOTMENT : ' || v1Rows || ' records');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_ALLOTMENT_MODIFICATION_HEADER: ' || v2Rows || ' records');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_ALLOTMENT_MODIFICATION_ITEM : ' || v3Rows || ' records');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_ANNOUNCEMENT : ' || v4Rows || ' records');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_FBL_ITEM : ' || v5Rows || ' records');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_FULLBID_ARRAY_COMPILED : ' || v6Rows || ' records');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- TOTAL : ' || vTotalRows || ' records');
|
||||||
|
|
||||||
|
IF vTotalRows > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: All source tables contain data');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: No data found in source tables');
|
||||||
|
END IF;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: Cannot access source tables: ' || SQLERRM);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('NOTE: Ensure SELECT privilege on OU_TOP.LEGACY_* is granted to CT_MRDS');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Check 2: A_ETL_LOAD_SET_FK distribution across source tables
|
||||||
|
PROMPT Checking A_ETL_LOAD_SET_FK distribution...
|
||||||
|
DECLARE
|
||||||
|
v1Keys NUMBER := 0; v2Keys NUMBER := 0; v3Keys NUMBER := 0;
|
||||||
|
v4Keys NUMBER := 0; v5Keys NUMBER := 0; v6Keys NUMBER := 0;
|
||||||
|
vDistinctAllKeys NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(DISTINCT A_ETL_LOAD_SET_FK) FROM OU_TOP.LEGACY_ALLOTMENT' INTO v1Keys;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(DISTINCT A_ETL_LOAD_SET_FK) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_HEADER' INTO v2Keys;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(DISTINCT A_ETL_LOAD_SET_FK) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_ITEM' INTO v3Keys;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(DISTINCT A_ETL_LOAD_SET_FK) FROM OU_TOP.LEGACY_ANNOUNCEMENT' INTO v4Keys;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(DISTINCT A_ETL_LOAD_SET_FK) FROM OU_TOP.LEGACY_FBL_ITEM' INTO v5Keys;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(DISTINCT A_ETL_LOAD_SET_FK) FROM OU_TOP.LEGACY_FULLBID_ARRAY_COMPILED' INTO v6Keys;
|
||||||
|
|
||||||
|
SELECT COUNT(DISTINCT wk)
|
||||||
|
INTO vDistinctAllKeys
|
||||||
|
FROM (
|
||||||
|
SELECT A_ETL_LOAD_SET_FK AS wk FROM OU_TOP.LEGACY_ALLOTMENT UNION ALL
|
||||||
|
SELECT A_ETL_LOAD_SET_FK FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_HEADER UNION ALL
|
||||||
|
SELECT A_ETL_LOAD_SET_FK FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_ITEM UNION ALL
|
||||||
|
SELECT A_ETL_LOAD_SET_FK FROM OU_TOP.LEGACY_ANNOUNCEMENT UNION ALL
|
||||||
|
SELECT A_ETL_LOAD_SET_FK FROM OU_TOP.LEGACY_FBL_ITEM UNION ALL
|
||||||
|
SELECT A_ETL_LOAD_SET_FK FROM OU_TOP.LEGACY_FULLBID_ARRAY_COMPILED
|
||||||
|
);
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Distinct A_ETL_LOAD_SET_FK values per table (source):');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_ALLOTMENT : ' || v1Keys);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_ALLOTMENT_MODIFICATION_HEADER: ' || v2Keys);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_ALLOTMENT_MODIFICATION_ITEM : ' || v3Keys);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_ANNOUNCEMENT : ' || v4Keys);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_FBL_ITEM : ' || v5Keys);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_FULLBID_ARRAY_COMPILED : ' || v6Keys);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- Total distinct ETL load keys (all tables): ' || vDistinctAllKeys);
|
||||||
|
|
||||||
|
IF vDistinctAllKeys > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: ETL load key distribution looks normal');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: No ETL load keys found in source data');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Check 3: Template table compatibility verification
|
||||||
|
PROMPT Checking template table compatibility (CT_ET_TEMPLATES.TOP_*)...
|
||||||
|
DECLARE
|
||||||
|
vCols1 NUMBER := 0; vCols2 NUMBER := 0; vCols3 NUMBER := 0;
|
||||||
|
vCols4 NUMBER := 0; vCols5 NUMBER := 0; vCols6 NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO vCols1
|
||||||
|
FROM all_tab_columns WHERE owner = 'CT_ET_TEMPLATES' AND table_name = 'TOP_ALLOTMENT';
|
||||||
|
SELECT COUNT(*) INTO vCols2
|
||||||
|
FROM all_tab_columns WHERE owner = 'CT_ET_TEMPLATES' AND table_name = 'TOP_ALLOTMENT_MODIFICATION_HEADER';
|
||||||
|
SELECT COUNT(*) INTO vCols3
|
||||||
|
FROM all_tab_columns WHERE owner = 'CT_ET_TEMPLATES' AND table_name = 'TOP_ALLOTMENT_MODIFICATION_ITEM';
|
||||||
|
SELECT COUNT(*) INTO vCols4
|
||||||
|
FROM all_tab_columns WHERE owner = 'CT_ET_TEMPLATES' AND table_name = 'TOP_ANNOUNCEMENT';
|
||||||
|
SELECT COUNT(*) INTO vCols5
|
||||||
|
FROM all_tab_columns WHERE owner = 'CT_ET_TEMPLATES' AND table_name = 'TOP_FULLBIDLIST_ITEM';
|
||||||
|
SELECT COUNT(*) INTO vCols6
|
||||||
|
FROM all_tab_columns WHERE owner = 'CT_ET_TEMPLATES' AND table_name = 'TOP_FULLBID_ARRAY_COMPILED';
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Template table column counts:');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- CT_ET_TEMPLATES.TOP_ALLOTMENT : ' || vCols1 || ' columns');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- CT_ET_TEMPLATES.TOP_ALLOTMENT_MODIFICATION_HEADER: ' || vCols2 || ' columns');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- CT_ET_TEMPLATES.TOP_ALLOTMENT_MODIFICATION_ITEM : ' || vCols3 || ' columns');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- CT_ET_TEMPLATES.TOP_ANNOUNCEMENT : ' || vCols4 || ' columns');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- CT_ET_TEMPLATES.TOP_FULLBIDLIST_ITEM : ' || vCols5 || ' columns');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- CT_ET_TEMPLATES.TOP_FULLBID_ARRAY_COMPILED : ' || vCols6 || ' columns');
|
||||||
|
|
||||||
|
IF vCols1 > 0 AND vCols2 > 0 AND vCols3 > 0 AND vCols4 > 0 AND vCols5 > 0 AND vCols6 > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: All 6 template tables have defined structure');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: One or more template tables missing columns');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Check 4: Verify A_SOURCE_FILE_CONFIG entries for 6 TOP tables
|
||||||
|
PROMPT Checking A_SOURCE_FILE_CONFIG registration for TOP tables...
|
||||||
|
DECLARE
|
||||||
|
vConfigCount NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO vConfigCount
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||||
|
WHERE A_SOURCE_FILE_CONFIG_KEY IN (705, 683, 684, 689, 696, 697); -- MARS-1005 config keys
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('A_SOURCE_FILE_CONFIG entries for MARS-1005 tables: ' || vConfigCount || ' (expected: 6)');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Config keys: 705(ALLOTMENT), 683(MOD_HDR), 684(MOD_ITEM), 689(ANNOUNCEMENT), 696(FBL_ITEM), 697(FBA_COMPILED)');
|
||||||
|
|
||||||
|
IF vConfigCount = 6 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: All 6 source file config entries confirmed');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: Missing config entries (' || (6 - vConfigCount) || ' missing)');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT A_SOURCE_FILE_CONFIG details for TOP tables:
|
||||||
|
SELECT
|
||||||
|
A_SOURCE_FILE_CONFIG_KEY,
|
||||||
|
TABLE_ID,
|
||||||
|
TEMPLATE_TABLE_NAME,
|
||||||
|
SUBSTR(SOURCE_FILE_NAME_PATTERN, 1, 40) AS FILE_PATTERN
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||||
|
WHERE A_SOURCE_FILE_CONFIG_KEY IN (705, 683, 684, 689, 696, 697)
|
||||||
|
ORDER BY A_SOURCE_FILE_CONFIG_KEY;
|
||||||
|
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT MARS-1005 Record Count Verification
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
PROMPT Comparing source table counts with exported external table counts
|
||||||
|
PROMPT =====================================================================================
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
TYPE t_table_info IS RECORD (
|
||||||
|
source_schema VARCHAR2(50),
|
||||||
|
source_table VARCHAR2(100),
|
||||||
|
external_table VARCHAR2(100),
|
||||||
|
description VARCHAR2(200)
|
||||||
|
);
|
||||||
|
TYPE t_table_list IS TABLE OF t_table_info;
|
||||||
|
|
||||||
|
vTables t_table_list;
|
||||||
|
vSourceCount NUMBER;
|
||||||
|
vTargetCount NUMBER;
|
||||||
|
vTotalSourceCount NUMBER := 0;
|
||||||
|
vTotalTargetCount NUMBER := 0;
|
||||||
|
vMismatchCount NUMBER := 0;
|
||||||
|
vSql VARCHAR2(4000);
|
||||||
|
vFileCount NUMBER := 0;
|
||||||
|
vValidationResult VARCHAR2(100);
|
||||||
|
BEGIN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('VERIFICATION TIME: ' || TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS'));
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
|
||||||
|
-- Initialize table list with 6 OU_TOP LEGACY table configuration
|
||||||
|
vTables := t_table_list(
|
||||||
|
t_table_info('OU_TOP', 'LEGACY_ALLOTMENT', 'ODS.TOP_ALLOTMENT_ODS', 'ALLOTMENT data (A_SOURCE_FILE_CONFIG_KEY=705)'),
|
||||||
|
t_table_info('OU_TOP', 'LEGACY_ALLOTMENT_MODIFICATION_HEADER', 'ODS.TOP_ALLOTMENT_MODIFICATION_HEADER_ODS', 'MOD HEADER data (A_SOURCE_FILE_CONFIG_KEY=683)'),
|
||||||
|
t_table_info('OU_TOP', 'LEGACY_ALLOTMENT_MODIFICATION_ITEM', 'ODS.TOP_ALLOTMENT_MODIFICATION_ITEM_ODS', 'MOD ITEM data (A_SOURCE_FILE_CONFIG_KEY=684)'),
|
||||||
|
t_table_info('OU_TOP', 'LEGACY_ANNOUNCEMENT', 'ODS.TOP_ANNOUNCEMENT_ODS', 'ANNOUNCEMENT data (A_SOURCE_FILE_CONFIG_KEY=689)'),
|
||||||
|
t_table_info('OU_TOP', 'LEGACY_FBL_ITEM', 'ODS.TOP_FULLBIDLIST_ITEM_ODS', 'FBL ITEM data (A_SOURCE_FILE_CONFIG_KEY=696)'),
|
||||||
|
t_table_info('OU_TOP', 'LEGACY_FULLBID_ARRAY_COMPILED', 'ODS.TOP_FULLBID_ARRAY_COMPILED_ODS', 'FBA COMPILED data (A_SOURCE_FILE_CONFIG_KEY=697)')
|
||||||
|
);
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('-----------------------------------------------------------------------------------------');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Table Name Source Count Target Count Status');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('-----------------------------------------------------------------------------------------');
|
||||||
|
|
||||||
|
FOR i IN 1..vTables.COUNT LOOP
|
||||||
|
-- Get source table count
|
||||||
|
vSql := 'SELECT COUNT(*) FROM ' || vTables(i).source_schema || '.' || vTables(i).source_table;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE vSql INTO vSourceCount;
|
||||||
|
vTotalSourceCount := vTotalSourceCount + vSourceCount;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
vSourceCount := -1;
|
||||||
|
DBMS_OUTPUT.PUT_LINE(RPAD(vTables(i).source_table, 24) || 'ERROR: Cannot access source table');
|
||||||
|
CONTINUE;
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- Get target external table count
|
||||||
|
vSql := 'SELECT COUNT(*) FROM ' || vTables(i).external_table;
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE vSql INTO vTargetCount;
|
||||||
|
vTotalTargetCount := vTotalTargetCount + vTargetCount;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
-- Handle expected errors for empty external tables
|
||||||
|
-- ORA-29913: error in executing ODCIEXTTABLEOPEN callout
|
||||||
|
-- ORA-29400: data cartridge error
|
||||||
|
-- KUP-13023: nothing matched wildcard query (no files in bucket)
|
||||||
|
-- NOTE: ORA-30653 (reject limit) is a real data quality error, not treated as empty
|
||||||
|
IF vSourceCount = 0 OR SQLCODE IN (-29913, -29400) OR SQLERRM LIKE '%KUP-13023%' THEN
|
||||||
|
vTargetCount := 0; -- Treat as empty (no files exported yet)
|
||||||
|
ELSE
|
||||||
|
vTargetCount := -1; -- Real error
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- Display comparison results with thousands separators
|
||||||
|
DECLARE
|
||||||
|
vStatus VARCHAR2(20);
|
||||||
|
vSourceDisplay VARCHAR2(17);
|
||||||
|
vTargetDisplay VARCHAR2(17);
|
||||||
|
BEGIN
|
||||||
|
-- Format source count display
|
||||||
|
IF vSourceCount = -1 THEN
|
||||||
|
vSourceDisplay := 'ERROR';
|
||||||
|
ELSE
|
||||||
|
vSourceDisplay := TO_CHAR(vSourceCount, '9,999,999,999');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- Format target count display
|
||||||
|
IF vTargetCount = -1 THEN
|
||||||
|
vTargetDisplay := 'ERROR';
|
||||||
|
ELSE
|
||||||
|
vTargetDisplay := TO_CHAR(vTargetCount, '9,999,999,999');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- Determine status
|
||||||
|
IF vSourceCount = vTargetCount THEN
|
||||||
|
vStatus := 'PASS';
|
||||||
|
ELSIF vTargetCount = -1 THEN
|
||||||
|
vStatus := 'ERROR';
|
||||||
|
vMismatchCount := vMismatchCount + 1;
|
||||||
|
ELSIF vSourceCount = -1 THEN
|
||||||
|
vStatus := 'ERROR';
|
||||||
|
vMismatchCount := vMismatchCount + 1;
|
||||||
|
ELSE
|
||||||
|
vStatus := 'MISMATCH';
|
||||||
|
vMismatchCount := vMismatchCount + 1;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE(
|
||||||
|
RPAD(vTables(i).source_table, 24) ||
|
||||||
|
LPAD(vSourceDisplay, 15) ||
|
||||||
|
LPAD(vTargetDisplay, 15) || ' ' ||
|
||||||
|
vStatus
|
||||||
|
);
|
||||||
|
END;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('-----------------------------------------------------------------------------------------');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(
|
||||||
|
RPAD('TOTALS', 24) ||
|
||||||
|
LPAD(TO_CHAR(vTotalSourceCount, '9,999,999,999'), 15) ||
|
||||||
|
LPAD(TO_CHAR(vTotalTargetCount, '9,999,999,999'), 15)
|
||||||
|
);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('-----------------------------------------------------------------------------------------');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
|
||||||
|
-- Count MARS-1005 registered export files
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO vFileCount
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005'
|
||||||
|
AND RECEPTION_DATE >= SYSDATE - 1/24;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Record Count Verification Summary');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Total source records: ' || TO_CHAR(vTotalSourceCount, '9,999,999,999'));
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Total target records: ' || TO_CHAR(vTotalTargetCount, '9,999,999,999') || ' (exported to ODS)');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Export files registered (PROCESS_NAME=MARS-1005): ' || vFileCount);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
|
||||||
|
IF vMismatchCount = 0 AND vFileCount > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('[PASS] VERIFICATION PASSED');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' All record counts match between source and exported data');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Export completed successfully');
|
||||||
|
ELSIF vMismatchCount > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('[INFO] VERIFICATION COMPLETED WITH MISMATCHES');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Found ' || vMismatchCount || ' table(s) with count mismatches');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' NOTE: Mismatches may be caused by pre-existing files in buckets (see pre-check)');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Review export logs and pre-check results before re-running exports');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('[WARN] NO EXPORT DETECTED');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' No files found in export registration');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Verify export execution completed successfully');
|
||||||
|
END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Legend:');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' PASS - Record counts match (export successful)');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' MISMATCH - Record counts differ (may be pre-existing files or export issue)');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Check pre-check results to identify pre-existing files');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ERROR - Cannot access table (verify table exists and permissions)');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
||||||
|
|
||||||
|
-- Workflow Key Analysis
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ETL Load Key Analysis (distinct A_ETL_LOAD_SET_FK per source table):');
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
v1Keys NUMBER; v2Keys NUMBER; v3Keys NUMBER;
|
||||||
|
v4Keys NUMBER; v5Keys NUMBER; v6Keys NUMBER;
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(DISTINCT A_ETL_LOAD_SET_FK) FROM OU_TOP.LEGACY_ALLOTMENT' INTO v1Keys;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(DISTINCT A_ETL_LOAD_SET_FK) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_HEADER' INTO v2Keys;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(DISTINCT A_ETL_LOAD_SET_FK) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_ITEM' INTO v3Keys;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(DISTINCT A_ETL_LOAD_SET_FK) FROM OU_TOP.LEGACY_ANNOUNCEMENT' INTO v4Keys;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(DISTINCT A_ETL_LOAD_SET_FK) FROM OU_TOP.LEGACY_FBL_ITEM' INTO v5Keys;
|
||||||
|
EXECUTE IMMEDIATE 'SELECT COUNT(DISTINCT A_ETL_LOAD_SET_FK) FROM OU_TOP.LEGACY_FULLBID_ARRAY_COMPILED' INTO v6Keys;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_ALLOTMENT : ' || v1Keys || ' distinct keys');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_ALLOTMENT_MODIFICATION_HEADER: ' || v2Keys || ' distinct keys');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_ALLOTMENT_MODIFICATION_ITEM : ' || v3Keys || ' distinct keys');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_ANNOUNCEMENT : ' || v4Keys || ' distinct keys');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_FBL_ITEM : ' || v5Keys || ' distinct keys');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- LEGACY_FULLBID_ARRAY_COMPILED : ' || v6Keys || ' distinct keys');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- Actual export files registered: ' || vFileCount);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: Cannot query ETL load keys: ' || SQLERRM);
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT Data Integrity Verification Completed
|
||||||
|
PROMPT =========================================================================
|
||||||
@@ -0,0 +1,209 @@
|
|||||||
|
--=============================================================================================================================
|
||||||
|
-- MARS-1005 ROLLBACK: Delete Exported CSV Files from DATA Bucket
|
||||||
|
--=============================================================================================================================
|
||||||
|
-- Purpose: Delete exported CSV files from ODS/TOP/ bucket folders for 6 OU_TOP LEGACY tables
|
||||||
|
-- WARNING: This will permanently delete exported data files!
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-03-06
|
||||||
|
-- Related: MARS-1005 - OU_TOP Historical Data Export Rollback
|
||||||
|
--=============================================================================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
|
||||||
|
PROMPT ========================================================================
|
||||||
|
PROMPT ROLLBACK: Deleting OU_TOP LEGACY exported files from DATA Bucket
|
||||||
|
PROMPT ========================================================================
|
||||||
|
PROMPT WARNING: This will delete files registered with PROCESS_NAME = 'MARS-1005'
|
||||||
|
PROMPT from ODS/TOP/* paths in the DATA bucket.
|
||||||
|
PROMPT ========================================================================
|
||||||
|
|
||||||
|
-- Helper: generic delete procedure for one TOP table folder
|
||||||
|
-- Deletes objects whose SOURCE_FILE_NAME matches the folder prefix pattern
|
||||||
|
|
||||||
|
-- ROLLBACK TABLE 1/6: LEGACY_ALLOTMENT -> ODS/TOP/TOP_ALLOTMENT/
|
||||||
|
PROMPT ROLLBACK: Deleting TOP_ALLOTMENT files...
|
||||||
|
DECLARE
|
||||||
|
vDataBucketUri VARCHAR2(500);
|
||||||
|
vFolderPath VARCHAR2(200) := 'ODS/TOP/TOP_ALLOTMENT/';
|
||||||
|
vFileCount NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Deleting TOP_ALLOTMENT files from: ' || vDataBucketUri || vFolderPath);
|
||||||
|
|
||||||
|
FOR rec IN (
|
||||||
|
SELECT object_name
|
||||||
|
FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(
|
||||||
|
credential_name => 'OCI$RESOURCE_PRINCIPAL',
|
||||||
|
location_uri => vDataBucketUri || vFolderPath
|
||||||
|
))
|
||||||
|
WHERE object_name NOT LIKE '%/'
|
||||||
|
) LOOP
|
||||||
|
BEGIN
|
||||||
|
DBMS_CLOUD.DELETE_OBJECT(
|
||||||
|
credential_name => 'OCI$RESOURCE_PRINCIPAL',
|
||||||
|
object_uri => vDataBucketUri || vFolderPath || rec.object_name
|
||||||
|
);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.object_name);
|
||||||
|
vFileCount := vFileCount + 1;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
IF SQLCODE = -20404 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.object_name);
|
||||||
|
ELSE RAISE;
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
IF vFileCount = 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' INFO: No files found to delete');
|
||||||
|
END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: TOP_ALLOTMENT files deleted (' || vFileCount || ' file(s))');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- ROLLBACK TABLE 2/6: LEGACY_ALLOTMENT_MODIFICATION_HEADER -> ODS/TOP/TOP_ALLOTMENT_MODIFICATION_HEADER/
|
||||||
|
PROMPT ROLLBACK: Deleting TOP_ALLOTMENT_MODIFICATION_HEADER files...
|
||||||
|
DECLARE
|
||||||
|
vDataBucketUri VARCHAR2(500);
|
||||||
|
vFolderPath VARCHAR2(200) := 'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_HEADER/';
|
||||||
|
vFileCount NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Deleting TOP_ALLOTMENT_MODIFICATION_HEADER files...');
|
||||||
|
FOR rec IN (
|
||||||
|
SELECT object_name FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(
|
||||||
|
credential_name => 'OCI$RESOURCE_PRINCIPAL',
|
||||||
|
location_uri => vDataBucketUri || vFolderPath
|
||||||
|
)) WHERE object_name NOT LIKE '%/'
|
||||||
|
) LOOP
|
||||||
|
BEGIN
|
||||||
|
DBMS_CLOUD.DELETE_OBJECT(credential_name => 'OCI$RESOURCE_PRINCIPAL', object_uri => vDataBucketUri || vFolderPath || rec.object_name);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.object_name);
|
||||||
|
vFileCount := vFileCount + 1;
|
||||||
|
EXCEPTION WHEN OTHERS THEN
|
||||||
|
IF SQLCODE = -20404 THEN DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.object_name);
|
||||||
|
ELSE RAISE; END IF;
|
||||||
|
END;
|
||||||
|
END LOOP;
|
||||||
|
IF vFileCount = 0 THEN DBMS_OUTPUT.PUT_LINE(' INFO: No files found to delete'); END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: TOP_ALLOTMENT_MODIFICATION_HEADER files deleted (' || vFileCount || ' file(s))');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- ROLLBACK TABLE 3/6: LEGACY_ALLOTMENT_MODIFICATION_ITEM -> ODS/TOP/TOP_ALLOTMENT_MODIFICATION_ITEM/
|
||||||
|
PROMPT ROLLBACK: Deleting TOP_ALLOTMENT_MODIFICATION_ITEM files...
|
||||||
|
DECLARE
|
||||||
|
vDataBucketUri VARCHAR2(500);
|
||||||
|
vFolderPath VARCHAR2(200) := 'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_ITEM/';
|
||||||
|
vFileCount NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Deleting TOP_ALLOTMENT_MODIFICATION_ITEM files...');
|
||||||
|
FOR rec IN (
|
||||||
|
SELECT object_name FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(
|
||||||
|
credential_name => 'OCI$RESOURCE_PRINCIPAL',
|
||||||
|
location_uri => vDataBucketUri || vFolderPath
|
||||||
|
)) WHERE object_name NOT LIKE '%/'
|
||||||
|
) LOOP
|
||||||
|
BEGIN
|
||||||
|
DBMS_CLOUD.DELETE_OBJECT(credential_name => 'OCI$RESOURCE_PRINCIPAL', object_uri => vDataBucketUri || vFolderPath || rec.object_name);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.object_name);
|
||||||
|
vFileCount := vFileCount + 1;
|
||||||
|
EXCEPTION WHEN OTHERS THEN
|
||||||
|
IF SQLCODE = -20404 THEN DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.object_name);
|
||||||
|
ELSE RAISE; END IF;
|
||||||
|
END;
|
||||||
|
END LOOP;
|
||||||
|
IF vFileCount = 0 THEN DBMS_OUTPUT.PUT_LINE(' INFO: No files found to delete'); END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: TOP_ALLOTMENT_MODIFICATION_ITEM files deleted (' || vFileCount || ' file(s))');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- ROLLBACK TABLE 4/6: LEGACY_ANNOUNCEMENT -> ODS/TOP/TOP_ANNOUNCEMENT/
|
||||||
|
PROMPT ROLLBACK: Deleting TOP_ANNOUNCEMENT files...
|
||||||
|
DECLARE
|
||||||
|
vDataBucketUri VARCHAR2(500);
|
||||||
|
vFolderPath VARCHAR2(200) := 'ODS/TOP/TOP_ANNOUNCEMENT/';
|
||||||
|
vFileCount NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Deleting TOP_ANNOUNCEMENT files...');
|
||||||
|
FOR rec IN (
|
||||||
|
SELECT object_name FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(
|
||||||
|
credential_name => 'OCI$RESOURCE_PRINCIPAL',
|
||||||
|
location_uri => vDataBucketUri || vFolderPath
|
||||||
|
)) WHERE object_name NOT LIKE '%/'
|
||||||
|
) LOOP
|
||||||
|
BEGIN
|
||||||
|
DBMS_CLOUD.DELETE_OBJECT(credential_name => 'OCI$RESOURCE_PRINCIPAL', object_uri => vDataBucketUri || vFolderPath || rec.object_name);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.object_name);
|
||||||
|
vFileCount := vFileCount + 1;
|
||||||
|
EXCEPTION WHEN OTHERS THEN
|
||||||
|
IF SQLCODE = -20404 THEN DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.object_name);
|
||||||
|
ELSE RAISE; END IF;
|
||||||
|
END;
|
||||||
|
END LOOP;
|
||||||
|
IF vFileCount = 0 THEN DBMS_OUTPUT.PUT_LINE(' INFO: No files found to delete'); END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: TOP_ANNOUNCEMENT files deleted (' || vFileCount || ' file(s))');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- ROLLBACK TABLE 5/6: LEGACY_FBL_ITEM -> ODS/TOP/TOP_FULLBIDLIST_ITEM/
|
||||||
|
PROMPT ROLLBACK: Deleting TOP_FULLBIDLIST_ITEM files...
|
||||||
|
DECLARE
|
||||||
|
vDataBucketUri VARCHAR2(500);
|
||||||
|
vFolderPath VARCHAR2(200) := 'ODS/TOP/TOP_FULLBIDLIST_ITEM/';
|
||||||
|
vFileCount NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Deleting TOP_FULLBIDLIST_ITEM files...');
|
||||||
|
FOR rec IN (
|
||||||
|
SELECT object_name FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(
|
||||||
|
credential_name => 'OCI$RESOURCE_PRINCIPAL',
|
||||||
|
location_uri => vDataBucketUri || vFolderPath
|
||||||
|
)) WHERE object_name NOT LIKE '%/'
|
||||||
|
) LOOP
|
||||||
|
BEGIN
|
||||||
|
DBMS_CLOUD.DELETE_OBJECT(credential_name => 'OCI$RESOURCE_PRINCIPAL', object_uri => vDataBucketUri || vFolderPath || rec.object_name);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.object_name);
|
||||||
|
vFileCount := vFileCount + 1;
|
||||||
|
EXCEPTION WHEN OTHERS THEN
|
||||||
|
IF SQLCODE = -20404 THEN DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.object_name);
|
||||||
|
ELSE RAISE; END IF;
|
||||||
|
END;
|
||||||
|
END LOOP;
|
||||||
|
IF vFileCount = 0 THEN DBMS_OUTPUT.PUT_LINE(' INFO: No files found to delete'); END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: TOP_FULLBIDLIST_ITEM files deleted (' || vFileCount || ' file(s))');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- ROLLBACK TABLE 6/6: LEGACY_FULLBID_ARRAY_COMPILED -> ODS/TOP/TOP_FULLBID_ARRAY_COMPILED/
|
||||||
|
PROMPT ROLLBACK: Deleting TOP_FULLBID_ARRAY_COMPILED files...
|
||||||
|
DECLARE
|
||||||
|
vDataBucketUri VARCHAR2(500);
|
||||||
|
vFolderPath VARCHAR2(200) := 'ODS/TOP/TOP_FULLBID_ARRAY_COMPILED/';
|
||||||
|
vFileCount NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Deleting TOP_FULLBID_ARRAY_COMPILED files...');
|
||||||
|
FOR rec IN (
|
||||||
|
SELECT object_name FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(
|
||||||
|
credential_name => 'OCI$RESOURCE_PRINCIPAL',
|
||||||
|
location_uri => vDataBucketUri || vFolderPath
|
||||||
|
)) WHERE object_name NOT LIKE '%/'
|
||||||
|
) LOOP
|
||||||
|
BEGIN
|
||||||
|
DBMS_CLOUD.DELETE_OBJECT(credential_name => 'OCI$RESOURCE_PRINCIPAL', object_uri => vDataBucketUri || vFolderPath || rec.object_name);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.object_name);
|
||||||
|
vFileCount := vFileCount + 1;
|
||||||
|
EXCEPTION WHEN OTHERS THEN
|
||||||
|
IF SQLCODE = -20404 THEN DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.object_name);
|
||||||
|
ELSE RAISE; END IF;
|
||||||
|
END;
|
||||||
|
END LOOP;
|
||||||
|
IF vFileCount = 0 THEN DBMS_OUTPUT.PUT_LINE(' INFO: No files found to delete'); END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: TOP_FULLBID_ARRAY_COMPILED files deleted (' || vFileCount || ' file(s))');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT SUCCESS: All CSV file deletion operations completed
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
-- ===================================================================
|
||||||
|
-- MARS-1005 Rollback Step 1: Delete File Registrations
|
||||||
|
-- ===================================================================
|
||||||
|
-- Purpose: Remove MARS-1005 export file registrations from A_SOURCE_FILE_RECEIVED
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-02-12
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
SET TIMING ON
|
||||||
|
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT MARS-1005 Rollback Step 1: Delete File Registrations
|
||||||
|
PROMPT =========================================================================
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
vFileCount NUMBER := 0;
|
||||||
|
vDeletedCount NUMBER := 0;
|
||||||
|
vErrorMsg VARCHAR2(4000);
|
||||||
|
BEGIN
|
||||||
|
-- Count files to be deleted (using PROCESS_NAME)
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO vFileCount
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005';
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Files to be deleted: ' || vFileCount);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Using PROCESS_NAME = ''MARS-1005'' filter');
|
||||||
|
|
||||||
|
IF vFileCount > 0 THEN
|
||||||
|
-- Show files before deletion
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Files being removed:');
|
||||||
|
FOR rec IN (
|
||||||
|
SELECT A_SOURCE_FILE_RECEIVED_KEY,
|
||||||
|
SUBSTR(SOURCE_FILE_NAME, 1, 60) AS FILE_NAME,
|
||||||
|
TO_CHAR(RECEPTION_DATE, 'YYYY-MM-DD HH24:MI:SS') AS RECEIVED_TIME,
|
||||||
|
PROCESS_NAME
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005'
|
||||||
|
ORDER BY RECEPTION_DATE DESC
|
||||||
|
) LOOP
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- ' || rec.FILE_NAME || ' (ID: ' || rec.A_SOURCE_FILE_RECEIVED_KEY || ', Process: ' || rec.PROCESS_NAME || ')');
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
-- Delete the file registrations using PROCESS_NAME
|
||||||
|
DELETE FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005';
|
||||||
|
|
||||||
|
vDeletedCount := SQL%ROWCOUNT;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: Successfully deleted ' || vDeletedCount || ' file registrations');
|
||||||
|
|
||||||
|
-- Log the rollback action
|
||||||
|
INSERT INTO CT_MRDS.A_PROCESS_LOG (PROCESS_NAME, PROCEDURE_NAME, LOG_LEVEL, LOG_MESSAGE)
|
||||||
|
VALUES ('MARS-1005-ROLLBACK', 'DELETE_FILE_REGISTRATIONS', 'INFO',
|
||||||
|
'Deleted ' || vDeletedCount || ' file registrations');
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: No file registrations found to delete');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
ROLLBACK;
|
||||||
|
vErrorMsg := 'Failed to delete file registrations: ' || SQLERRM;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: Error during file registration deletion: ' || SQLERRM);
|
||||||
|
-- Log the error
|
||||||
|
INSERT INTO CT_MRDS.A_PROCESS_LOG (PROCESS_NAME, PROCEDURE_NAME, LOG_LEVEL, LOG_MESSAGE)
|
||||||
|
VALUES ('MARS-1005-ROLLBACK', 'DELETE_FILE_REGISTRATIONS', 'ERROR', vErrorMsg);
|
||||||
|
COMMIT;
|
||||||
|
RAISE;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT File Registration Rollback Completed
|
||||||
|
PROMPT =========================================================================
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
-- ===================================================================
|
||||||
|
-- MARS-1005 Rollback Step 2: Clean Process Logs
|
||||||
|
-- ===================================================================
|
||||||
|
-- Purpose: Remove MARS-1005 process logs from A_PROCESS_LOG
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-02-12
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
SET TIMING ON
|
||||||
|
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT MARS-1005 Rollback Step 2: Clean Process Logs
|
||||||
|
PROMPT =========================================================================
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
vLogCount NUMBER := 0;
|
||||||
|
vDeletedCount NUMBER := 0;
|
||||||
|
vErrorMsg VARCHAR2(4000);
|
||||||
|
BEGIN
|
||||||
|
-- Count logs to be deleted
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO vLogCount
|
||||||
|
FROM CT_MRDS.A_PROCESS_LOG
|
||||||
|
WHERE PROCESS_NAME IN ('MARS-1005', 'MARS-1005-ROLLBACK')
|
||||||
|
AND LOG_TIMESTAMP >= SYSDATE - 7; -- Last week (safety)
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Process log entries to be deleted: ' || vLogCount);
|
||||||
|
|
||||||
|
IF vLogCount > 0 THEN
|
||||||
|
-- Show recent logs before deletion
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Recent MARS-1005 log entries being removed:');
|
||||||
|
FOR rec IN (
|
||||||
|
SELECT A_PROCESS_LOG_KEY,
|
||||||
|
TO_CHAR(LOG_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS') AS LOG_TIME,
|
||||||
|
PROCEDURE_NAME,
|
||||||
|
LOG_LEVEL,
|
||||||
|
SUBSTR(LOG_MESSAGE, 1, 40) AS MESSAGE
|
||||||
|
FROM CT_MRDS.A_PROCESS_LOG
|
||||||
|
WHERE PROCESS_NAME IN ('MARS-1005', 'MARS-1005-ROLLBACK')
|
||||||
|
AND LOG_TIMESTAMP >= SYSDATE - 7
|
||||||
|
ORDER BY LOG_TIMESTAMP DESC
|
||||||
|
FETCH FIRST 10 ROWS ONLY
|
||||||
|
) LOOP
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- ' || rec.LOG_TIME || ' [' || rec.LOG_LEVEL || '] ' ||
|
||||||
|
rec.PROCEDURE_NAME || ': ' || rec.MESSAGE);
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
-- Delete the process logs
|
||||||
|
DELETE FROM CT_MRDS.A_PROCESS_LOG
|
||||||
|
WHERE PROCESS_NAME IN ('MARS-1005', 'MARS-1005-ROLLBACK')
|
||||||
|
AND LOG_TIMESTAMP >= SYSDATE - 7;
|
||||||
|
|
||||||
|
vDeletedCount := SQL%ROWCOUNT;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: Successfully deleted ' || vDeletedCount || ' process log entries');
|
||||||
|
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: No process log entries found to delete');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
ROLLBACK;
|
||||||
|
vErrorMsg := 'Failed to clean process logs: ' || SQLERRM;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: Error during process log cleanup: ' || SQLERRM);
|
||||||
|
-- Log the error (will remain after rollback for debugging)
|
||||||
|
INSERT INTO CT_MRDS.A_PROCESS_LOG (PROCESS_NAME, PROCEDURE_NAME, LOG_LEVEL, LOG_MESSAGE)
|
||||||
|
VALUES ('MARS-1005-ROLLBACK', 'CLEANUP_PROCESS_LOGS', 'ERROR', vErrorMsg);
|
||||||
|
COMMIT;
|
||||||
|
RAISE;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT Process Log Cleanup Completed
|
||||||
|
PROMPT =========================================================================
|
||||||
207
MARS_Packages/REL03/MARS-1005/99_MARS_1005_verify_rollback.sql
Normal file
207
MARS_Packages/REL03/MARS-1005/99_MARS_1005_verify_rollback.sql
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
-- ===================================================================
|
||||||
|
-- MARS-1005 Rollback Verification: Confirm Rollback Completion
|
||||||
|
-- ===================================================================
|
||||||
|
-- Purpose: Verify that MARS-1005 rollback completed successfully
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-02-12
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
SET TIMING ON
|
||||||
|
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT MARS-1005 Rollback Verification
|
||||||
|
PROMPT =========================================================================
|
||||||
|
|
||||||
|
-- Check 1: Verify file registrations were removed
|
||||||
|
PROMPT Checking file registration cleanup...
|
||||||
|
DECLARE
|
||||||
|
vRemainingFiles NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO vRemainingFiles
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005'
|
||||||
|
AND RECEPTION_DATE >= SYSDATE - 7; -- Last week
|
||||||
|
|
||||||
|
IF vRemainingFiles = 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: All MARS-1005 file registrations successfully removed');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: ' || vRemainingFiles || ' file registrations still exist');
|
||||||
|
|
||||||
|
-- Show remaining files
|
||||||
|
FOR rec IN (
|
||||||
|
SELECT SUBSTR(SOURCE_FILE_NAME, 1, 50) AS FILE_NAME,
|
||||||
|
TO_CHAR(RECEPTION_DATE, 'YYYY-MM-DD HH24:MI:SS') AS RECEIVED_TIME
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005'
|
||||||
|
AND RECEPTION_DATE >= SYSDATE - 7
|
||||||
|
) LOOP
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Remaining: ' || rec.FILE_NAME);
|
||||||
|
END LOOP;
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Check 2: Verify process logs were cleaned
|
||||||
|
PROMPT Checking process log cleanup...
|
||||||
|
DECLARE
|
||||||
|
vRemainingLogs NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO vRemainingLogs
|
||||||
|
FROM CT_MRDS.A_PROCESS_LOG
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005'
|
||||||
|
AND LOG_TIMESTAMP >= SYSDATE - 7; -- Last week
|
||||||
|
|
||||||
|
IF vRemainingLogs = 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: All MARS-1005 process logs successfully removed');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: ' || vRemainingLogs || ' process log entries still exist');
|
||||||
|
|
||||||
|
-- Show remaining logs (first few)
|
||||||
|
FOR rec IN (
|
||||||
|
SELECT TO_CHAR(LOG_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS') AS LOG_TIME,
|
||||||
|
PROCEDURE_NAME,
|
||||||
|
SUBSTR(LOG_MESSAGE, 1, 40) AS MESSAGE
|
||||||
|
FROM CT_MRDS.A_PROCESS_LOG
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005'
|
||||||
|
AND LOG_TIMESTAMP >= SYSDATE - 7
|
||||||
|
ORDER BY LOG_TIMESTAMP DESC
|
||||||
|
FETCH FIRST 3 ROWS ONLY
|
||||||
|
) LOOP
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Remaining: ' || rec.LOG_TIME || ' ' || rec.PROCEDURE_NAME);
|
||||||
|
END LOOP;
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Check 3: Verify cloud bucket cleanup (informational only)
|
||||||
|
PROMPT Checking cloud bucket status...
|
||||||
|
DECLARE
|
||||||
|
vCloudFileCount NUMBER := 0;
|
||||||
|
vCredentialName VARCHAR2(100);
|
||||||
|
vDataBucketUri VARCHAR2(500);
|
||||||
|
BEGIN
|
||||||
|
-- Get bucket URI and credential
|
||||||
|
vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('ODS');
|
||||||
|
vCredentialName := CT_MRDS.ENV_MANAGER.gvCredentialName;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Checking ODS bucket: ' || vDataBucketUri);
|
||||||
|
|
||||||
|
-- Count remaining files in cloud bucket
|
||||||
|
BEGIN
|
||||||
|
FOR rec IN (
|
||||||
|
SELECT object_name
|
||||||
|
FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(
|
||||||
|
credential_name => vCredentialName,
|
||||||
|
location_uri => vDataBucketUri
|
||||||
|
))
|
||||||
|
WHERE object_name LIKE 'ODS/TOP/%'
|
||||||
|
) LOOP
|
||||||
|
vCloudFileCount := vCloudFileCount + 1;
|
||||||
|
IF vCloudFileCount <= 3 THEN -- Show first 3 files
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Cloud file: ' || rec.object_name);
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
IF vCloudFileCount = 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: No TOP files found in cloud bucket - clean');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('INFO: ' || vCloudFileCount || ' TOP file(s) still in cloud bucket');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Note: Cloud files are not automatically deleted by rollback');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Run 90_MARS_1005_rollback_delete_csv_files.sql to remove them');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: Cannot check cloud bucket: ' || SQLERRM);
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Check 4: Verify rollback logs were created
|
||||||
|
PROMPT Checking rollback operation logs...
|
||||||
|
DECLARE
|
||||||
|
vRollbackLogs NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO vRollbackLogs
|
||||||
|
FROM CT_MRDS.A_PROCESS_LOG
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005-ROLLBACK'
|
||||||
|
AND LOG_TIMESTAMP >= SYSDATE - 1/24; -- Last hour
|
||||||
|
|
||||||
|
IF vRollbackLogs > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: Rollback operation logs found: ' || vRollbackLogs);
|
||||||
|
|
||||||
|
-- Show recent rollback logs
|
||||||
|
FOR rec IN (
|
||||||
|
SELECT TO_CHAR(LOG_TIMESTAMP, 'HH24:MI:SS') AS LOG_TIME,
|
||||||
|
PROCEDURE_NAME,
|
||||||
|
LOG_LEVEL,
|
||||||
|
SUBSTR(LOG_MESSAGE, 1, 50) AS MESSAGE
|
||||||
|
FROM CT_MRDS.A_PROCESS_LOG
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005-ROLLBACK'
|
||||||
|
AND LOG_TIMESTAMP >= SYSDATE - 1/24
|
||||||
|
ORDER BY LOG_TIMESTAMP DESC
|
||||||
|
) LOOP
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ' || rec.LOG_TIME || ' [' || rec.LOG_LEVEL || '] ' ||
|
||||||
|
rec.PROCEDURE_NAME || ': ' || rec.MESSAGE);
|
||||||
|
END LOOP;
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: Warning: No rollback operation logs found');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT MARS-1005 Rollback Verification Summary
|
||||||
|
PROMPT =========================================================================
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
vRemainingFiles NUMBER := 0;
|
||||||
|
vRemainingLogs NUMBER := 0;
|
||||||
|
vRollbackStatus VARCHAR2(20);
|
||||||
|
BEGIN
|
||||||
|
-- Count remaining registrations
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO vRemainingFiles
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005'
|
||||||
|
AND RECEPTION_DATE >= SYSDATE - 7;
|
||||||
|
|
||||||
|
-- Count remaining process logs
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO vRemainingLogs
|
||||||
|
FROM CT_MRDS.A_PROCESS_LOG
|
||||||
|
WHERE PROCESS_NAME = 'MARS-1005'
|
||||||
|
AND LOG_TIMESTAMP >= SYSDATE - 7;
|
||||||
|
|
||||||
|
-- Determine rollback status
|
||||||
|
IF vRemainingFiles = 0 AND vRemainingLogs = 0 THEN
|
||||||
|
vRollbackStatus := 'COMPLETE';
|
||||||
|
ELSIF vRemainingFiles = 0 OR vRemainingLogs = 0 THEN
|
||||||
|
vRollbackStatus := 'PARTIAL';
|
||||||
|
ELSE
|
||||||
|
vRollbackStatus := 'INCOMPLETE';
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('MARS-1005 Rollback Status: ' || vRollbackStatus);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- Remaining file registrations: ' || vRemainingFiles);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('- Remaining process logs: ' || vRemainingLogs);
|
||||||
|
|
||||||
|
IF vRollbackStatus = 'COMPLETE' THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: Rollback completed successfully - system clean');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: Rollback incomplete - manual cleanup may be required');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Note: Cloud bucket files (OCI) are not automatically removed');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Use OCI console or DBMS_CLOUD commands for file deletion if needed');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT Rollback Verification Completed
|
||||||
|
PROMPT =========================================================================
|
||||||
91
MARS_Packages/REL03/MARS-1005/install_mars1005.sql
Normal file
91
MARS_Packages/REL03/MARS-1005/install_mars1005.sql
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
-- ===================================================================
|
||||||
|
-- MARS-1005 INSTALL SCRIPT: OU_TOP Historical Data Export to ODS Bucket
|
||||||
|
-- ===================================================================
|
||||||
|
-- Purpose: One-time bulk export of 6 OU_TOP LEGACY tables to OCI DATA bucket
|
||||||
|
-- (ODS bucket area, CSV format)
|
||||||
|
-- Uses DATA_EXPORTER EXPORT_TABLE_DATA with pRegisterExport for file tracking
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-03-06
|
||||||
|
|
||||||
|
-- Dynamic spool file generation (using SYS_CONTEXT - no DBA privileges required)
|
||||||
|
-- Log files are automatically created in log/ subdirectory
|
||||||
|
-- IMPORTANT: Ensure log/ directory exists before SPOOL (use host mkdir)
|
||||||
|
host mkdir log 2>nul
|
||||||
|
|
||||||
|
var filename VARCHAR2(100)
|
||||||
|
BEGIN
|
||||||
|
:filename := 'log/INSTALL_MARS_1005_' || SYS_CONTEXT('USERENV', 'CON_NAME') || '_' || TO_CHAR(SYSDATE,'YYYYMMDD_HH24MISS') || '.log';
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
column filename new_value _filename
|
||||||
|
select :filename filename from dual;
|
||||||
|
spool &_filename
|
||||||
|
|
||||||
|
SET ECHO OFF
|
||||||
|
SET TIMING ON
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
SET PAUSE OFF
|
||||||
|
|
||||||
|
-- Set current schema context (optional - use when modifying packages in specific schema)
|
||||||
|
-- ALTER SESSION SET CURRENT_SCHEMA = CT_MRDS;
|
||||||
|
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT MARS-1005: OU_TOP Historical Data Export to ODS Bucket (One-Time Migration)
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT
|
||||||
|
PROMPT This script will export 6 OU_TOP LEGACY tables to OCI DATA bucket:
|
||||||
|
PROMPT
|
||||||
|
PROMPT TARGET: DATA Bucket / ODS area (CSV format):
|
||||||
|
PROMPT - OU_TOP.LEGACY_ALLOTMENT -> ODS/TOP/TOP_ALLOTMENT
|
||||||
|
PROMPT - OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_HEADER -> ODS/TOP/TOP_ALLOTMENT_MODIFICATION_HEADER
|
||||||
|
PROMPT - OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_ITEM -> ODS/TOP/TOP_ALLOTMENT_MODIFICATION_ITEM
|
||||||
|
PROMPT - OU_TOP.LEGACY_ANNOUNCEMENT -> ODS/TOP/TOP_ANNOUNCEMENT
|
||||||
|
PROMPT - OU_TOP.LEGACY_FBL_ITEM -> ODS/TOP/TOP_FULLBIDLIST_ITEM
|
||||||
|
PROMPT - OU_TOP.LEGACY_FULLBID_ARRAY_COMPILED -> ODS/TOP/TOP_FULLBID_ARRAY_COMPILED
|
||||||
|
PROMPT
|
||||||
|
PROMPT Key Features:
|
||||||
|
PROMPT - Files registered in A_SOURCE_FILE_RECEIVED with PROCESS_NAME = 'MARS-1005'
|
||||||
|
PROMPT - Template table column order matching (CT_ET_TEMPLATES.TOP_*)
|
||||||
|
PROMPT - ODS/TOP bucket path structure
|
||||||
|
PROMPT =========================================================================
|
||||||
|
|
||||||
|
-- Confirm installation with user
|
||||||
|
ACCEPT continue CHAR PROMPT 'Type YES to continue with installation, or Ctrl+C to abort: '
|
||||||
|
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||||
|
BEGIN
|
||||||
|
IF '&continue' IS NULL OR TRIM('&continue') IS NULL OR UPPER(TRIM('&continue')) != 'YES' THEN
|
||||||
|
RAISE_APPLICATION_ERROR(-20001, 'Installation aborted by user');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
WHENEVER SQLERROR CONTINUE
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT Step 1: Export OU_TOP Data to ODS Bucket
|
||||||
|
PROMPT =========================================================================
|
||||||
|
@@01_MARS_1005_export_top_data.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT Step 2: Verify Exports (File Registration Check)
|
||||||
|
PROMPT =========================================================================
|
||||||
|
@@02_MARS_1005_verify_exports.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT Step 3: Verify Data Integrity (Source vs Exported)
|
||||||
|
PROMPT =========================================================================
|
||||||
|
@@03_MARS_1005_verify_data_integrity.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT MARS-1005 Installation - COMPLETED
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT Check the log file for complete installation details.
|
||||||
|
PROMPT For rollback, use: rollback_mars1005.sql
|
||||||
|
PROMPT =========================================================================
|
||||||
|
|
||||||
|
spool off
|
||||||
|
|
||||||
|
quit;
|
||||||
81
MARS_Packages/REL03/MARS-1005/rollback_mars1005.sql
Normal file
81
MARS_Packages/REL03/MARS-1005/rollback_mars1005.sql
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
-- ===================================================================
|
||||||
|
-- MARS-1005 ROLLBACK SCRIPT: C2D MPEC Data Export Rollback
|
||||||
|
-- ===================================================================
|
||||||
|
-- Purpose: Rollback MARS-1005 - Delete exported CSV files and file registrations
|
||||||
|
-- WARNING: This will DELETE all exported data files and registrations!
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-02-12
|
||||||
|
|
||||||
|
-- Dynamic spool file generation (using SYS_CONTEXT - no DBA privileges required)
|
||||||
|
-- IMPORTANT: Ensure log/ directory exists before SPOOL (use host mkdir)
|
||||||
|
host mkdir log 2>nul
|
||||||
|
|
||||||
|
var filename VARCHAR2(100)
|
||||||
|
BEGIN
|
||||||
|
:filename := 'log/ROLLBACK_MARS_1005_' || SYS_CONTEXT('USERENV', 'CON_NAME') || '_' || TO_CHAR(SYSDATE,'YYYYMMDD_HH24MISS') || '.log';
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
column filename new_value _filename
|
||||||
|
select :filename filename from dual;
|
||||||
|
spool &_filename
|
||||||
|
|
||||||
|
SET ECHO OFF
|
||||||
|
SET TIMING ON
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
SET PAUSE OFF
|
||||||
|
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT MARS-1005: Rollback C2D MPEC Data Export
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT WARNING: This will DELETE exported CSV files and file registrations!
|
||||||
|
PROMPT - ODS bucket: mrds_data_dev/ODS/C2D/
|
||||||
|
PROMPT - File registrations: A_SOURCE_FILE_RECEIVED entries
|
||||||
|
PROMPT
|
||||||
|
PROMPT Only proceed if export failed and needs to be restarted!
|
||||||
|
PROMPT =========================================================================
|
||||||
|
|
||||||
|
-- Confirm rollback with user
|
||||||
|
ACCEPT continue CHAR PROMPT 'Type YES to continue with rollback, or Ctrl+C to abort: '
|
||||||
|
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||||
|
BEGIN
|
||||||
|
IF '&continue' IS NULL OR TRIM('&continue') IS NULL OR UPPER(TRIM('&continue')) != 'YES' THEN
|
||||||
|
RAISE_APPLICATION_ERROR(-20001, 'Rollback aborted by user');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
WHENEVER SQLERROR CONTINUE
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT Step 1: Delete Exported CSV Files from DATA Bucket
|
||||||
|
PROMPT =========================================================================
|
||||||
|
@@90_MARS_1005_rollback_delete_csv_files.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT Step 2: Delete File Registrations
|
||||||
|
PROMPT =========================================================================
|
||||||
|
@@91_MARS_1005_rollback_file_registrations.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT Step 3: Clean Process Logs
|
||||||
|
PROMPT =========================================================================
|
||||||
|
@@92_MARS_1005_rollback_process_logs.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT Step 4: Verify Rollback Completion
|
||||||
|
PROMPT =========================================================================
|
||||||
|
@@99_MARS_1005_verify_rollback.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT MARS-1005 Rollback - COMPLETED
|
||||||
|
PROMPT =========================================================================
|
||||||
|
PROMPT Check the log file for complete rollback details.
|
||||||
|
PROMPT =========================================================================
|
||||||
|
|
||||||
|
spool off
|
||||||
|
|
||||||
|
quit;
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table C2D_A_UC_DISSEM_METADATA_LOADS
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."C2D_A_UC_DISSEM_METADATA_LOADS"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"C2D_VERSION" VARCHAR2(3 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FILE_CREATION_DATE" DATE,
|
||||||
|
"NO_OF_SUSPECT_RECORDS" NUMBER(10,0),
|
||||||
|
"REPORTING_NCB" VARCHAR2(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SNAPSHOT_DATE" DATE,
|
||||||
|
"PROCESSED_TO_DWH" CHAR(1 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table C2D_A_UC_DISSEM_METADATA_LOADS
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_A_UC_DISSEM_METADATA_LOADS" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_A_UC_DISSEM_METADATA_LOADS" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table C2D_ELA_INFO_REPLICATION
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."C2D_ELA_INFO_REPLICATION"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"VERSION" VARCHAR2(5 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"ID" NUMBER(28,0),
|
||||||
|
"RIAD_CODE" VARCHAR2(30 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"INSTITUTION_NAME" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"ELA_MATURITY_DATE" DATE,
|
||||||
|
"ELA_VALUE_DATE" DATE,
|
||||||
|
"ELA_BASE" NUMBER(28,10),
|
||||||
|
"ELA_DENOMINATION" VARCHAR2(3 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"ELA" NUMBER(28,10),
|
||||||
|
"INTEREST_RATE_APPLIED" NUMBER(28,10),
|
||||||
|
"ISIN_CODE" VARCHAR2(100 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"NOMINAL_AMOUNT_SUBMITTED" NUMBER(28,10),
|
||||||
|
"COLLATERAL_VALUE_BEFORE_HAIRCU" NUMBER(28,10),
|
||||||
|
"COLLATERAL_VALUE_AFTER_HAIRCUT" NUMBER(28,10),
|
||||||
|
"HAIRCUT" NUMBER(28,10),
|
||||||
|
"ELA_ASSET_GROUP" VARCHAR2(100 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"DENOMINATION" VARCHAR2(3 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"ASSET_TYPE" VARCHAR2(4 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"DOMESTIC_OR_XBORDER" VARCHAR2(20 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"ABS_TYPE" VARCHAR2(40 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"NUMBER_OF_AGGREG_ASSETS" NUMBER(28,0),
|
||||||
|
"NUMBER_OF_AGGREG_DEBTORS" NUMBER(28,0),
|
||||||
|
"GUARANTEE" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUER_CODE" VARCHAR2(30 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUER_NAME" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUER_RESIDENCE" VARCHAR2(3 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUER_GROUP" VARCHAR2(4 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING_OF_ASSET" VARCHAR2(100 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING_OF_THE_IS" VARCHAR2(100 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING_OF_THE_GU" VARCHAR2(100 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"PRICE_INFORMATION" VARCHAR2(100 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"VALUATION_METHODOLOGY" VARCHAR2(15 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"TYPE_OF_OPERATION" VARCHAR2(30 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"NCB_COMMENT" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"REPORTING_NCB" VARCHAR2(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SNAPSHOT_DATE" DATE,
|
||||||
|
"IS_CORRECTION" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"META_INFORMATION_ID" NUMBER(19,0),
|
||||||
|
"META_INFORMATION_TYPE" VARCHAR2(50 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"USED_SNAPSHOT_DATE" DATE,
|
||||||
|
"PRICING_DATE" DATE
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table C2D_ELA_INFO_REPLICATION
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_ELA_INFO_REPLICATION" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_ELA_INFO_REPLICATION" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table C2D_MPEC_ADMIN
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."C2D_MPEC_ADMIN"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"SENDER_ISO_CODE" VARCHAR2(5 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SENDER_BUSINESS_AREA" VARCHAR2(200 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RECEIVER_ISO_CODE" VARCHAR2(5 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RECEIVER_BUSINESS_AREA" VARCHAR2(200 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DATASET_ID" VARCHAR2(5 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CREATION_TIME" DATE,
|
||||||
|
"IREF" NUMBER(19,0),
|
||||||
|
"SUBJECT" VARCHAR2(2000 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table C2D_MPEC_ADMIN
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_MPEC_ADMIN" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_MPEC_ADMIN" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table C2D_MPEC_CONTENT
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."C2D_MPEC_CONTENT"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"HOST" VARCHAR2(5 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ID" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MPEC_BIC" VARCHAR2(11 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RTGS_ACCESS" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"INTRADAY_CREDIT_FACILITY" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MRR_TYPE" VARCHAR2(30 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MRR_INTERMEDIARY_HOST" VARCHAR2(5 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MRR_INTERMEDIARY_ID" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MRR_AVG_PROV_SUSP_STDT" DATE,
|
||||||
|
"MRR_AVG_PROV_SUSP_ENDT" DATE,
|
||||||
|
"MRR_EXEMPTION_STDT" DATE,
|
||||||
|
"MRR_EXEMPTION_ENDT" DATE,
|
||||||
|
"MRR_EXEMPTION_REORG_STDT" DATE,
|
||||||
|
"MRR_EXEMPTION_REORG_ENDT" DATE,
|
||||||
|
"PRUDENTIAL_SUPERVISION" VARCHAR2(100 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ELIG_DEPOSIT_FACILITY" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEPOSIT_FACILITY_SUSP_STDT" DATE,
|
||||||
|
"DEPOSIT_FACILITY_SUSP_ENDT" DATE,
|
||||||
|
"DEPOSIT_FACILITY_EXCL_STDT" DATE,
|
||||||
|
"DEPOSIT_FACILITY_EXCL_ENDT" DATE,
|
||||||
|
"DEPOSIT_FACILITY_LIMIT_STDT" DATE,
|
||||||
|
"DEPOSIT_FACILITY_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_MARGINAL_LENDING_FACILITY" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MARG_LEND_FACILITY_SUSP_STDT" DATE,
|
||||||
|
"MARG_LEND_FACILITY_SUSP_ENDT" DATE,
|
||||||
|
"MARG_LEND_FACILITY_EXCL_STDT" DATE,
|
||||||
|
"MARG_LEND_FACILITY_EXCL_ENDT" DATE,
|
||||||
|
"MARG_LEND_FACILITY_LIMIT_STDT" DATE,
|
||||||
|
"MARG_LEND_FACILITY_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_ECB_DEBT_CERTIFICATE" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ECB_DEBT_CERTIF_SUSP_STDT" DATE,
|
||||||
|
"ECB_DEBT_CERTIF_SUSP_ENDT" DATE,
|
||||||
|
"ECB_DEBT_CERTIF_EXCL_STDT" DATE,
|
||||||
|
"ECB_DEBT_CERTIF_EXCL_ENDT" DATE,
|
||||||
|
"ECB_DEBT_CERTIF_LIMIT_STDT" DATE,
|
||||||
|
"ECB_DEBT_CERTIF_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_STD_TENDER_OPERATIONS" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"STD_TENDER_OPE_SUSP_STDT" DATE,
|
||||||
|
"STD_TENDER_OPE_SUSP_ENDT" DATE,
|
||||||
|
"STD_TENDER_OPE_EXCL_STDT" DATE,
|
||||||
|
"STD_TENDER_OPE_EXCL_ENDT" DATE,
|
||||||
|
"STD_TENDER_OPE_LIMIT_STDT" DATE,
|
||||||
|
"STD_TENDER_OPE_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_FTRO_ABSORBING" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FINE_TUN_REVOPE_ABS_SUSP_STDT" DATE,
|
||||||
|
"FINE_TUN_REVOPE_ABS_SUSP_ENDT" DATE,
|
||||||
|
"FINE_TUN_REVOPE_ABS_EXCL_STDT" DATE,
|
||||||
|
"FINE_TUN_REVOPE_ABS_EXCL_ENDT" DATE,
|
||||||
|
"FINE_TUN_REVOPE_ABS_LIMIT_STDT" DATE,
|
||||||
|
"FINE_TUN_REVOPE_ABS_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_FTRO_PROVIDING" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FINE_TUN_REVOP_PROV_SUSP_STDT" DATE,
|
||||||
|
"FINE_TUN_REVOP_PROV_SUSP_ENDT" DATE,
|
||||||
|
"FINE_TUN_REVOP_PROV_EXCL_STDT" DATE,
|
||||||
|
"FINE_TUN_REVOP_PROV_EXCL_ENDT" DATE,
|
||||||
|
"FINE_TUN_REVOP_PROV_LIMIT_STDT" DATE,
|
||||||
|
"FINE_TUN_REVOP_PROV_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_FIX_TERM_DEPOSIT" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FIX_TERM_DEPOSIT_SUSP_STDT" DATE,
|
||||||
|
"FIX_TERM_DEPOSIT_SUSP_ENDT" DATE,
|
||||||
|
"FIX_TERM_DEPOSIT_EXCL_STDT" DATE,
|
||||||
|
"FIX_TERM_DEPOSIT_EXCL_ENDT" DATE,
|
||||||
|
"FIX_TERM_DEPOSIT_LIMIT_STDT" DATE,
|
||||||
|
"FIX_TERM_DEPOSIT_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_FX_SWAP_ABSORBING" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FX_SWAP_ABS_SUSP_STDT" DATE,
|
||||||
|
"FX_SWAP_ABS_SUSP_ENDT" DATE,
|
||||||
|
"FX_SWAP_ABS_EXCL_STDT" DATE,
|
||||||
|
"FX_SWAP_ABS_EXCL_ENDT" DATE,
|
||||||
|
"FX_SWAP_ABS_LIMIT_STDT" DATE,
|
||||||
|
"FX_SWAP_ABS_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_FX_SWAP_PROVIDING" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FX_SWAP_PROV_SUSP_STDT" DATE,
|
||||||
|
"FX_SWAP_PROV_SUSP_ENDT" DATE,
|
||||||
|
"FX_SWAP_PROV_EXCL_STDT" DATE,
|
||||||
|
"FX_SWAP_PROV_EXCL_ENDT" DATE,
|
||||||
|
"FX_SWAP_PROV_LIMIT_STDT" DATE,
|
||||||
|
"FX_SWAP_PROV_LIMIT_ENDT" DATE,
|
||||||
|
"ECB_ENTRY_DATE" DATE,
|
||||||
|
"STATUS" VARCHAR2(10 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ACTION" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"USD_OPERATIONS" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DELETION_REASON" VARCHAR2(30 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"NCB_COMMENT" VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"CLM_ACCESS" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table C2D_MPEC_CONTENT
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_MPEC_CONTENT" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_MPEC_CONTENT" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table C2D_MPEC_CONTENT_CRITERION
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."C2D_MPEC_CONTENT_CRITERION"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"A_MPEC_CONTENT_FK" NUMBER(38,0),
|
||||||
|
"CRITERION" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table C2D_MPEC_CONTENT_CRITERION
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_MPEC_CONTENT_CRITERION" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_MPEC_CONTENT_CRITERION" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table C2D_MPEC_CONTENT_CRITERION_FULL
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."C2D_MPEC_CONTENT_CRITERION_FULL"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"A_MPEC_CONTENT_FK" NUMBER(38,0),
|
||||||
|
"CRITERION" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table C2D_MPEC_CONTENT_CRITERION_FULL
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_MPEC_CONTENT_CRITERION_FULL" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_MPEC_CONTENT_CRITERION_FULL" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table C2D_MPEC_CONTENT_FULL
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."C2D_MPEC_CONTENT_FULL"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"HOST" VARCHAR2(5 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ID" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MPEC_BIC" VARCHAR2(11 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RTGS_ACCESS" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"INTRADAY_CREDIT_FACILITY" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MRR_TYPE" VARCHAR2(30 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MRR_INTERMEDIARY_HOST" VARCHAR2(5 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MRR_INTERMEDIARY_ID" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MRR_AVG_PROV_SUSP_STDT" DATE,
|
||||||
|
"MRR_AVG_PROV_SUSP_ENDT" DATE,
|
||||||
|
"MRR_EXEMPTION_STDT" DATE,
|
||||||
|
"MRR_EXEMPTION_ENDT" DATE,
|
||||||
|
"MRR_EXEMPTION_REORG_STDT" DATE,
|
||||||
|
"MRR_EXEMPTION_REORG_ENDT" DATE,
|
||||||
|
"PRUDENTIAL_SUPERVISION" VARCHAR2(100 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ELIG_DEPOSIT_FACILITY" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEPOSIT_FACILITY_SUSP_STDT" DATE,
|
||||||
|
"DEPOSIT_FACILITY_SUSP_ENDT" DATE,
|
||||||
|
"DEPOSIT_FACILITY_EXCL_STDT" DATE,
|
||||||
|
"DEPOSIT_FACILITY_EXCL_ENDT" DATE,
|
||||||
|
"DEPOSIT_FACILITY_LIMIT_STDT" DATE,
|
||||||
|
"DEPOSIT_FACILITY_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_MARGINAL_LENDING_FACILITY" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MARG_LEND_FACILITY_SUSP_STDT" DATE,
|
||||||
|
"MARG_LEND_FACILITY_SUSP_ENDT" DATE,
|
||||||
|
"MARG_LEND_FACILITY_EXCL_STDT" DATE,
|
||||||
|
"MARG_LEND_FACILITY_EXCL_ENDT" DATE,
|
||||||
|
"MARG_LEND_FACILITY_LIMIT_STDT" DATE,
|
||||||
|
"MARG_LEND_FACILITY_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_ECB_DEBT_CERTIFICATE" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ECB_DEBT_CERTIF_SUSP_STDT" DATE,
|
||||||
|
"ECB_DEBT_CERTIF_SUSP_ENDT" DATE,
|
||||||
|
"ECB_DEBT_CERTIF_EXCL_STDT" DATE,
|
||||||
|
"ECB_DEBT_CERTIF_EXCL_ENDT" DATE,
|
||||||
|
"ECB_DEBT_CERTIF_LIMIT_STDT" DATE,
|
||||||
|
"ECB_DEBT_CERTIF_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_STD_TENDER_OPERATIONS" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"STD_TENDER_OPE_SUSP_STDT" DATE,
|
||||||
|
"STD_TENDER_OPE_SUSP_ENDT" DATE,
|
||||||
|
"STD_TENDER_OPE_EXCL_STDT" DATE,
|
||||||
|
"STD_TENDER_OPE_EXCL_ENDT" DATE,
|
||||||
|
"STD_TENDER_OPE_LIMIT_STDT" DATE,
|
||||||
|
"STD_TENDER_OPE_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_FTRO_ABSORBING" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FINE_TUN_REVOPE_ABS_SUSP_STDT" DATE,
|
||||||
|
"FINE_TUN_REVOPE_ABS_SUSP_ENDT" DATE,
|
||||||
|
"FINE_TUN_REVOPE_ABS_EXCL_STDT" DATE,
|
||||||
|
"FINE_TUN_REVOPE_ABS_EXCL_ENDT" DATE,
|
||||||
|
"FINE_TUN_REVOPE_ABS_LIMIT_STDT" DATE,
|
||||||
|
"FINE_TUN_REVOPE_ABS_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_FTRO_PROVIDING" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FINE_TUN_REVOP_PROV_SUSP_STDT" DATE,
|
||||||
|
"FINE_TUN_REVOP_PROV_SUSP_ENDT" DATE,
|
||||||
|
"FINE_TUN_REVOP_PROV_EXCL_STDT" DATE,
|
||||||
|
"FINE_TUN_REVOP_PROV_EXCL_ENDT" DATE,
|
||||||
|
"FINE_TUN_REVOP_PROV_LIMIT_STDT" DATE,
|
||||||
|
"FINE_TUN_REVOP_PROV_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_FIX_TERM_DEPOSIT" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FIX_TERM_DEPOSIT_SUSP_STDT" DATE,
|
||||||
|
"FIX_TERM_DEPOSIT_SUSP_ENDT" DATE,
|
||||||
|
"FIX_TERM_DEPOSIT_EXCL_STDT" DATE,
|
||||||
|
"FIX_TERM_DEPOSIT_EXCL_ENDT" DATE,
|
||||||
|
"FIX_TERM_DEPOSIT_LIMIT_STDT" DATE,
|
||||||
|
"FIX_TERM_DEPOSIT_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_FX_SWAP_ABSORBING" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FX_SWAP_ABS_SUSP_STDT" DATE,
|
||||||
|
"FX_SWAP_ABS_SUSP_ENDT" DATE,
|
||||||
|
"FX_SWAP_ABS_EXCL_STDT" DATE,
|
||||||
|
"FX_SWAP_ABS_EXCL_ENDT" DATE,
|
||||||
|
"FX_SWAP_ABS_LIMIT_STDT" DATE,
|
||||||
|
"FX_SWAP_ABS_LIMIT_ENDT" DATE,
|
||||||
|
"ELIG_FX_SWAP_PROVIDING" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FX_SWAP_PROV_SUSP_STDT" DATE,
|
||||||
|
"FX_SWAP_PROV_SUSP_ENDT" DATE,
|
||||||
|
"FX_SWAP_PROV_EXCL_STDT" DATE,
|
||||||
|
"FX_SWAP_PROV_EXCL_ENDT" DATE,
|
||||||
|
"FX_SWAP_PROV_LIMIT_STDT" DATE,
|
||||||
|
"FX_SWAP_PROV_LIMIT_ENDT" DATE,
|
||||||
|
"ECB_ENTRY_DATE" DATE,
|
||||||
|
"STATUS" VARCHAR2(10 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ACTION" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"USD_OPERATIONS" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DELETION_REASON" VARCHAR2(30 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"NCB_COMMENT" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CLM_ACCESS" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table C2D_MPEC_CONTENT_FULL
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_MPEC_CONTENT_FULL" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_MPEC_CONTENT_FULL" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table C2D_MPEC_MID_FULL
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."C2D_MPEC_MID_FULL"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"RIAD_CODE" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"BIC" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUNTRY_OF_REGISTRATION" VARCHAR2(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"NAME" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"BOX" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ADDRESS" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"POSTAL" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CITY" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CATEGORY" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"HEAD_COUNTRY_OF_REGISTRATION" VARCHAR2(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"HEAD_NAME" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"HEAD_RIAD_CODE" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RESERVE" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"EXEMPT" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table C2D_MPEC_MID_FULL
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_MPEC_MID_FULL" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_MPEC_MID_FULL" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table C2D_UC_MA_DISSEM
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."C2D_UC_MA_DISSEM"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"REPORTING_NCB" VARCHAR2(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SNAPSHOT_DATE" DATE,
|
||||||
|
"FILE_CREATION_DATE" DATE,
|
||||||
|
"MFI_ID" VARCHAR2(256 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISIN_CODE" VARCHAR2(12 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"OTHER_REG_NO" VARCHAR2(100 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"NOM_AMT_SUBMITTED" NUMBER(14,8),
|
||||||
|
"COLL_BEFORE_HAIRCUTS" NUMBER(14,8),
|
||||||
|
"COLL_AFTER_HAIRCUTS" NUMBER(14,8),
|
||||||
|
"TYPE_OF_SYSTEM" VARCHAR2(4 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"TYPE_OF_OPERATION" VARCHAR2(5 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DOM_OR_XBORDER" VARCHAR2(12 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUER_CAS" VARCHAR2(4 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUER_CRED_PROVIDER" VARCHAR2(100 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUER_CLASS" VARCHAR2(8 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUER_RATING_ENUM_VALUE" VARCHAR2(15 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUER_RATING_NUMBER_VALUE" NUMBER(9,8),
|
||||||
|
"NCB_COMMENT" VARCHAR2(200 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MOBILISATION_CHANNEL" VARCHAR2(24 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CCB" VARCHAR2(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"INVESTOR_SSS" VARCHAR2(6 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"INTERMEDIARY_SSS" VARCHAR2(6 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUER_SSS" VARCHAR2(6 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"TRIPARTY_AGENT" VARCHAR2(6 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SUSPECT_ID" NUMBER(10,0),
|
||||||
|
"QUALITY_CHECK_STATUS" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ERROR_CODE" VARCHAR2(30 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ERROR_MESSAGE" VARCHAR2(500 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ERROR_POSITION_IN_FILE" VARCHAR2(200 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table C2D_UC_MA_DISSEM
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_UC_MA_DISSEM" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_UC_MA_DISSEM" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table C2D_UC_NMA_DECC_DISSEM
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."C2D_UC_NMA_DECC_DISSEM"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"REPORTING_NCB" VARCHAR2(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SNAPSHOT_DATE" DATE,
|
||||||
|
"FILE_CREATION_DATE" DATE,
|
||||||
|
"MFI_ID" VARCHAR2(256 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISIN_CODE" VARCHAR2(12 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"NOM_AMT_SUBMITTED" NUMBER(13,8),
|
||||||
|
"TYPE_OF_SYSTEM" VARCHAR2(4 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"TYPE_OF_OPERATION" VARCHAR2(5 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DOM_OR_XBORDER" VARCHAR2(12 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"NON_MKT_ASSET_TYPE" VARCHAR2(20 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"NCB_COMMENT" VARCHAR2(200 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MOBILISATION_CHANNEL" VARCHAR2(24 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CCB" VARCHAR2(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"INVESTOR_SSS" VARCHAR2(6 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"INTERMEDIARY_SSS" VARCHAR2(6 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUER_SSS" VARCHAR2(6 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"TRIPARTY_AGENT" VARCHAR2(6 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SUSPECT_ID" NUMBER(10,0),
|
||||||
|
"QUALITY_CHECK_STATUS" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ERROR_CODE" VARCHAR2(30 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ERROR_MESSAGE" VARCHAR2(500 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ERROR_POSITION_IN_FILE" VARCHAR2(200 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table C2D_UC_NMA_DECC_DISSEM
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_UC_NMA_DECC_DISSEM" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_UC_NMA_DECC_DISSEM" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table C2D_UC_NMA_DISSEM
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."C2D_UC_NMA_DISSEM"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"REPORTING_NCB" VARCHAR2(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SNAPSHOT_DATE" DATE,
|
||||||
|
"FILE_CREATION_DATE" DATE,
|
||||||
|
"MFI_ID" VARCHAR2(256 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"OTHER_REG_NO" VARCHAR2(100 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"TYPE_OF_SYSTEM" VARCHAR2(4 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"TYPE_OF_OPERATION" VARCHAR2(5 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DOM_OR_XBORDER" VARCHAR2(12 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"NON_MKT_ASSET_TYPE" VARCHAR2(20 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MATURITY_DATE" DATE,
|
||||||
|
"INTEREST_PAYMENT_TYPE" VARCHAR2(8 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CAP" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"REFERENCE_RATE" VARCHAR2(9 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"REFERENCE_RATE_COMMENT" VARCHAR2(200 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COLL_BEFORE_HAIRCUTS" NUMBER(14,8),
|
||||||
|
"COLL_AFTER_HAIRCUTS" NUMBER(14,8),
|
||||||
|
"NO_AGGR_DEBTORS" NUMBER(10,0),
|
||||||
|
"ELIGIBLE_VIA_GUAR" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEBTOR_TYPE" VARCHAR2(5 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEBTOR_NAME" VARCHAR2(200 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEBTOR_ID_TYPE" VARCHAR2(4 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEBTOR_ID" VARCHAR2(256 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEBTOR_CLASS" VARCHAR2(50 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEBTOR_RESIDENCE" VARCHAR2(3 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEBTOR_CAS" VARCHAR2(4 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEBTOR_CRED_PROV" VARCHAR2(100 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEBTOR_RATING_ENUM_VALUE" VARCHAR2(15 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEBTOR_RATING_NUMBER_VALUE" NUMBER(9,8),
|
||||||
|
"GUAR_TYPE" VARCHAR2(5 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"GUAR_NAME" VARCHAR2(100 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"GUAR_ID_TYPE" VARCHAR2(4 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"GUAR_ID" VARCHAR2(256 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"GUAR_CLASS" VARCHAR2(50 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"GUAR_RESIDENCE" VARCHAR2(3 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"GUAR_CRED_CAS" VARCHAR2(4 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"GUAR_CRED_PROV" VARCHAR2(100 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"GUAR_RATING_ENUM_VALUE" VARCHAR2(15 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"GUAR_RATING_NUMBER_VALUE" NUMBER(9,8),
|
||||||
|
"NO_AGGR_ASSETS" NUMBER(10,0),
|
||||||
|
"DENOMINATION" VARCHAR2(3 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SECURED_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RESIDUAL_MATURITY" VARCHAR2(5 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"BUCKET_SIZE" VARCHAR2(10 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"NCB_COMMENT" VARCHAR2(200 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VALUATION_METHODOLOGY" VARCHAR2(11 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"NOM_AMT_SUBMITTED" NUMBER(14,8),
|
||||||
|
"RESET_PERIOD_MORE_ONE_YEAR" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MOBILISATION_CHANNEL" VARCHAR2(24 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CCB" VARCHAR2(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"INVESTOR_SSS" VARCHAR2(6 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"INTERMEDIARY_SSS" VARCHAR2(6 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUER_SSS" VARCHAR2(6 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SUSPECT_ID" NUMBER(10,0),
|
||||||
|
"QUALITY_CHECK_STATUS" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ERROR_CODE" VARCHAR2(30 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ERROR_MESSAGE" VARCHAR2(500 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ERROR_POSITION_IN_FILE" VARCHAR2(200 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"OA_ID" VARCHAR2(50 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CONTRACT_ID" VARCHAR2(60 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"INSTRMNT_ID" VARCHAR2(60 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table C2D_UC_NMA_DISSEM
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_UC_NMA_DISSEM" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."C2D_UC_NMA_DISSEM" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table CEPH_PRICING
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."CEPH_PRICING"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"PRICE_DATE" TIMESTAMP (6) WITH TIME ZONE,
|
||||||
|
"RETURNCODE" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISIN_CODE" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PRICE" NUMBER(28,10),
|
||||||
|
"WARNING_CODE" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ACCRUED_INTEREST" NUMBER(28,10),
|
||||||
|
"POOL_FACTOR" NUMBER(28,10),
|
||||||
|
"PRICE_NATURE" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"WAL" NUMBER(28,10),
|
||||||
|
"CLEAN_PRICE_WO_MARKDOWN" NUMBER(28,10),
|
||||||
|
"ACCRUED_INTEREST_WO_MARKDOWN" NUMBER(28,10),
|
||||||
|
"THEORETICAL_PRICE" NUMBER(28,10)
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table CEPH_PRICING
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."CEPH_PRICING" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."CEPH_PRICING" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table CSDB_DEBT
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."CSDB_DEBT"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"NEWUPDATED" DATE,
|
||||||
|
"IDLOADDATE_DIM" DATE,
|
||||||
|
"EXTERNALCODE_ISIN" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"EXTERNALCODETYPE_NC" VARCHAR2(124 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"EXTERNALCODE_NATIONAL" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRINSTRUMENT" NUMBER(28,0),
|
||||||
|
"SHORTNAME" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRDEPOSITORY" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRDEBTTYPE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRASSETSECTYPE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_CFI" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_ESAI" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_ESAI_DM" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCURRENCY_NOMINAL" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"AMOUNTISSUED" NUMBER(28,10),
|
||||||
|
"AMOUNTOUTSTANDING" NUMBER(28,10),
|
||||||
|
"AMOUNTOUTSTANDING_EUR" NUMBER(28,10),
|
||||||
|
"POOLFACTOR" NUMBER(28,10),
|
||||||
|
"ISSUEPRICE" NUMBER(28,10),
|
||||||
|
"IDISSUEDATE" DATE,
|
||||||
|
"IDIRCOUPONTYPE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCOUPONFREQUENCY" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCURRENCY_COUPON" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONRATE" NUMBER(28,10),
|
||||||
|
"COUPONDATE" DATE,
|
||||||
|
"IDIRREDEMPTIONTYPE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRREDEMPTIONFREQUENCY" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCURRENCY_REDEMPTION" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"REDEMPTIONPRICE" NUMBER(28,10),
|
||||||
|
"IDMATURITYDATE" DATE,
|
||||||
|
"IDIRORGANISATIONALIASTYPE_IS" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUERSOURCECODE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUEREXTERNALCODE_MFI" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUEREXTERNALCODE_BIC" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUEREXTERNALCODE_BEI" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRORGANISATION_ISSUER" NUMBER(28,0),
|
||||||
|
"ISSUERNAME" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCOUNTRY" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCOUNTRY_DM" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_ESAO" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_ESAO_DM" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_NACE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PUBLICATIONPRICEDATE" DATE,
|
||||||
|
"PUBLICATIONPRICE" NUMBER(28,10),
|
||||||
|
"PUBLICATIONPRICETYPE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PUBLICATIONPRICEQUOTATIONBASIS" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MONTHLYAVERAGEPRICE" NUMBER(28,10),
|
||||||
|
"ACCRUALSTARTDATE" DATE,
|
||||||
|
"DEBTACCRUALDEBTOR" NUMBER(28,10),
|
||||||
|
"DEBTACCRUALDEBTOR_DM" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEBTACCRUALCREDITOR" NUMBER(28,10),
|
||||||
|
"DEBTACCRUALCREDITOR_TYP" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ACCRUEDINTEREST" NUMBER(28,10),
|
||||||
|
"YTMNONOPTIONADJUSTED" NUMBER(28,10),
|
||||||
|
"ESCB_ISSUER_IDENT" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VA_ESCBCODETYPE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDUDCMPPARTY" NUMBER(28,0),
|
||||||
|
"AMOUNTOUTSTANDINGTYPE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MARKETCAPITALISATION" NUMBER(28,10),
|
||||||
|
"MARKETCAPITALISATION_EUR" NUMBER(28,10),
|
||||||
|
"VA_SECURITYSTATUS" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VA_INSTRSUPPLEMENTARYCLASS" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VA_RESIDUALMATURITYCLASS" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VA_ISINSEC" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VA_ISELIGIBLEFOREADB" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_ESAI10" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_ESAO10" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRDEBTTYPE_N" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SENIORITY" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUEREXTERNALCODE_LEI" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"INSTR_ESA2010_CLASS_VALUETYPE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISS_ESA2010_CLASS_VALUETYPE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VA_SECURITYSTATUSDATE" DATE,
|
||||||
|
"GROUP_TYPE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"HASEMBEDDEDOPTION" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VOLUMETRADED" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PRIMARYLISTINGNAME" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PRIMARYLISTINGCOUNTRY" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VA_INSTRPORTFLAGS" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VA_BONDDURATION" NUMBER(28,10),
|
||||||
|
"RESIDUALMATURITY" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ORIGINAL_MATURITY" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_CFIN" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONFIRSTPAYMENTDATE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONLASTPAYMENTDATE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONRATEUNDERLYINGCODE_ISIN" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONRATESPREAD" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONRATEMULTIPLIER" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONRATECAP" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONRATEFLOOR" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDISSUEDATE_TRANCHE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUEPRICE_TRANCHE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VA_ISPRIVATEPLACEMENT" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RIAD_CODE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RIAD_OUID" NUMBER(38,0),
|
||||||
|
"ESG1" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ESG2" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ESG3" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"STRIP" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEPOSITORY_RECEIPT" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RULE_144A" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"REG_S" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"WARRANT" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CSEC_RELEVANCE_STOCK" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CSEC_RELEVANCE_GROSS_ISSUANCE" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CSEC_RELEVANCE_REDEMPTION" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ACCRUING_COUPON" NUMBER(28,10),
|
||||||
|
"ACCRUING_DISCOUNT" NUMBER(28,10),
|
||||||
|
"STEPID" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PROGRAMNAME" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PROGRAMCEILING" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PROGRAMSTATUS" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUERNACE21SECTOR" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"INSTRUMENTQUOTATIONBASIS" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER38" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER39" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER40" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER41" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER42" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER43" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER44" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER45" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER46" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER47" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER48" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER49" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER50" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table CSDB_DEBT
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."CSDB_DEBT" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."CSDB_DEBT" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table CSDB_DEBT_DAILY
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."CSDB_DEBT_DAILY"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"NEWUPDATED" DATE,
|
||||||
|
"IDLOADDATE_DIM" DATE,
|
||||||
|
"EXTERNALCODE_ISIN" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"EXTERNALCODETYPE_NC" VARCHAR2(124 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"EXTERNALCODE_NATIONAL" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRINSTRUMENT" NUMBER(28,0),
|
||||||
|
"SHORTNAME" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRDEPOSITORY" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRDEBTTYPE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRASSETSECTYPE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_CFI" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_ESAI" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_ESAI_DM" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCURRENCY_NOMINAL" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"AMOUNTISSUED" NUMBER(28,10),
|
||||||
|
"AMOUNTOUTSTANDING" NUMBER(28,10),
|
||||||
|
"AMOUNTOUTSTANDING_EUR" NUMBER(28,10),
|
||||||
|
"POOLFACTOR" NUMBER(28,10),
|
||||||
|
"ISSUEPRICE" NUMBER(28,10),
|
||||||
|
"IDISSUEDATE" DATE,
|
||||||
|
"IDIRCOUPONTYPE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCOUPONFREQUENCY" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCURRENCY_COUPON" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONRATE" NUMBER(28,10),
|
||||||
|
"COUPONDATE" DATE,
|
||||||
|
"IDIRREDEMPTIONTYPE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRREDEMPTIONFREQUENCY" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCURRENCY_REDEMPTION" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"REDEMPTIONPRICE" NUMBER(28,10),
|
||||||
|
"IDMATURITYDATE" DATE,
|
||||||
|
"IDIRORGANISATIONALIASTYPE_IS" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUERSOURCECODE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUEREXTERNALCODE_MFI" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUEREXTERNALCODE_BIC" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUEREXTERNALCODE_BEI" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRORGANISATION_ISSUER" NUMBER(28,0),
|
||||||
|
"ISSUERNAME" VARCHAR2(255 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCOUNTRY" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCOUNTRY_DM" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_ESAO" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_ESAO_DM" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_NACE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PUBLICATIONPRICEDATE" DATE,
|
||||||
|
"PUBLICATIONPRICE" NUMBER(28,10),
|
||||||
|
"PUBLICATIONPRICETYPE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PUBLICATIONPRICEQUOTATIONBASIS" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MONTHLYAVERAGEPRICE" NUMBER(28,10),
|
||||||
|
"ACCRUALSTARTDATE" DATE,
|
||||||
|
"DEBTACCRUALDEBTOR" NUMBER(28,10),
|
||||||
|
"DEBTACCRUALDEBTOR_DM" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEBTACCRUALCREDITOR" NUMBER(28,10),
|
||||||
|
"DEBTACCRUALCREDITOR_TYP" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ACCRUEDINTEREST" NUMBER(28,10),
|
||||||
|
"YTMNONOPTIONADJUSTED" NUMBER(28,10),
|
||||||
|
"ESCB_ISSUER_IDENT" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ESCB_ISSUER_IDENT_TYP" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDUDCMPPARTY" NUMBER(28,0),
|
||||||
|
"AMOUNTOUTSTANDINGTYPE" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MARKETCAPITALISATION" NUMBER(28,10),
|
||||||
|
"MARKETCAPITALISATION_EUR" NUMBER(28,10),
|
||||||
|
"VA_SECURITYSTATUS" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VA_INSTRSUPPLEMENTARYCLASS" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VA_RESIDUALMATURITYCLASS" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VA_ISINSEC" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VA_ISELIGIBLEFOREADB" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_ESAI10" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRCLASSIFICATIONCODE_ESAO10" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRDEBTTYPE_N" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SENIORITY" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUEREXTERNALCODE_LEI" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"INSTR_ESA2010_CLASS_VALUETYPE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISS_ESA2010_CLASS_VALUETYPE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SEC_STATUS_DATE" DATE,
|
||||||
|
"GROUP_TYPE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"HAS_EMBEDDED_OPTION" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VOLUME_TRADED" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PRIMARY_LISTING_NAME" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PRIM_LISTING_RESIDENCY_COUNTRY" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"INSTR_PORTFOLIO_FLAGS" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"BOND_DURATION" NUMBER(28,10),
|
||||||
|
"RESIDUAL_MATURITY" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ORIGINAL_MATURITY" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CFIN_CLASSIFICATION" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONFIRSTPAYMENTDATE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONLASTPAYMENTDATE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONRATEUNDERLYINGCODE_ISIN" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONRATESPREAD" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONRATEMULTIPLIER" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONRATECAP" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUPONRATEFLOOR" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDISSUEDATE_TRANCHE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUEPRICE_TRANCHE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VA_ISPRIVATEPLACEMENT" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RIAD_CODE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RIAD_OUID" NUMBER(38,0),
|
||||||
|
"ESG1" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ESG2" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ESG3" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"STRIP" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DEPOSITORY_RECEIPT" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RULE_144A" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"REG_S" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"WARRANT" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CSEC_RELEVANCE_STOCK" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CSEC_RELEVANCE_GROSS_ISSUANCE" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CSEC_RELEVANCE_REDEMPTION" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ACCRUING_COUPON" NUMBER(28,10),
|
||||||
|
"ACCRUING_DISCOUNT" NUMBER(28,10),
|
||||||
|
"STEPID" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PROGRAMNAME" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PROGRAMCEILING" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PROGRAMSTATUS" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUERNACE21SECTOR" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"INSTRUMENTQUOTATIONBASIS" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER38" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER39" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER40" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER41" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER42" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER43" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER44" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER45" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER46" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER47" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER48" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER49" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER50" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table CSDB_DEBT_DAILY
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."CSDB_DEBT_DAILY" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."CSDB_DEBT_DAILY" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table CSDB_INSTR_DESC_FULL
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."CSDB_INSTR_DESC_FULL"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"IDIRINSTRUMENT" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISIN" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MOO_INSTR_ID" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SNP_INSTR_ID" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FITCH_IDENTIFIER" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DBRS_IDENTIFIER" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"EA_STATUS" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IS_TMS" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DBRS_COVERED_BOND_PROGRAM" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FITCH_PRG_IDENTIFIER" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MOO_DEAL_NUMBER" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SNP_PROGRAM_ID" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IDIRDEBTTYPE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SNP_DEBT_TYPE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MOODY_SENIORITY" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FITCH_DEBT_LEVEL_CODE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DBRS_RANK_TYPE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DBRS_SECURITY_TYPE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SCO_DEBT_TYPE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SCO_INSTR_ID" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SCO_COVERED_BOND_PROGRAM" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SCO_CATEGORY" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER15" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER16" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER17" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER18" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER19" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER20" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table CSDB_INSTR_DESC_FULL
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."CSDB_INSTR_DESC_FULL" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."CSDB_INSTR_DESC_FULL" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table CSDB_INSTR_RAT_FULL
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."CSDB_INSTR_RAT_FULL"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"RDB_INSTR_ID" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SOURCE" VARCHAR2(10 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING_SCHEME" VARCHAR2(32 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING" VARCHAR2(50 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING_DATE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"TIME_HORIZON" VARCHAR2(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CURRENCY_TYPE" VARCHAR2(10 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"NOTES" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VALID_FROM" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VALID_UNTIL" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RDB_RATINGS_ID" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"WATCHLIST" VARCHAR2(50 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"WATCHLIST_DATE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"OUTLOOK" VARCHAR2(50 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"OUTLOOK_DATE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING_ACTION" VARCHAR2(100 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING_ACTION_DATE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IS_PRELIMINARY" VARCHAR2(1 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING_RAW" VARCHAR2(50 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING_TYPE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ENDORSEMENT_INDICATOR" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"LAST_REVIEW_DATE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER6" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER7" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER8" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER9" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER10" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER11" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER12" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER13" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER14" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER15" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER16" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER17" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER18" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER19" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER20" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table CSDB_INSTR_RAT_FULL
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."CSDB_INSTR_RAT_FULL" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."CSDB_INSTR_RAT_FULL" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table CSDB_ISSUER_DESC_FULL
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."CSDB_ISSUER_DESC_FULL"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"RDB_ISSUER_ID" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ISSUERNAME" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUNTRY_DOMICILE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IS_SOVEREIGN" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MOODY_IDENTIFIER" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SNP_ISSUER_ID" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FITCH_IDENTIFIER" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"DBRS_IDENTIFIER" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"LEI_ISSUER_ID" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RIAD_CODE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RIAD_OUID" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CLASH_GROUP_STATUS" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SCO_ISSUER_ID" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER5" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER6" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER7" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER8" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER9" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER10" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER11" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER12" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER13" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER14" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER15" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER16" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER17" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER18" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER19" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER20" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table CSDB_ISSUER_DESC_FULL
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."CSDB_ISSUER_DESC_FULL" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."CSDB_ISSUER_DESC_FULL" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table CSDB_ISSUER_RAT_FULL
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."CSDB_ISSUER_RAT_FULL"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"RDB_ISSUER_ID" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"SOURCE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING_SCHEME" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING_DATE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"TIME_HORIZON" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CURRENCY_TYPE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"NOTES" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VALID_FROM" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"VALID_UNTIL" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RDB_RATINGS_ID" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"OUTLOOK" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"OUTLOOK_DATE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"WATCHLIST" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"WATCHLIST_DATE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING_ACTION" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING_ACTION_DATE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"IS_PRELIMINARY" VARCHAR2(1 BYTE) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING_RAW" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"RATING_TYPE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ENDORSEMENT_INDICATOR" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"LAST_REVIEW_DATE" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER6" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER7" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER8" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER9" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER10" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER11" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER12" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER13" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER14" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER15" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER16" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER17" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER18" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER19" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"PLACEHOLDER20" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- Constraints for Table CSDB_ISSUER_RAT_FULL
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."CSDB_ISSUER_RAT_FULL" MODIFY ("A_KEY" NOT NULL ENABLE);
|
||||||
|
ALTER TABLE "CT_ET_TEMPLATES"."CSDB_ISSUER_RAT_FULL" MODIFY ("A_WORKFLOW_HISTORY_KEY" NOT NULL ENABLE);
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table FXCD_BRANCH
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."FXCD_BRANCH"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"BRANCH_ID" NUMBER(28,0),
|
||||||
|
"ENTITY_ID" NUMBER(28,0),
|
||||||
|
"CTP_ID" NUMBER(28,0)
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table FXCD_F_BRANCH
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."FXCD_F_BRANCH"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"BRANCH_ID" NUMBER(28,0),
|
||||||
|
"ENTITY_ID" NUMBER(28,0),
|
||||||
|
"CTP_ID" NUMBER(28,0)
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table FXCD_F_CLEARER
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."FXCD_F_CLEARER"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"CLEARER_ID" NUMBER(28,0),
|
||||||
|
"ENTITY_ID" NUMBER(28,0),
|
||||||
|
"ELIGIBILITY_OF_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ELIGIBILITY_FR_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ACTIVE_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"OVERALL_OF_LIMIT_AMT" NUMBER(28,10),
|
||||||
|
"CASH_OF_LIMIT_AMT" NUMBER(28,10),
|
||||||
|
"SECURITIES_OF_LIMIT_AMT" NUMBER(28,10),
|
||||||
|
"OVERALL_FR_LIMIT_AMT" NUMBER(28,10),
|
||||||
|
"CASH_FR_LIMIT_AMT" NUMBER(28,10),
|
||||||
|
"SECURITIES_FR_LIMIT_AMT" NUMBER(28,10)
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table FXCD_F_CLEARER_NCB_LIMIT
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."FXCD_F_CLEARER_NCB_LIMIT"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"CLEARER_ID" NUMBER(28,0),
|
||||||
|
"COUNTRY_ID" CHAR(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"OVERALL_LIMIT_AMT" NUMBER(28,10),
|
||||||
|
"CASH_LIMIT_AMT" NUMBER(28,10),
|
||||||
|
"SECURITIES_LIMIT_AMT" NUMBER(28,10)
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table FXCD_F_CONSTANT
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."FXCD_F_CONSTANT"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"CONSTANT_NAME" VARCHAR2(160 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CONSTANT_VALUE" VARCHAR2(2000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CONSTANT_TYPE" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table FXCD_F_COUNTERPARTY
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."FXCD_F_COUNTERPARTY"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"CTP_ID" NUMBER(28,0),
|
||||||
|
"ENTITY_ID" NUMBER(28,0),
|
||||||
|
"CTP_GROUP_FKIT_CODE" VARCHAR2(4 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ACTIVE_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CTP_COMMENT" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"GUARANTOR_ID" NUMBER(28,0),
|
||||||
|
"OF_OVERALL_LMT_AMT" NUMBER(28,10),
|
||||||
|
"OF_MANUAL_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FR_OVERALL_LMT_AMT" NUMBER(28,10),
|
||||||
|
"FR_MANUAL_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MP_OVERALL_LMT_AMT" NUMBER(28,10),
|
||||||
|
"MP_MANUAL_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"EOI_CTP_GROUP" VARCHAR2(4 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ART_101_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"MEDIAN_CAPITAL_FLAG" CHAR(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CHANGE_DESCRIPTION" VARCHAR2(256 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table FXCD_F_COUNTRY
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."FXCD_F_COUNTRY"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"COUNTRY_ID" CHAR(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ENTITY_ID" NUMBER(28,0),
|
||||||
|
"COUNTRY_GDP" NUMBER(28,10),
|
||||||
|
"NCB_USD_LAMBDA" NUMBER(28,10),
|
||||||
|
"OF_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FR_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"EU_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"EUROSYSTEM_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FR_PORTF_SHARE_OPTOUT" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FR_LIMIT_CALC_OPTOUT" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"COUNTRY_COMMENT" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"OF_LMT_AMNT" NUMBER(28,10),
|
||||||
|
"OF_MANUAL_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"FR_LMT_AMNT" NUMBER(28,10),
|
||||||
|
"FR_MANUAL_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"USD_PORTFOLIO_EUR_SIZE" NUMBER(28,10),
|
||||||
|
"JPY_PORTFOLIO_EUR_SIZE" NUMBER(28,10),
|
||||||
|
"CAPITAL_KEY_AMNT" NUMBER(28,10),
|
||||||
|
"LAMBDA_MANUAL_FLAG" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CNY_PORTFOLIO_EUR_SIZE" NUMBER(28,10),
|
||||||
|
"CHANGE_DESCRIPTION" VARCHAR2(256 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table FXCD_F_COUNTRY_NCB_LIMIT
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."FXCD_F_COUNTRY_NCB_LIMIT"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"COUNTRY_ID" CHAR(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"NCB_COUNTRY_ID" CHAR(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"USD_LIMIT_AMT" NUMBER(28,10),
|
||||||
|
"JPY_LIMIT_AMT" NUMBER(28,10),
|
||||||
|
"TOTAL_LIMIT_AMT" NUMBER(28,10)
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table FXCD_F_CTP_GROUP
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."FXCD_F_CTP_GROUP"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"CTP_GROUP_FKIT_CODE" VARCHAR2(4 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CTP_GROUP_NAME" VARCHAR2(200 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"OF_MAX_LIMIT_AMT" NUMBER(28,10),
|
||||||
|
"FR_MP_MAX_LIMIT_AMT" NUMBER(28,10),
|
||||||
|
"ACTIVE" VARCHAR2(1 CHAR) COLLATE "USING_NLS_COMP"
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table FXCD_F_CTP_GROUP_NCB_LIMIT
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."FXCD_F_CTP_GROUP_NCB_LIMIT"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||||
|
"COUNTRY_ID" CHAR(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"CTP_GROUP_FKIT_CODE" VARCHAR2(4 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ELIGIBILITY_ID" NUMBER(28,0),
|
||||||
|
"LIMIT_AMT" NUMBER(28,10)
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
--------------------------------------------------------
|
||||||
|
-- DDL for Table FXCD_F_CTP_NCB_LIMIT
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
CREATE TABLE "CT_ET_TEMPLATES"."FXCD_F_CTP_NCB_LIMIT"
|
||||||
|
( "A_KEY" NUMBER(38,0),
|
||||||
|
"COUNTRY_ID" CHAR(2 CHAR) COLLATE "USING_NLS_COMP",
|
||||||
|
"ELIGIBILITY_ID" NUMBER(28,0),
|
||||||
|
"CTP_ID" NUMBER(28,0),
|
||||||
|
"LIMIT_AMT" NUMBER(28,10),
|
||||||
|
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0)
|
||||||
|
) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION DEFERRED
|
||||||
|
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
|
||||||
|
COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||||
|
TABLESPACE "DATA" ;
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user