Add MARS-835-PREHOOK scripts to update and rollback A_SOURCE_FILE_RECEIVED table structure

This commit is contained in:
Grzegorz Michalski
2026-02-13 08:39:03 +01:00
parent 3b7ce7de97
commit 0053ecc556
8 changed files with 235 additions and 12 deletions

View File

@@ -0,0 +1,70 @@
-- ====================================================================
-- MARS-835-PREHOOK: Update A_SOURCE_FILE_RECEIVED Table Structure
-- ====================================================================
-- Purpose:
-- 1. Rename column ARCH_FILE_NAME to ARCH_PATH
-- 2. Add new column PROCESS_NAME VARCHAR2(200)
-- Author: System Generated
-- Date: 2026-02-13
-- ====================================================================
SET SERVEROUTPUT ON SIZE UNLIMITED
SET TIMING ON
PROMPT ====================================================================
PROMPT MARS-835-PREHOOK: Updating A_SOURCE_FILE_RECEIVED table structure
PROMPT ====================================================================
-- Check if column ARCH_FILE_NAME exists
DECLARE
v_column_exists NUMBER;
v_process_name_exists NUMBER;
BEGIN
-- Check if ARCH_FILE_NAME exists
SELECT COUNT(*)
INTO v_column_exists
FROM dba_tab_columns
WHERE owner = 'CT_MRDS'
AND table_name = 'A_SOURCE_FILE_RECEIVED'
AND column_name = 'ARCH_FILE_NAME';
IF v_column_exists > 0 THEN
DBMS_OUTPUT.PUT_LINE('INFO: Renaming column ARCH_FILE_NAME to ARCH_PATH...');
EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED RENAME COLUMN ARCH_FILE_NAME TO ARCH_PATH';
DBMS_OUTPUT.PUT_LINE('SUCCESS: Column renamed to ARCH_PATH');
ELSE
DBMS_OUTPUT.PUT_LINE('INFO: Column ARCH_FILE_NAME does not exist (already renamed or first install)');
END IF;
-- Check if PROCESS_NAME already exists
SELECT COUNT(*)
INTO v_process_name_exists
FROM dba_tab_columns
WHERE owner = 'CT_MRDS'
AND table_name = 'A_SOURCE_FILE_RECEIVED'
AND column_name = 'PROCESS_NAME';
IF v_process_name_exists = 0 THEN
DBMS_OUTPUT.PUT_LINE('INFO: Adding new column PROCESS_NAME...');
EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED ADD (PROCESS_NAME VARCHAR2(200))';
DBMS_OUTPUT.PUT_LINE('SUCCESS: Column PROCESS_NAME added');
-- Add comment on new column
EXECUTE IMMEDIATE 'COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PROCESS_NAME IS ''Name of the process that created this record''';
DBMS_OUTPUT.PUT_LINE('SUCCESS: Comment added to PROCESS_NAME column');
ELSE
DBMS_OUTPUT.PUT_LINE('INFO: Column PROCESS_NAME already exists');
END IF;
DBMS_OUTPUT.PUT_LINE('SUCCESS: A_SOURCE_FILE_RECEIVED table structure updated successfully');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR: Failed to update table structure: ' || SQLERRM);
RAISE;
END;
/
PROMPT ====================================================================
PROMPT A_SOURCE_FILE_RECEIVED Table Update Completed
PROMPT ====================================================================

View File

@@ -0,0 +1,65 @@
-- ====================================================================
-- MARS-835-PREHOOK ROLLBACK: Revert A_SOURCE_FILE_RECEIVED Table Structure
-- ====================================================================
-- Purpose:
-- 1. Rename column ARCH_PATH back to ARCH_FILE_NAME
-- 2. Remove column PROCESS_NAME
-- Author: System Generated
-- Date: 2026-02-13
-- ====================================================================
SET SERVEROUTPUT ON SIZE UNLIMITED
SET TIMING ON
PROMPT ====================================================================
PROMPT MARS-835-PREHOOK ROLLBACK: Reverting A_SOURCE_FILE_RECEIVED table
PROMPT ====================================================================
DECLARE
v_column_exists NUMBER;
v_process_name_exists NUMBER;
BEGIN
-- Check if ARCH_PATH exists (needs to be renamed back)
SELECT COUNT(*)
INTO v_column_exists
FROM dba_tab_columns
WHERE owner = 'CT_MRDS'
AND table_name = 'A_SOURCE_FILE_RECEIVED'
AND column_name = 'ARCH_PATH';
IF v_column_exists > 0 THEN
DBMS_OUTPUT.PUT_LINE('INFO: Renaming column ARCH_PATH back to ARCH_FILE_NAME...');
EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED RENAME COLUMN ARCH_PATH TO ARCH_FILE_NAME';
DBMS_OUTPUT.PUT_LINE('SUCCESS: Column renamed back to ARCH_FILE_NAME');
ELSE
DBMS_OUTPUT.PUT_LINE('INFO: Column ARCH_PATH does not exist (already rolled back)');
END IF;
-- Check if PROCESS_NAME exists (needs to be dropped)
SELECT COUNT(*)
INTO v_process_name_exists
FROM dba_tab_columns
WHERE owner = 'CT_MRDS'
AND table_name = 'A_SOURCE_FILE_RECEIVED'
AND column_name = 'PROCESS_NAME';
IF v_process_name_exists > 0 THEN
DBMS_OUTPUT.PUT_LINE('INFO: Dropping column PROCESS_NAME...');
EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED DROP COLUMN PROCESS_NAME';
DBMS_OUTPUT.PUT_LINE('SUCCESS: Column PROCESS_NAME dropped');
ELSE
DBMS_OUTPUT.PUT_LINE('INFO: Column PROCESS_NAME does not exist (already rolled back)');
END IF;
DBMS_OUTPUT.PUT_LINE('SUCCESS: A_SOURCE_FILE_RECEIVED table structure rollback completed');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR: Failed to rollback table structure: ' || SQLERRM);
RAISE;
END;
/
PROMPT ====================================================================
PROMPT A_SOURCE_FILE_RECEIVED Table Rollback Completed
PROMPT ====================================================================

View File

@@ -31,6 +31,7 @@ PROMPT =========================================================================
PROMPT PROMPT
PROMPT This script will: PROMPT This script will:
PROMPT - Create A_PARALLEL_EXPORT_CHUNKS table with unique timestamp task names PROMPT - Create A_PARALLEL_EXPORT_CHUNKS table with unique timestamp task names
PROMPT - Update A_SOURCE_FILE_RECEIVED table (rename ARCH_FILE_NAME to ARCH_PATH, add PROCESS_NAME column)
PROMPT - Update ENV_MANAGER to v3.2.0 (add parallel execution error codes) PROMPT - Update ENV_MANAGER to v3.2.0 (add parallel execution error codes)
PROMPT - Update DATA_EXPORTER to v2.4.0 (DBMS_PARALLEL_EXECUTE + Smart Column Mapping) PROMPT - Update DATA_EXPORTER to v2.4.0 (DBMS_PARALLEL_EXECUTE + Smart Column Mapping)
PROMPT - Add pParallelDegree parameter (1-16 threads) to EXPORT_*_BY_DATE procedures PROMPT - Add pParallelDegree parameter (1-16 threads) to EXPORT_*_BY_DATE procedures
@@ -71,13 +72,19 @@ PROMPT =========================================================================
PROMPT PROMPT
PROMPT ========================================================================= PROMPT =========================================================================
PROMPT Step 4: Track Package Versions PROMPT Step 4: Update A_SOURCE_FILE_RECEIVED Table Structure
PROMPT =========================================================================
@@03_MARS_835_PREHOOK_update_SOURCE_FILE_RECEIVED_table.sql
PROMPT
PROMPT =========================================================================
PROMPT Step 5: Track Package Versions
PROMPT ========================================================================= PROMPT =========================================================================
@@track_package_versions.sql @@track_package_versions.sql
PROMPT PROMPT
PROMPT ========================================================================= PROMPT =========================================================================
PROMPT Step 5: Verify Package Versions PROMPT Step 6: Verify Package Versions
PROMPT ========================================================================= PROMPT =========================================================================
@@verify_packages_version.sql @@verify_packages_version.sql

View File

@@ -0,0 +1,30 @@
-- ====================================================================
-- 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', 'VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED'))
) 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);
GRANT SELECT, INSERT, UPDATE, DELETE ON CT_MRDS.A_SOURCE_FILE_RECEIVED TO MRDS_LOADER_ROLE;

View File

@@ -606,6 +606,7 @@ AS
pTemplateTableName IN VARCHAR2 default NULL, pTemplateTableName IN VARCHAR2 default NULL,
pMaxFileSize IN NUMBER default 104857600, pMaxFileSize IN NUMBER default 104857600,
pRegisterExport IN BOOLEAN default FALSE, pRegisterExport IN BOOLEAN default FALSE,
pProcessName IN VARCHAR2 default 'DATA_EXPORTER',
pCredentialName IN VARCHAR2 default ENV_MANAGER.gvCredentialName pCredentialName IN VARCHAR2 default ENV_MANAGER.gvCredentialName
) )
IS IS
@@ -638,6 +639,7 @@ AS
,'pTemplateTableName => '''||nvl(pTemplateTableName, 'NULL')||'''' ,'pTemplateTableName => '''||nvl(pTemplateTableName, 'NULL')||''''
,'pMaxFileSize => '''||nvl(TO_CHAR(pMaxFileSize), 'NULL')||'''' ,'pMaxFileSize => '''||nvl(TO_CHAR(pMaxFileSize), 'NULL')||''''
,'pRegisterExport => '''||CASE WHEN pRegisterExport THEN 'TRUE' ELSE 'FALSE' END||'''' ,'pRegisterExport => '''||CASE WHEN pRegisterExport THEN 'TRUE' ELSE 'FALSE' END||''''
,'pProcessName => '''||nvl(pProcessName, 'NULL')||''''
,'pCredentialName => '''||nvl(pCredentialName, 'NULL')||'''' ,'pCredentialName => '''||nvl(pCredentialName, 'NULL')||''''
)); ));
ENV_MANAGER.LOG_PROCESS_EVENT('Start','INFO', vParameters); ENV_MANAGER.LOG_PROCESS_EVENT('Start','INFO', vParameters);
@@ -853,7 +855,8 @@ AS
PROCESSING_STATUS, PROCESSING_STATUS,
PARTITION_YEAR, PARTITION_YEAR,
PARTITION_MONTH, PARTITION_MONTH,
ARCH_FILE_NAME ARCH_PATH,
PROCESS_NAME
) VALUES ( ) VALUES (
vSourceFileReceivedKey, vSourceFileReceivedKey,
NVL(vConfigKey, -1), -- Use config key if found, otherwise -1 NVL(vConfigKey, -1), -- Use config key if found, otherwise -1
@@ -865,7 +868,8 @@ AS
'INGESTED', 'INGESTED',
NULL, -- PARTITION_YEAR not used for single-file exports NULL, -- PARTITION_YEAR not used for single-file exports
NULL, -- PARTITION_MONTH not used for single-file exports NULL, -- PARTITION_MONTH not used for single-file exports
NULL -- ARCH_FILE_NAME not used for single-file exports NULL, -- ARCH_PATH not used for single-file exports
pProcessName -- Process name from parameter
); );
ENV_MANAGER.LOG_PROCESS_EVENT('Registered file: FileReceivedKey=' || vSourceFileReceivedKey || ', File=' || vActualFileName || ', Size=' || vBytes || ' bytes', 'INFO', vParameters); ENV_MANAGER.LOG_PROCESS_EVENT('Registered file: FileReceivedKey=' || vSourceFileReceivedKey || ', File=' || vActualFileName || ', Size=' || vBytes || ' bytes', 'INFO', vParameters);
@@ -887,7 +891,8 @@ AS
PROCESSING_STATUS, PROCESSING_STATUS,
PARTITION_YEAR, PARTITION_YEAR,
PARTITION_MONTH, PARTITION_MONTH,
ARCH_FILE_NAME ARCH_PATH,
PROCESS_NAME
) VALUES ( ) VALUES (
vSourceFileReceivedKey, vSourceFileReceivedKey,
NVL(vConfigKey, -1), -- Use config key if found, otherwise -1 NVL(vConfigKey, -1), -- Use config key if found, otherwise -1
@@ -896,7 +901,8 @@ AS
'INGESTED', 'INGESTED',
NULL, -- PARTITION_YEAR not used for single-file exports NULL, -- PARTITION_YEAR not used for single-file exports
NULL, -- PARTITION_MONTH not used for single-file exports NULL, -- PARTITION_MONTH not used for single-file exports
NULL -- ARCH_FILE_NAME not used for single-file exports NULL, -- ARCH_PATH not used for single-file exports
pProcessName -- Process name from parameter
); );
ENV_MANAGER.LOG_PROCESS_EVENT('Registered file without metadata: FileReceivedKey=' || vSourceFileReceivedKey || ', File=' || vSanitizedFileName, 'INFO', vParameters); ENV_MANAGER.LOG_PROCESS_EVENT('Registered file without metadata: FileReceivedKey=' || vSourceFileReceivedKey || ', File=' || vSanitizedFileName, 'INFO', vParameters);
@@ -1198,6 +1204,7 @@ AS
pTemplateTableName IN VARCHAR2 default NULL, pTemplateTableName IN VARCHAR2 default NULL,
pMaxFileSize IN NUMBER default 104857600, pMaxFileSize IN NUMBER default 104857600,
pRegisterExport IN BOOLEAN default FALSE, pRegisterExport IN BOOLEAN default FALSE,
pProcessName IN VARCHAR2 default 'DATA_EXPORTER',
pCredentialName IN VARCHAR2 default ENV_MANAGER.gvCredentialName pCredentialName IN VARCHAR2 default ENV_MANAGER.gvCredentialName
) )
IS IS
@@ -1544,7 +1551,8 @@ AS
PROCESSING_STATUS, PROCESSING_STATUS,
PARTITION_YEAR, PARTITION_YEAR,
PARTITION_MONTH, PARTITION_MONTH,
ARCH_FILE_NAME ARCH_PATH,
PROCESS_NAME
) VALUES ( ) VALUES (
vSourceFileReceivedKey, vSourceFileReceivedKey,
vConfigKey, -- Config key from A_SOURCE_FILE_CONFIG lookup vConfigKey, -- Config key from A_SOURCE_FILE_CONFIG lookup
@@ -1556,7 +1564,8 @@ AS
'INGESTED', 'INGESTED',
NULL, -- PARTITION_YEAR not used for CSV exports NULL, -- PARTITION_YEAR not used for CSV exports
NULL, -- PARTITION_MONTH not used for CSV exports NULL, -- PARTITION_MONTH not used for CSV exports
NULL -- ARCH_FILE_NAME not used for CSV exports NULL, -- ARCH_PATH not used for CSV exports
pProcessName -- Process name from parameter
); );
ENV_MANAGER.LOG_PROCESS_EVENT('Registered file: FileReceivedKey=' || vSourceFileReceivedKey || ', File=' || vActualFileName || ', Size=' || vBytes || ' bytes', 'DEBUG', vParameters); ENV_MANAGER.LOG_PROCESS_EVENT('Registered file: FileReceivedKey=' || vSourceFileReceivedKey || ', File=' || vActualFileName || ', Size=' || vBytes || ' bytes', 'DEBUG', vParameters);
@@ -1578,7 +1587,8 @@ AS
PROCESSING_STATUS, PROCESSING_STATUS,
PARTITION_YEAR, PARTITION_YEAR,
PARTITION_MONTH, PARTITION_MONTH,
ARCH_FILE_NAME ARCH_PATH,
PROCESS_NAME
) VALUES ( ) VALUES (
vSourceFileReceivedKey, vSourceFileReceivedKey,
vConfigKey, -- Config key from A_SOURCE_FILE_CONFIG lookup vConfigKey, -- Config key from A_SOURCE_FILE_CONFIG lookup
@@ -1587,7 +1597,8 @@ AS
'INGESTED', 'INGESTED',
NULL, -- PARTITION_YEAR not used for CSV exports NULL, -- PARTITION_YEAR not used for CSV exports
NULL, -- PARTITION_MONTH not used for CSV exports NULL, -- PARTITION_MONTH not used for CSV exports
NULL -- ARCH_FILE_NAME not used for CSV exports NULL, -- ARCH_PATH not used for CSV exports
pProcessName -- Process name from parameter
); );
END; END;
END LOOP; END LOOP;

View File

@@ -81,6 +81,7 @@ AS
* - NULL = use source table columns in natural order * - NULL = use source table columns in natural order
* @param pMaxFileSize - Maximum file size in bytes (default 104857600 = 100MB, min 10MB, max 1GB) * @param pMaxFileSize - Maximum file size in bytes (default 104857600 = 100MB, min 10MB, max 1GB)
* @param pRegisterExport - When TRUE, registers exported CSV file in A_SOURCE_FILE_RECEIVED table * @param pRegisterExport - When TRUE, registers exported CSV file in A_SOURCE_FILE_RECEIVED table
* @param pProcessName - Process name stored in PROCESS_NAME column (default 'DATA_EXPORTER')
* @example * @example
* begin * begin
* DATA_EXPORTER.EXPORT_TABLE_DATA( * DATA_EXPORTER.EXPORT_TABLE_DATA(
@@ -106,6 +107,7 @@ AS
pTemplateTableName IN VARCHAR2 default NULL, pTemplateTableName IN VARCHAR2 default NULL,
pMaxFileSize IN NUMBER default 104857600, pMaxFileSize IN NUMBER default 104857600,
pRegisterExport IN BOOLEAN default FALSE, pRegisterExport IN BOOLEAN default FALSE,
pProcessName IN VARCHAR2 default 'DATA_EXPORTER',
pCredentialName IN VARCHAR2 default ENV_MANAGER.gvCredentialName pCredentialName IN VARCHAR2 default ENV_MANAGER.gvCredentialName
); );
@@ -162,6 +164,7 @@ AS
* File naming pattern: {pFileName}_YYYYMM.csv or {TABLENAME}_YYYYMM.csv (if pFileName is NULL) * File naming pattern: {pFileName}_YYYYMM.csv or {TABLENAME}_YYYYMM.csv (if pFileName is NULL)
* When pRegisterExport=TRUE, successfully exported files are registered in: * When pRegisterExport=TRUE, successfully exported files are registered in:
* - CT_MRDS.A_SOURCE_FILE_RECEIVED (tracks file location, size, checksum, and metadata) * - CT_MRDS.A_SOURCE_FILE_RECEIVED (tracks file location, size, checksum, and metadata)
* @param pProcessName - Process name stored in PROCESS_NAME column (default 'DATA_EXPORTER')
* @example * @example
* begin * begin
* -- With custom filename * -- With custom filename
@@ -207,6 +210,7 @@ AS
pTemplateTableName IN VARCHAR2 default NULL, pTemplateTableName IN VARCHAR2 default NULL,
pMaxFileSize IN NUMBER default 104857600, pMaxFileSize IN NUMBER default 104857600,
pRegisterExport IN BOOLEAN default FALSE, pRegisterExport IN BOOLEAN default FALSE,
pProcessName IN VARCHAR2 default 'DATA_EXPORTER',
pCredentialName IN VARCHAR2 default ENV_MANAGER.gvCredentialName pCredentialName IN VARCHAR2 default ENV_MANAGER.gvCredentialName
); );

View File

@@ -29,6 +29,7 @@ PROMPT MARS-835-PREHOOK: Rollback to Previous Versions
PROMPT ========================================================================= PROMPT =========================================================================
PROMPT WARNING: This will reverse all changes from MARS-835-PREHOOK installation! PROMPT WARNING: This will reverse all changes from MARS-835-PREHOOK installation!
PROMPT - Removes A_PARALLEL_EXPORT_CHUNKS table PROMPT - Removes A_PARALLEL_EXPORT_CHUNKS table
PROMPT - Reverts A_SOURCE_FILE_RECEIVED table (rename ARCH_PATH to ARCH_FILE_NAME, drop PROCESS_NAME column)
PROMPT - Restores ENV_MANAGER v3.1.0 (removes parallel error codes) PROMPT - Restores ENV_MANAGER v3.1.0 (removes parallel error codes)
PROMPT - Restores DATA_EXPORTER v2.1.0 (removes parallel + Smart Column Mapping) PROMPT - Restores DATA_EXPORTER v2.1.0 (removes parallel + Smart Column Mapping)
PROMPT ========================================================================= PROMPT =========================================================================
@@ -65,13 +66,19 @@ PROMPT =========================================================================
PROMPT PROMPT
PROMPT ========================================================================= PROMPT =========================================================================
PROMPT Step 3: Track Rollback Version PROMPT Step 3: Rollback A_SOURCE_FILE_RECEIVED Table Structure
PROMPT =========================================================================
@@93_MARS_835_PREHOOK_rollback_SOURCE_FILE_RECEIVED_table.sql
PROMPT
PROMPT =========================================================================
PROMPT Step 4: Track Rollback Version
PROMPT ========================================================================= PROMPT =========================================================================
@@track_package_versions.sql @@track_package_versions.sql
PROMPT PROMPT
PROMPT ========================================================================= PROMPT =========================================================================
PROMPT Step 4: Verify Package Versions After Rollback PROMPT Step 5: Verify Package Versions After Rollback
PROMPT ========================================================================= PROMPT =========================================================================
@@verify_packages_version.sql @@verify_packages_version.sql

View File

@@ -0,0 +1,29 @@
-- ====================================================================
-- 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_FILE_NAME VARCHAR2(1000),
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', 'VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED'))
) 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);
GRANT SELECT, INSERT, UPDATE, DELETE ON CT_MRDS.A_SOURCE_FILE_RECEIVED TO MRDS_LOADER_ROLE;