Init
This commit is contained in:
2
MARS_Packages/mrds_elt-dev-database/mrds_elt-dev-database/database/CT_MRDS/.gitignore
vendored
Normal file
2
MARS_Packages/mrds_elt-dev-database/mrds_elt-dev-database/database/CT_MRDS/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
t.sql
|
||||
temp/
|
||||
@@ -0,0 +1,36 @@
|
||||
--MARS-770
|
||||
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
|
||||
select 'install_package_MarsGeneralRelease_MARS770_acc_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
|
||||
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 payload acc specific part
|
||||
--=============================================================================================================================
|
||||
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('default', 'EnvironmentID', 'acc', '');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('acc', 'Region', 'eu-frankfurt-1', 'OCI region for acc environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('acc', 'NameSpace', 'frcnomajoc7v', 'OCI namespace for acc environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('acc', 'InboxBucketName', 'mrds_inbox_acc', 'Name of the inbox bucket for acc environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('acc', 'DataBucketName', 'mrds_data_acc', 'Name of the data bucket for acc environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('acc', 'HistoryBucketName', 'mrds_hist_acc', 'Name of the history bucket for acc environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('acc', 'CredentialName', 'OCI$RESOURCE_PRINCIPAL', 'Name of the credential for acc environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('acc', 'LoggingEnabled', 'ON', 'Enable logging for acc environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('acc', 'MinLogLevel', 'DEBUG', 'Minimum logging level for acc environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('acc', 'DefaultDateFormat', 'DD/MM/YYYY HH24:MI:SS', 'Default date format for acc environment');
|
||||
COMMIT;
|
||||
@@ -0,0 +1,123 @@
|
||||
--MARS-770
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
select 'install_package_MarsGeneralRelease_MARS770_create_ODS_package_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 create ODS package
|
||||
--=============================================================================================================================
|
||||
|
||||
CREATE OR REPLACE EDITIONABLE PACKAGE "ODS"."FILE_MANAGER_ODS"
|
||||
AUTHID DEFINER
|
||||
AS
|
||||
/**
|
||||
* FILE_MANAGER_ODS - Wrapper package for CT_MRDS.FILE_MANAGER
|
||||
*
|
||||
* This package serves as a wrapper for CT_MRDS.FILE_MANAGER procedures.
|
||||
* The key difference is that this package uses AUTHID DEFINER instead of
|
||||
* AUTHID CURRENT_USER, which means all objects will be created in the ODS
|
||||
* schema regardless of which user executes the procedures.
|
||||
*
|
||||
* This solves the execution context issue where users need to connect as
|
||||
* ODS user to use CT_MRDS.FILE_MANAGER procedures.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @name CREATE_EXTERNAL_TABLE
|
||||
* @desc Creates external tables that can read data from Oracle Cloud Storage.
|
||||
* This is a wrapper for CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE
|
||||
* but uses DEFINER rights to ensure objects are created in ODS schema.
|
||||
* @param pTableName - Name of the external table to create
|
||||
* @param pTemplateTableName - Template table defining the structure
|
||||
* @param pPrefix - Storage path prefix in Oracle Cloud Storage
|
||||
* @param pBucketUri - URI of the target bucket (default: ENV_MANAGER.gvInboxBucketUri)
|
||||
* @param pFileName - Specific file name (optional)
|
||||
* @param pDelimiter - Field delimiter (default: ',')
|
||||
* @example EXEC ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE(
|
||||
* 'C2D_A_UC_DISSEM_METADATA_LOADS_INBOX',
|
||||
* 'CT_ET_TEMPLATES.C2D_A_UC_DISSEM_METADATA_LOADS',
|
||||
* 'INBOX/C2D/UC_DISSEM/A_UC_DISSEM_METADATA_LOADS',
|
||||
* CT_MRDS.ENV_MANAGER.gvInboxBucketUri
|
||||
* );
|
||||
*/
|
||||
PROCEDURE CREATE_EXTERNAL_TABLE (
|
||||
pTableName IN VARCHAR2,
|
||||
pTemplateTableName IN VARCHAR2,
|
||||
pPrefix IN VARCHAR2,
|
||||
pBucketUri IN VARCHAR2 DEFAULT CT_MRDS.ENV_MANAGER.gvInboxBucketUri,
|
||||
pFileName IN VARCHAR2 DEFAULT NULL,
|
||||
pDelimiter IN VARCHAR2 DEFAULT ','
|
||||
);
|
||||
|
||||
END FILE_MANAGER_ODS;
|
||||
|
||||
/
|
||||
|
||||
CREATE OR REPLACE EDITIONABLE PACKAGE BODY "ODS"."FILE_MANAGER_ODS"
|
||||
AS
|
||||
|
||||
/**
|
||||
* CREATE_EXTERNAL_TABLE - Wrapper for CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE
|
||||
*/
|
||||
PROCEDURE CREATE_EXTERNAL_TABLE (
|
||||
pTableName IN VARCHAR2,
|
||||
pTemplateTableName IN VARCHAR2,
|
||||
pPrefix IN VARCHAR2,
|
||||
pBucketUri IN VARCHAR2 DEFAULT CT_MRDS.ENV_MANAGER.gvInboxBucketUri,
|
||||
pFileName IN VARCHAR2 DEFAULT NULL,
|
||||
pDelimiter IN VARCHAR2 DEFAULT ','
|
||||
)
|
||||
IS
|
||||
vParameters CT_MRDS.A_PROCESS_LOG.PROCEDURE_PARAMETERS%TYPE;
|
||||
BEGIN
|
||||
-- Log the start of the procedure
|
||||
vParameters := CT_MRDS.ENV_MANAGER.FORMAT_PARAMETERS(
|
||||
SYS.ODCIVARCHAR2LIST(
|
||||
'pTableName => ''' || pTableName || '''',
|
||||
'pTemplateTableName => ''' || pTemplateTableName || '''',
|
||||
'pPrefix => ''' || pPrefix || '''',
|
||||
'pBucketUri => ''' || pBucketUri || '''',
|
||||
'pFileName => ''' || NVL(pFileName, 'NULL') || '''',
|
||||
'pDelimiter => ''' || pDelimiter || ''''
|
||||
)
|
||||
);
|
||||
|
||||
CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('Start FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE', 'INFO', vParameters);
|
||||
|
||||
-- Call the original CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE procedure
|
||||
-- This ensures all logic remains centralized in the original package
|
||||
-- and ODS wrapper simply delegates execution with DEFINER rights
|
||||
CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE(
|
||||
pTableName => pTableName,
|
||||
pTemplateTableName => pTemplateTableName,
|
||||
pPrefix => pPrefix,
|
||||
pBucketUri => pBucketUri,
|
||||
pFileName => pFileName,
|
||||
pDelimiter => pDelimiter
|
||||
);
|
||||
|
||||
CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('End FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE', 'INFO', vParameters);
|
||||
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT(
|
||||
'Error in ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE: ' || SQLERRM,
|
||||
'ERROR',
|
||||
vParameters
|
||||
);
|
||||
RAISE;
|
||||
END CREATE_EXTERNAL_TABLE;
|
||||
|
||||
END FILE_MANAGER_ODS;
|
||||
|
||||
/
|
||||
@@ -0,0 +1,39 @@
|
||||
--MARS-770
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
select 'install_package_MarsGeneralRelease_MARS770_create_ODS_user_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 create ODS user
|
||||
--=============================================================================================================================
|
||||
|
||||
GRANT CONNECT, CREATE TABLE TO ODS;
|
||||
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO ODS;
|
||||
GRANT EXECUTE ON DBMS_CLOUD TO ODS;
|
||||
EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL(username => 'ODS');
|
||||
GRANT EXECUTE ON CT_MRDS.FILE_MANAGER TO ODS;
|
||||
|
||||
-- GRANT SELECT ANY TABLE ON SCHEMA CT_MRDS TO ODS;
|
||||
-- GRANT DELETE ANY TABLE ON SCHEMA CT_MRDS TO ODS;
|
||||
-- GRANT INSERT ANY TABLE ON SCHEMA CT_MRDS TO ODS;
|
||||
-- GRANT UPDATE ANY TABLE ON SCHEMA CT_MRDS TO ODS;
|
||||
-- GRANT EXECUTE ANY PROCEDURE ON SCHEMA CT_MRDS TO ODS;
|
||||
|
||||
GRANT SELECT ANY TABLE TO ODS;
|
||||
GRANT DELETE ANY TABLE TO ODS;
|
||||
GRANT INSERT ANY TABLE TO ODS;
|
||||
GRANT UPDATE ANY TABLE TO ODS;
|
||||
GRANT EXECUTE ANY PROCEDURE TO ODS;
|
||||
|
||||
GRANT SELECT_CATALOG_ROLE TO ODS;
|
||||
GRANT SELECT ANY TABLE TO ODS;
|
||||
@@ -0,0 +1,37 @@
|
||||
--MARS-770
|
||||
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
|
||||
select 'install_package_MarsGeneralRelease_MARS770_create_user_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
|
||||
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 create user
|
||||
--=============================================================================================================================
|
||||
|
||||
|
||||
--CREATE USER CT_MRDS IDENTIFIED BY Start_1234567890
|
||||
--DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
|
||||
ALTER USER CT_MRDS QUOTA UNLIMITED ON DATA;
|
||||
|
||||
|
||||
EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL(username => 'CT_MRDS');
|
||||
GRANT EXECUTE ON DBMS_CLOUD TO CT_MRDS;
|
||||
GRANT INHERIT PRIVILEGES ON USER ADMIN TO CT_MRDS;
|
||||
GRANT INHERIT PRIVILEGES ON USER PDBADMIN TO CT_MRDS;
|
||||
GRANT INHERIT PRIVILEGES ON USER PDBSOFA TO CT_MRDS;
|
||||
GRANT INHERIT PRIVILEGES ON USER MRDS_LOADER TO CT_MRDS;
|
||||
@@ -0,0 +1,38 @@
|
||||
--MARS-770
|
||||
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
|
||||
select 'install_package_MarsGeneralRelease_MARS770_dev_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
|
||||
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 payload dev specific part
|
||||
--=============================================================================================================================
|
||||
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('default', 'EnvironmentID', 'dev', '');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('dev', 'Region', 'eu-frankfurt-1', 'OCI region for dev environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('dev', 'NameSpace', 'frcnomajoc7v', 'OCI namespace for dev environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('dev', 'InboxBucketName', 'mrds_inbox_dev', 'Name of the inbox bucket for dev environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('dev', 'DataBucketName', 'mrds_data_dev', 'Name of the data bucket for dev environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('dev', 'HistoryBucketName', 'mrds_hist_dev', 'Name of the history bucket for dev environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('dev', 'CredentialName', 'OCI$RESOURCE_PRINCIPAL', 'Name of the credential for dev environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('dev', 'LoggingEnabled', 'ON', 'Enable logging for dev environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('dev', 'MinLogLevel', 'DEBUG', 'Minimum logging level for dev environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('dev', 'DefaultDateFormat', 'DD/MM/YYYY HH24:MI:SS', 'Default date format for dev environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('dev', 'ConsoleLoggingEnabled', 'ON', 'Controls whether log messages are also displayed in console using DBMS_OUTPUT.PUT_LINE');
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,218 @@
|
||||
--MARS-770
|
||||
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
|
||||
select 'install_package_MarsGeneralRelease_MARS770_file_manager_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
|
||||
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 file manager relevant objects
|
||||
--=============================================================================================================================
|
||||
|
||||
create or replace type CT_MRDS.T_FILENAME as object (
|
||||
FILENAME varchar2(200)
|
||||
,PATHNAME varchar2(800)
|
||||
,YEAR varchar2(4)
|
||||
,MONTH varchar2(2)
|
||||
);
|
||||
/
|
||||
create type CT_MRDS.T_FILENAMES is table of T_FILENAME;
|
||||
/
|
||||
|
||||
--
|
||||
-- CT_MRDS.A_FILE_MANAGER_CONFIG
|
||||
--
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_FILE_MANAGER_CONFIG" (
|
||||
environment_id VARCHAR2(100),
|
||||
config_variable VARCHAR2(200),
|
||||
config_variable_value VARCHAR2(200),
|
||||
config_variable_comment VARCHAR2(600),
|
||||
PRIMARY KEY (environment_id, config_variable)
|
||||
);
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_TABLE_STAT"
|
||||
( "A_TABLE_STAT_KEY" NUMBER(38,0) PRIMARY KEY,
|
||||
"A_SOURCE_FILE_CONFIG_KEY" NUMBER(38,0) NOT NULL,
|
||||
"TABLE_NAME" VARCHAR2(200) NOT NULL,
|
||||
"FILE_COUNT" NUMBER(38,0),
|
||||
"OVER_HIST_THRESOLD_FILE_COUNT" NUMBER(38,0),
|
||||
"ROW_COUNT" NUMBER(38,0),
|
||||
"OVER_HIST_THRESOLD_ROW_COUNT" NUMBER(38,0),
|
||||
"SIZE" NUMBER(38,0),
|
||||
"OVER_HIST_THRESOLD_SIZE" NUMBER(38,0),
|
||||
"HIST_THRESHOLD_DAYS" NUMBER(4,0),
|
||||
"CREATED" TIMESTAMP (6) default systimestamp
|
||||
)
|
||||
TABLESPACE "DATA" ;
|
||||
|
||||
alter table "CT_MRDS"."A_TABLE_STAT" add constraint A_TABLE_STAT_UK1 unique("A_SOURCE_FILE_CONFIG_KEY");
|
||||
|
||||
CREATE SEQUENCE CT_MRDS.A_TABLE_STAT_KEY_SEQ START WITH 1 INCREMENT BY 1;
|
||||
GRANT SELECT ON CT_MRDS.A_TABLE_STAT_KEY_SEQ TO MRDS_LOADER_ROLE;
|
||||
|
||||
---
|
||||
CREATE TABLE "CT_MRDS"."A_TABLE_STAT_HIST"
|
||||
( "A_TABLE_STAT_HIST_KEY" NUMBER(38,0) PRIMARY KEY,
|
||||
"A_SOURCE_FILE_CONFIG_KEY" NUMBER(38,0) NOT NULL,
|
||||
"TABLE_NAME" VARCHAR2(200) NOT NULL,
|
||||
"FILE_COUNT" NUMBER(38,0),
|
||||
"OVER_HIST_THRESOLD_FILE_COUNT" NUMBER(38,0),
|
||||
"ROW_COUNT" NUMBER(38,0),
|
||||
"OVER_HIST_THRESOLD_ROW_COUNT" NUMBER(38,0),
|
||||
"SIZE" NUMBER(38,0),
|
||||
"OVER_HIST_THRESOLD_SIZE" NUMBER(38,0),
|
||||
"HIST_THRESHOLD_DAYS" NUMBER(4,0),
|
||||
"CREATED" TIMESTAMP (6) default systimestamp
|
||||
)
|
||||
TABLESPACE "DATA" ;
|
||||
|
||||
--
|
||||
-- CT_MRDS.A_SOURCE
|
||||
--
|
||||
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_SOURCE"
|
||||
( "A_SOURCE_KEY" VARCHAR2(30),
|
||||
"SOURCE_NAME" VARCHAR2(200)
|
||||
)
|
||||
TABLESPACE "DATA" ;
|
||||
|
||||
ALTER TABLE "CT_MRDS"."A_SOURCE"
|
||||
ADD CONSTRAINT A_SOURCE_PK PRIMARY KEY (A_SOURCE_KEY);
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON "CT_MRDS"."A_SOURCE" TO MRDS_LOADER_ROLE;
|
||||
|
||||
--
|
||||
-- CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
--
|
||||
|
||||
CREATE SEQUENCE CT_MRDS.A_SOURCE_FILE_CONFIG_KEY_SEQ START WITH 1 INCREMENT BY 1;
|
||||
GRANT SELECT ON CT_MRDS.A_SOURCE_FILE_CONFIG_KEY_SEQ TO MRDS_LOADER_ROLE;
|
||||
|
||||
-- DROP TABLE "CT_MRDS"."A_SOURCE_FILE_CONFIG";
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_SOURCE_FILE_CONFIG"
|
||||
( "A_SOURCE_FILE_CONFIG_KEY" NUMBER(38,0) NOT NULL ENABLE,
|
||||
"A_SOURCE_KEY" VARCHAR2(30) NOT NULL ENABLE,
|
||||
"SOURCE_FILE_TYPE" VARCHAR2(200), -- Can be 'INPUT' or 'CONTAINER' or 'LOAD_CONFIG', the latter is for files that are mapped to multiple tables and split into different input files
|
||||
"SOURCE_FILE_ID" VARCHAR2(200),
|
||||
"SOURCE_FILE_DESC" VARCHAR2(2000),
|
||||
"SOURCE_FILE_NAME_PATTERN" VARCHAR2(200),
|
||||
"TABLE_ID" VARCHAR2(200),
|
||||
"TEMPLATE_TABLE_NAME" VARCHAR2(200),
|
||||
"CONTAINER_FILE_KEY" NUMBER(38,0),
|
||||
"DAYS_FOR_HISTORY_THRESHOLD" NUMBER(4,0),
|
||||
"FILES_COUNT_OVER_HISTORY_THRESHOLD" NUMBER(38,0),
|
||||
"BYTES_SUM_OVER_HISTORY_THRESHOLD" NUMBER(38,0),
|
||||
"ODS_SCHEMA_NAME" VARCHAR2(100),
|
||||
"ROWS_COUNT_OVER_HISTORY_THRESHOLD" NUMBER(38,0),
|
||||
"HOURS_TO_EXPIRE_STATISTICS" NUMBER(38,3)
|
||||
)
|
||||
TABLESPACE "DATA"
|
||||
;
|
||||
|
||||
ALTER TABLE "CT_MRDS"."A_SOURCE_FILE_CONFIG"
|
||||
ADD CONSTRAINT A_SOURCE_FILE_CONFIG_PK PRIMARY KEY (A_SOURCE_FILE_CONFIG_KEY);
|
||||
ALTER TABLE "CT_MRDS"."A_SOURCE_FILE_CONFIG"
|
||||
ADD CONSTRAINT SOURCE_FILE_TYPE_CHK
|
||||
CHECK (SOURCE_FILE_TYPE IN ('INPUT', 'CONTAINER', 'LOAD_CONFIG'));
|
||||
ALTER TABLE "CT_MRDS"."A_SOURCE_FILE_CONFIG"
|
||||
ADD CONSTRAINT ASFC_A_SOURCE_KEY_FK FOREIGN KEY("A_SOURCE_KEY") REFERENCES "CT_MRDS"."A_SOURCE"("A_SOURCE_KEY");
|
||||
ALTER TABLE "CT_MRDS"."A_SOURCE_FILE_CONFIG"
|
||||
ADD CONSTRAINT ASFC_CONTAINER_FILE_KEY_FK FOREIGN KEY("CONTAINER_FILE_KEY") REFERENCES "CT_MRDS"."A_SOURCE_FILE_CONFIG"("A_SOURCE_FILE_CONFIG_KEY");
|
||||
ALTER TABLE "CT_MRDS"."A_SOURCE_FILE_CONFIG"
|
||||
ADD CONSTRAINT A_SOURCE_FILE_CONFIG_UQ1 UNIQUE("SOURCE_FILE_TYPE","SOURCE_FILE_ID","TABLE_ID");
|
||||
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON "CT_MRDS"."A_SOURCE_FILE_CONFIG" TO MRDS_LOADER_ROLE;
|
||||
|
||||
--
|
||||
-- CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||
--
|
||||
|
||||
CREATE SEQUENCE CT_MRDS.A_SOURCE_FILE_RECEIVED_KEY_SEQ START WITH 1 INCREMENT BY 1;
|
||||
GRANT SELECT ON CT_MRDS.A_SOURCE_FILE_RECEIVED_KEY_SEQ TO MRDS_LOADER_ROLE;
|
||||
|
||||
-- DROP TABLE "CT_MRDS"."A_SOURCE_FILE_RECEIVED";
|
||||
|
||||
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),
|
||||
"HIST_FILE_NAME" VARCHAR2(1000)
|
||||
)
|
||||
TABLESPACE "DATA" ;
|
||||
|
||||
ALTER TABLE "CT_MRDS"."A_SOURCE_FILE_RECEIVED"
|
||||
ADD CONSTRAINT A_SOURCE_FILE_RECEIVED_PK PRIMARY KEY (A_SOURCE_FILE_RECEIVED_KEY);
|
||||
ALTER TABLE "CT_MRDS"."A_SOURCE_FILE_RECEIVED"
|
||||
ADD 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");
|
||||
|
||||
ALTER TABLE "CT_MRDS"."A_SOURCE_FILE_RECEIVED"
|
||||
ADD CONSTRAINT A_SOURCE_FILE_RECEIVED_CHK
|
||||
CHECK (PROCESSING_STATUS IN ('RECEIVED', 'VALIDATED', 'VALIDATION_FAILED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED'));
|
||||
|
||||
-- Because "CREATED" column is type: TIMESTAMP WITH TIMEZONE, the unique constraint cannot be created.
|
||||
-- As a workaround the unique index is created: A_SOURCE_FILE_RECEIVED_UK1
|
||||
--ALTER TABLE "CT_MRDS"."A_SOURCE_FILE_RECEIVED"
|
||||
--ADD CONSTRAINT A_SOURCE_FILE_RECEIVED_UK1 UNIQUE("CHECKSUM","CREATED","BYTES");
|
||||
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;
|
||||
|
||||
--
|
||||
-- CT_MRDS.A_COLUMN_DATE_FORMAT
|
||||
--
|
||||
|
||||
-- DROP TABLE "CT_MRDS"."A_COLUMN_DATE_FORMAT";
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_COLUMN_DATE_FORMAT"
|
||||
( "TEMPLATE_TABLE_NAME" VARCHAR2(200) NOT NULL ENABLE,
|
||||
"COLUMN_NAME" VARCHAR2(200) NOT NULL,
|
||||
"DATE_FORMAT" VARCHAR2(200) NOT NULL
|
||||
)
|
||||
TABLESPACE "DATA" ;
|
||||
|
||||
ALTER TABLE "CT_MRDS"."A_COLUMN_DATE_FORMAT"
|
||||
ADD CONSTRAINT A_COLUMN_DATE_FORMAT_PK PRIMARY KEY (TEMPLATE_TABLE_NAME, COLUMN_NAME);
|
||||
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON "CT_MRDS"."A_COLUMN_DATE_FORMAT" TO MRDS_LOADER_ROLE;
|
||||
|
||||
--
|
||||
-- CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY
|
||||
--
|
||||
CREATE TABLE CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY
|
||||
(
|
||||
"A_WORKFLOW_HISTORY_KEY" NUMBER,
|
||||
"SERVICE_NAME" VARCHAR2(200),
|
||||
"PROPERTY" VARCHAR2(200),
|
||||
"VALUE" VARCHAR2(4000 CHAR)
|
||||
)
|
||||
TABLESPACE "DATA" ;
|
||||
|
||||
--ALTER TABLE "CT_MRDS"."A_WORKFLOW_HISTORY_PROPERTY"
|
||||
--ADD CONSTRAINT A_WORKFLOW_HISTORY_FK FOREIGN KEY (A_WORKFLOW_HISTORY_KEY, SERVICE_NAME) REFERENCES CT_MRDS.A_WORKFLOW_HISTORY (A_WORKFLOW_HISTORY_KEY, SERVICE_NAME)
|
||||
--;
|
||||
CREATE INDEX CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY_IDX1 ON CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY (A_WORKFLOW_HISTORY_KEY, SERVICE_NAME);
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
--MARS-770
|
||||
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
|
||||
select 'install_package_MarsGeneralRelease_MARS770_grants_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
|
||||
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 payload grants specific part
|
||||
--=============================================================================================================================
|
||||
|
||||
-- GRANT SELECT ANY TABLE ON SCHEMA CT_MRDS TO MRDS_LOADER;
|
||||
-- GRANT INSERT ANY TABLE ON SCHEMA CT_MRDS TO MRDS_LOADER;
|
||||
-- GRANT UPDATE ANY TABLE ON SCHEMA CT_MRDS TO MRDS_LOADER;
|
||||
-- GRANT DELETE ANY TABLE ON SCHEMA CT_MRDS TO MRDS_LOADER;
|
||||
-- GRANT EXECUTE ANY PROCEDURE ON SCHEMA CT_MRDS TO MRDS_LOADER;
|
||||
-- GRANT SELECT ANY SEQUENCE ON SCHEMA CT_MRDS TO MRDS_LOADER;
|
||||
-- GRANT SELECT ANY TABLE ON SCHEMA CT_MRDS TO MOPDB_PUBLIC_GL;
|
||||
|
||||
-- GRANT SELECT ANY TABLE ON SCHEMA CT_ET_TEMPLATES TO MRDS_LOADER;
|
||||
-- GRANT INSERT ANY TABLE ON SCHEMA CT_ET_TEMPLATES TO MRDS_LOADER;
|
||||
-- GRANT UPDATE ANY TABLE ON SCHEMA CT_ET_TEMPLATES TO MRDS_LOADER;
|
||||
-- GRANT DELETE ANY TABLE ON SCHEMA CT_ET_TEMPLATES TO MRDS_LOADER;
|
||||
-- GRANT CREATE ANY TABLE ON SCHEMA CT_ET_TEMPLATES TO MRDS_LOADER;
|
||||
-- GRANT DROP ANY TABLE ON SCHEMA CT_ET_TEMPLATES TO MRDS_LOADER;
|
||||
|
||||
-- GRANT SELECT ANY TABLE ON SCHEMA OU_RQSD TO RQSD;
|
||||
|
||||
-- BEGIN
|
||||
-- FOR user_rec IN (SELECT username FROM dba_users WHERE oracle_maintained != 'Y' AND common != 'YES') LOOP
|
||||
-- DECLARE
|
||||
-- schema_name VARCHAR2(128) := user_rec.username;
|
||||
-- BEGIN
|
||||
|
||||
-- EXECUTE IMMEDIATE 'GRANT SELECT ON CT_MRDS.A_WORKFLOW_HISTORY TO "'|| schema_name ||'" WITH GRANT OPTION';
|
||||
-- EXECUTE IMMEDIATE 'GRANT SELECT ANY TABLE ON SCHEMA ODS TO '|| schema_name ;
|
||||
|
||||
-- EXCEPTION
|
||||
-- WHEN OTHERS THEN
|
||||
-- DBMS_OUTPUT.PUT_LINE('Error processing schema ' || schema_name || ': ' || SQLERRM);
|
||||
-- END;
|
||||
-- END LOOP;
|
||||
-- END;
|
||||
|
||||
GRANT SELECT ANY TABLE TO OU_RQSD;
|
||||
GRANT SELECT ANY TABLE TO RQSD;
|
||||
|
||||
BEGIN
|
||||
FOR user_rec IN (SELECT username FROM dba_users WHERE oracle_maintained != 'Y' AND common != 'YES') LOOP
|
||||
DECLARE
|
||||
schema_name VARCHAR2(128) := user_rec.username;
|
||||
BEGIN
|
||||
|
||||
EXECUTE IMMEDIATE 'GRANT SELECT ON CT_MRDS.A_WORKFLOW_HISTORY TO "'|| schema_name ||'" WITH GRANT OPTION';
|
||||
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE('Error processing schema ' || schema_name || ': ' || SQLERRM);
|
||||
END;
|
||||
END LOOP;
|
||||
END;
|
||||
@@ -0,0 +1,797 @@
|
||||
--MARS-770
|
||||
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
|
||||
select 'install_package_MarsGeneralRelease_MARS770_packages_1_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
|
||||
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 payload CT_MRDS.ENV_MANAGER package
|
||||
--=============================================================================================================================
|
||||
|
||||
CREATE OR REPLACE EDITIONABLE 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
|
||||
**/
|
||||
|
||||
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);
|
||||
gvHistoryBucketName VARCHAR2(200);
|
||||
gvDataBucketUri VARCHAR2(200);
|
||||
gvInboxBucketUri VARCHAR2(200);
|
||||
gvHistoryBucketUri 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_C VARCHAR2(4000) := 'Either pFileUri or pSourceFileReceivedKey must be not null';
|
||||
MSG_EMPTY_FILEURI_AND_RECKEY VARCHAR2(4000) := MSG_EMPTY_FILEURI_AND_RECKEY_C;
|
||||
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_C 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';
|
||||
MSG_NO_CONFIG_MATCH_FOR_FILEURI VARCHAR2(4000) := MSG_NO_CONFIG_MATCH_FOR_FILEURI_C;
|
||||
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_C VARCHAR2(4000) := 'Multiple match for source file in A_SOURCE_FILE_CONFIG table';
|
||||
MSG_MULTIPLE_MATCH_FOR_SRCFILE VARCHAR2(4000) := MSG_MULTIPLE_MATCH_FOR_SRCFILE_C;
|
||||
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_C VARCHAR2(4000) := 'Missing entry in config table: A_COLUMN_DATE_FORMAT primary key(A_SOURCE_FILE_CONFIG_KEY, 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''';
|
||||
MSG_MISSING_COLUMN_DATE_FORMAT VARCHAR2(4000) := MSG_MISSING_COLUMN_DATE_FORMAT_C;
|
||||
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_C 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';
|
||||
MSG_MULTIPLE_COLUMN_DATE_FORMAT VARCHAR2(4000) := MSG_MULTIPLE_COLUMN_DATE_FORMAT_C;
|
||||
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_C VARCHAR2(4000) := 'Didnt get load operation id from external table validation';
|
||||
MSG_DIDNT_GET_LOAD_OPERATION_ID VARCHAR2(4000) := MSG_DIDNT_GET_LOAD_OPERATION_ID_C;
|
||||
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_C 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';
|
||||
MSG_NO_CONFIG_FOR_RECEIVED_FILE VARCHAR2(4000) := MSG_NO_CONFIG_FOR_RECEIVED_FILE_C;
|
||||
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_C VARCHAR2(4000) := 'Multiple matchs for received source file in A_SOURCE_FILE_CONFIG';
|
||||
MSG_MULTI_CONFIG_FOR_RECEIVED_FILE VARCHAR2(4000) := MSG_MULTI_CONFIG_FOR_RECEIVED_FILE_C;
|
||||
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_C VARCHAR2(4000) := 'File not found on the cloud';
|
||||
MSG_FILE_NOT_FOUND_ON_CLOUD VARCHAR2(4000) := MSG_FILE_NOT_FOUND_ON_CLOUD_C;
|
||||
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_C VARCHAR2(4000) := 'File validation failed';
|
||||
MSG_FILE_VALIDATION_FAILED VARCHAR2(4000) := MSG_FILE_VALIDATION_FAILED_C;
|
||||
PRAGMA EXCEPTION_INIT( ERR_FILE_VALIDATION_FAILED
|
||||
,CODE_FILE_VALIDATION_FAILED);
|
||||
|
||||
ERR_NO_CONFIG_MATCH EXCEPTION;
|
||||
CODE_NO_CONFIG_MATCH CONSTANT PLS_INTEGER := -20011;
|
||||
MSG_NO_CONFIG_MATCH_C VARCHAR2(4000) := 'No match for specified parameters in A_SOURCE_FILE_CONFIG table';
|
||||
MSG_NO_CONFIG_MATCH VARCHAR2(4000) := MSG_NO_CONFIG_MATCH_C;
|
||||
PRAGMA EXCEPTION_INIT( ERR_NO_CONFIG_MATCH
|
||||
,CODE_NO_CONFIG_MATCH);
|
||||
|
||||
ERR_UNKNOWN_PREFIX EXCEPTION;
|
||||
CODE_UNKNOWN_PREFIX CONSTANT PLS_INTEGER := -20012;
|
||||
MSG_UNKNOWN_PREFIX_C VARCHAR2(4000) := 'Unknown prefix';
|
||||
MSG_UNKNOWN_PREFIX VARCHAR2(4000) := MSG_UNKNOWN_PREFIX_C;
|
||||
PRAGMA EXCEPTION_INIT( ERR_UNKNOWN_PREFIX
|
||||
,CODE_UNKNOWN_PREFIX);
|
||||
|
||||
ERR_TABLE_NOT_EXISTS EXCEPTION;
|
||||
CODE_TABLE_NOT_EXISTS CONSTANT PLS_INTEGER := -20013;
|
||||
MSG_TABLE_NOT_EXISTS_C VARCHAR2(4000) := 'Table does not exist';
|
||||
MSG_TABLE_NOT_EXISTS VARCHAR2(4000) := MSG_TABLE_NOT_EXISTS_C;
|
||||
PRAGMA EXCEPTION_INIT( ERR_TABLE_NOT_EXISTS
|
||||
,CODE_TABLE_NOT_EXISTS);
|
||||
|
||||
ERR_COLUMN_NOT_EXISTS EXCEPTION;
|
||||
CODE_COLUMN_NOT_EXISTS CONSTANT PLS_INTEGER := -20014;
|
||||
MSG_COLUMN_NOT_EXISTS_C VARCHAR2(4000) := 'Column does not exist in table';
|
||||
MSG_COLUMN_NOT_EXISTS VARCHAR2(4000) := MSG_COLUMN_NOT_EXISTS_C;
|
||||
PRAGMA EXCEPTION_INIT( ERR_COLUMN_NOT_EXISTS
|
||||
,CODE_COLUMN_NOT_EXISTS);
|
||||
|
||||
ERR_UNSUPPORTED_DATA_TYPE EXCEPTION;
|
||||
CODE_UNSUPPORTED_DATA_TYPE CONSTANT PLS_INTEGER := -20015;
|
||||
MSG_UNSUPPORTED_DATA_TYPE_C VARCHAR2(4000) := 'Unsupported data type';
|
||||
MSG_UNSUPPORTED_DATA_TYPE VARCHAR2(4000) := MSG_UNSUPPORTED_DATA_TYPE_C;
|
||||
PRAGMA EXCEPTION_INIT( ERR_UNSUPPORTED_DATA_TYPE
|
||||
,CODE_UNSUPPORTED_DATA_TYPE);
|
||||
|
||||
ERR_MISSING_SOURCE_KEY EXCEPTION;
|
||||
CODE_MISSING_SOURCE_KEY CONSTANT PLS_INTEGER := -20016;
|
||||
MSG_MISSING_SOURCE_KEY_C VARCHAR2(4000) := 'The Source was not found in parent table A_SOURCE';
|
||||
MSG_MISSING_SOURCE_KEY VARCHAR2(4000) := MSG_MISSING_SOURCE_KEY_C;
|
||||
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 := -20017;
|
||||
MSG_NULL_SOURCE_FILE_CONFIG_KEY_C VARCHAR2(4000) := 'No entry in A_SOURCE_FILE_CONFIG table for specified A_SOURCE_FILE_CONFIG_KEY';
|
||||
MSG_NULL_SOURCE_FILE_CONFIG_KEY VARCHAR2(4000) := MSG_NULL_SOURCE_FILE_CONFIG_KEY_C;
|
||||
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 := -20018;
|
||||
MSG_DUPLICATED_SOURCE_KEY_C VARCHAR2(4000) := 'The Source already exists in the A_SOURCE table';
|
||||
MSG_DUPLICATED_SOURCE_KEY VARCHAR2(4000) := MSG_DUPLICATED_SOURCE_KEY_C;
|
||||
PRAGMA EXCEPTION_INIT( ERR_DUPLICATED_SOURCE_KEY
|
||||
,CODE_DUPLICATED_SOURCE_KEY);
|
||||
|
||||
ERR_MISSING_CONTAINER_CONFIG EXCEPTION;
|
||||
CODE_MISSING_CONTAINER_CONFIG CONSTANT PLS_INTEGER := -20019;
|
||||
MSG_MISSING_CONTAINER_CONFIG_C VARCHAR2(4000) := 'No match in A_SOURCE_FILE_CONFIG table where SOURCE_FILE_TYPE=''CONTAINER'' and specified SOURCE_FILE_ID';
|
||||
MSG_MISSING_CONTAINER_CONFIG VARCHAR2(4000) := MSG_MISSING_CONTAINER_CONFIG_C;
|
||||
PRAGMA EXCEPTION_INIT( ERR_MISSING_CONTAINER_CONFIG
|
||||
,CODE_MISSING_CONTAINER_CONFIG);
|
||||
|
||||
ERR_MULTIPLE_CONTAINER_ENTRIES EXCEPTION;
|
||||
CODE_MULTIPLE_CONTAINER_ENTRIES CONSTANT PLS_INTEGER := -20020;
|
||||
MSG_MULTIPLE_CONTAINER_ENTRIES_C VARCHAR2(4000) := 'Multiple matches in A_SOURCE_FILE_CONFIG table where SOURCE_FILE_TYPE=''CONTAINER'' and specified SOURCE_FILE_ID';
|
||||
MSG_MULTIPLE_CONTAINER_ENTRIES VARCHAR2(4000) := MSG_MULTIPLE_CONTAINER_ENTRIES_C;
|
||||
PRAGMA EXCEPTION_INIT( ERR_MULTIPLE_CONTAINER_ENTRIES
|
||||
,CODE_MULTIPLE_CONTAINER_ENTRIES);
|
||||
|
||||
ERR_WRONG_DESTINATION_PARAM EXCEPTION;
|
||||
CODE_WRONG_DESTINATION_PARAM CONSTANT PLS_INTEGER := -20021;
|
||||
MSG_WRONG_DESTINATION_PARAM_C VARCHAR2(4000) := 'Wrong destination parameter provided.';
|
||||
MSG_WRONG_DESTINATION_PARAM VARCHAR2(4000) := MSG_WRONG_DESTINATION_PARAM_C;
|
||||
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 := -20022;
|
||||
MSG_FILE_NOT_EXISTS_ON_CLOUD_C VARCHAR2(4000) := 'File not exists on cloud.';
|
||||
MSG_FILE_NOT_EXISTS_ON_CLOUD VARCHAR2(4000) := MSG_FILE_NOT_EXISTS_ON_CLOUD_C;
|
||||
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 := -20023;
|
||||
MSG_FILE_ALREADY_REGISTERED_C VARCHAR2(4000) := 'File already registered in A_SOURCE_FILE_RECEIVED table.';
|
||||
MSG_FILE_ALREADY_REGISTERED VARCHAR2(4000) := MSG_FILE_ALREADY_REGISTERED_C;
|
||||
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 := -20024;
|
||||
MSG_WRONG_DATE_TIMESTAMP_FORMAT_C VARCHAR2(4000) := 'Provided DATE or TIMESTAMP format has errors (possible duplicated codes, ex: ''DD'').';
|
||||
MSG_WRONG_DATE_TIMESTAMP_FORMAT VARCHAR2(4000) := MSG_WRONG_DATE_TIMESTAMP_FORMAT_C;
|
||||
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 := -20025;
|
||||
MSG_ENVIRONMENT_NOT_SET_C 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.)'
|
||||
;
|
||||
MSG_ENVIRONMENT_NOT_SET VARCHAR2(4000) := MSG_ENVIRONMENT_NOT_SET_C;
|
||||
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 := -20026;
|
||||
MSG_CONFIG_VARIABLE_NOT_SET_C VARCHAR2(4000) := 'Missing configuration value in A_FILE_MANAGER_CONFIG';
|
||||
MSG_CONFIG_VARIABLE_NOT_SET VARCHAR2(4000) := MSG_CONFIG_VARIABLE_NOT_SET_C;
|
||||
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 := -20027;
|
||||
MSG_NOT_INPUT_SOURCE_FILE_TYPE_C VARCHAR2(4000) := 'Historization can be executed only for A_SOURCE_FILE_CONFIG_KEY where SOURCE_FILE_TYPE=''INPUT''';
|
||||
MSG_NOT_INPUT_SOURCE_FILE_TYPE VARCHAR2(4000) := MSG_NOT_INPUT_SOURCE_FILE_TYPE_C;
|
||||
PRAGMA EXCEPTION_INIT( ERR_NOT_INPUT_SOURCE_FILE_TYPE
|
||||
,CODE_NOT_INPUT_SOURCE_FILE_TYPE);
|
||||
|
||||
ERR_EXP_DATA_FOR_HIST_FAILED EXCEPTION;
|
||||
CODE_EXP_DATA_FOR_HIST_FAILED CONSTANT PLS_INTEGER := -20028;
|
||||
MSG_EXP_DATA_FOR_HIST_FAILED_C VARCHAR2(4000) := 'Export data for historization failed.';
|
||||
MSG_EXP_DATA_FOR_HIST_FAILED VARCHAR2(4000) := MSG_EXP_DATA_FOR_HIST_FAILED_C;
|
||||
PRAGMA EXCEPTION_INIT( ERR_EXP_DATA_FOR_HIST_FAILED
|
||||
,CODE_EXP_DATA_FOR_HIST_FAILED);
|
||||
|
||||
ERR_RESTORE_FILE_FROM_TRASH EXCEPTION;
|
||||
CODE_RESTORE_FILE_FROM_TRASH CONSTANT PLS_INTEGER := -20029;
|
||||
MSG_RESTORE_FILE_FROM_TRASH_C VARCHAR2(4000) := 'Unexpected issues occured while historization process. Restoration of exported files failed.';
|
||||
MSG_RESTORE_FILE_FROM_TRASH VARCHAR2(4000) := MSG_RESTORE_FILE_FROM_TRASH_C;
|
||||
PRAGMA EXCEPTION_INIT( ERR_RESTORE_FILE_FROM_TRASH
|
||||
,CODE_RESTORE_FILE_FROM_TRASH);
|
||||
|
||||
ERR_CHANGE_STAT_TO_HISTORISED_FAILED EXCEPTION;
|
||||
CODE_CHANGE_STAT_TO_HISTORISED_FAILED CONSTANT PLS_INTEGER := -20030;
|
||||
MSG_CHANGE_STAT_TO_HISTORISED_FAILED_C VARCHAR2(4000) := 'Failed to change file status to: HISTORISED in A_SOURCE_FILE_RECEIVED table.';
|
||||
MSG_CHANGE_STAT_TO_HISTORISED_FAILED VARCHAR2(4000) := MSG_CHANGE_STAT_TO_HISTORISED_FAILED_C;
|
||||
PRAGMA EXCEPTION_INIT( ERR_CHANGE_STAT_TO_HISTORISED_FAILED
|
||||
,CODE_CHANGE_STAT_TO_HISTORISED_FAILED);
|
||||
|
||||
ERR_MOVE_FILE_TO_TRASH_FAILED EXCEPTION;
|
||||
CODE_MOVE_FILE_TO_TRASH_FAILED CONSTANT PLS_INTEGER := -20031;
|
||||
MSG_MOVE_FILE_TO_TRASH_FAILED_C VARCHAR2(4000) := 'FAILED to move file to TRASH before DROPPING it.';
|
||||
MSG_MOVE_FILE_TO_TRASH_FAILED VARCHAR2(4000) := MSG_MOVE_FILE_TO_TRASH_FAILED_C;
|
||||
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 := -20032;
|
||||
MSG_DROP_EXPORTED_FILES_FAILED_C VARCHAR2(4000) := 'FAILED to move file to TRASH before DROPPING it.';
|
||||
MSG_DROP_EXPORTED_FILES_FAILED VARCHAR2(4000) := MSG_DROP_EXPORTED_FILES_FAILED_C;
|
||||
PRAGMA EXCEPTION_INIT( ERR_DROP_EXPORTED_FILES_FAILED
|
||||
,CODE_DROP_EXPORTED_FILES_FAILED);
|
||||
|
||||
|
||||
ERR_UNKNOWN EXCEPTION;
|
||||
CODE_UNKNOWN CONSTANT PLS_INTEGER := -20999;
|
||||
MSG_UNKNOWN_C VARCHAR2(4000) := 'Unknown Error Occured';
|
||||
MSG_UNKNOWN VARCHAR2(4000) := MSG_UNKNOWN_C;
|
||||
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 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
|
||||
* - gvHistoryBucketName
|
||||
* - gvInboxBucketUri
|
||||
* - gvDataBucketUri
|
||||
* - gvHistoryBucketUri
|
||||
* - 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;
|
||||
|
||||
|
||||
END ENV_MANAGER;
|
||||
|
||||
/
|
||||
|
||||
CREATE OR REPLACE EDITIONABLE PACKAGE BODY "CT_MRDS"."ENV_MANAGER"
|
||||
AS
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
PROCEDURE INIT_ERRORS IS
|
||||
BEGIN
|
||||
Errors(CODE_EMPTY_FILEURI_AND_RECKEY) := Error_Record(CODE_EMPTY_FILEURI_AND_RECKEY, MSG_EMPTY_FILEURI_AND_RECKEY); -- -20001
|
||||
Errors(CODE_NO_CONFIG_MATCH_FOR_FILEURI) := Error_Record(CODE_NO_CONFIG_MATCH_FOR_FILEURI, MSG_NO_CONFIG_MATCH_FOR_FILEURI); -- -20002
|
||||
Errors(CODE_MULTIPLE_MATCH_FOR_SRCFILE) := Error_Record(CODE_MULTIPLE_MATCH_FOR_SRCFILE, MSG_MULTIPLE_MATCH_FOR_SRCFILE); -- -20003
|
||||
Errors(CODE_MISSING_COLUMN_DATE_FORMAT) := Error_Record(CODE_MISSING_COLUMN_DATE_FORMAT, MSG_MISSING_COLUMN_DATE_FORMAT); -- -20004
|
||||
Errors(CODE_MULTIPLE_COLUMN_DATE_FORMAT) := Error_Record(CODE_MULTIPLE_COLUMN_DATE_FORMAT, MSG_MULTIPLE_COLUMN_DATE_FORMAT); -- -20005
|
||||
Errors(CODE_DIDNT_GET_LOAD_OPERATION_ID) := Error_Record(CODE_DIDNT_GET_LOAD_OPERATION_ID, MSG_DIDNT_GET_LOAD_OPERATION_ID); -- -20006
|
||||
Errors(CODE_NO_CONFIG_FOR_RECEIVED_FILE) := Error_Record(CODE_NO_CONFIG_FOR_RECEIVED_FILE, MSG_NO_CONFIG_FOR_RECEIVED_FILE); -- -20007
|
||||
Errors(CODE_MULTI_CONFIG_FOR_RECEIVED_FILE) := Error_Record(CODE_MULTI_CONFIG_FOR_RECEIVED_FILE, MSG_MULTI_CONFIG_FOR_RECEIVED_FILE); -- -20008
|
||||
Errors(CODE_FILE_NOT_FOUND_ON_CLOUD) := Error_Record(CODE_FILE_NOT_FOUND_ON_CLOUD, MSG_FILE_NOT_FOUND_ON_CLOUD); -- -20009
|
||||
Errors(CODE_FILE_VALIDATION_FAILED) := Error_Record(CODE_FILE_VALIDATION_FAILED, MSG_FILE_VALIDATION_FAILED); -- -20010
|
||||
Errors(CODE_NO_CONFIG_MATCH) := Error_Record(CODE_NO_CONFIG_MATCH, MSG_NO_CONFIG_MATCH); -- -20011
|
||||
Errors(CODE_UNKNOWN_PREFIX) := Error_Record(CODE_UNKNOWN_PREFIX, MSG_UNKNOWN_PREFIX); -- -20012
|
||||
Errors(CODE_TABLE_NOT_EXISTS) := Error_Record(CODE_TABLE_NOT_EXISTS, MSG_TABLE_NOT_EXISTS); -- -20013
|
||||
Errors(CODE_COLUMN_NOT_EXISTS) := Error_Record(CODE_COLUMN_NOT_EXISTS, MSG_COLUMN_NOT_EXISTS); -- -20014
|
||||
Errors(CODE_UNSUPPORTED_DATA_TYPE) := Error_Record(CODE_UNSUPPORTED_DATA_TYPE, MSG_UNSUPPORTED_DATA_TYPE); -- -20015
|
||||
Errors(CODE_MISSING_SOURCE_KEY) := Error_Record(CODE_MISSING_SOURCE_KEY, MSG_MISSING_SOURCE_KEY); -- -20016
|
||||
Errors(CODE_NULL_SOURCE_FILE_CONFIG_KEY) := Error_Record(CODE_NULL_SOURCE_FILE_CONFIG_KEY, MSG_NULL_SOURCE_FILE_CONFIG_KEY); -- -20017
|
||||
Errors(CODE_DUPLICATED_SOURCE_KEY) := Error_Record(CODE_DUPLICATED_SOURCE_KEY, MSG_DUPLICATED_SOURCE_KEY); -- -20018
|
||||
Errors(CODE_MISSING_CONTAINER_CONFIG) := Error_Record(CODE_MISSING_CONTAINER_CONFIG, MSG_MISSING_CONTAINER_CONFIG); -- -20019
|
||||
Errors(CODE_MULTIPLE_CONTAINER_ENTRIES) := Error_Record(CODE_MULTIPLE_CONTAINER_ENTRIES, MSG_MULTIPLE_CONTAINER_ENTRIES); -- -20020
|
||||
Errors(CODE_WRONG_DESTINATION_PARAM) := Error_Record(CODE_WRONG_DESTINATION_PARAM, MSG_WRONG_DESTINATION_PARAM); -- -20021
|
||||
Errors(CODE_FILE_NOT_EXISTS_ON_CLOUD) := Error_Record(CODE_FILE_NOT_EXISTS_ON_CLOUD, MSG_FILE_NOT_EXISTS_ON_CLOUD); -- -20022
|
||||
Errors(CODE_FILE_ALREADY_REGISTERED) := Error_Record(CODE_FILE_ALREADY_REGISTERED, MSG_FILE_ALREADY_REGISTERED); -- -20023
|
||||
Errors(CODE_WRONG_DATE_TIMESTAMP_FORMAT) := Error_Record(CODE_WRONG_DATE_TIMESTAMP_FORMAT, MSG_WRONG_DATE_TIMESTAMP_FORMAT); -- -20024
|
||||
Errors(CODE_ENVIRONMENT_NOT_SET) := Error_Record(CODE_ENVIRONMENT_NOT_SET, MSG_ENVIRONMENT_NOT_SET); -- -20025
|
||||
Errors(CODE_CONFIG_VARIABLE_NOT_SET) := Error_Record(CODE_CONFIG_VARIABLE_NOT_SET, MSG_CONFIG_VARIABLE_NOT_SET); -- -20026
|
||||
Errors(CODE_NOT_INPUT_SOURCE_FILE_TYPE) := Error_Record(CODE_NOT_INPUT_SOURCE_FILE_TYPE, MSG_NOT_INPUT_SOURCE_FILE_TYPE); -- -20027
|
||||
Errors(CODE_EXP_DATA_FOR_HIST_FAILED) := Error_Record(CODE_EXP_DATA_FOR_HIST_FAILED, MSG_EXP_DATA_FOR_HIST_FAILED); -- -20028
|
||||
Errors(CODE_RESTORE_FILE_FROM_TRASH) := Error_Record(CODE_RESTORE_FILE_FROM_TRASH, MSG_RESTORE_FILE_FROM_TRASH); -- -20029
|
||||
Errors(CODE_CHANGE_STAT_TO_HISTORISED_FAILED):= Error_Record(CODE_CHANGE_STAT_TO_HISTORISED_FAILED, MSG_CHANGE_STAT_TO_HISTORISED_FAILED); -- -20030
|
||||
Errors(CODE_MOVE_FILE_TO_TRASH_FAILED) := Error_Record(CODE_MOVE_FILE_TO_TRASH_FAILED, MSG_MOVE_FILE_TO_TRASH_FAILED); -- -20031
|
||||
Errors(CODE_DROP_EXPORTED_FILES_FAILED) := Error_Record(CODE_DROP_EXPORTED_FILES_FAILED, MSG_DROP_EXPORTED_FILES_FAILED); -- -20032
|
||||
|
||||
Errors(CODE_UNKNOWN) := Error_Record(CODE_UNKNOWN, MSG_UNKNOWN); -- -20999
|
||||
|
||||
END INIT_ERRORS;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
FUNCTION GET_DEFAULT_ENV
|
||||
RETURN VARCHAR2
|
||||
IS
|
||||
vDefaultEnv CT_MRDS.a_file_manager_config.config_variable_value%TYPE;
|
||||
BEGIN
|
||||
select config_variable_value
|
||||
into vDefaultEnv
|
||||
from CT_MRDS.a_file_manager_config
|
||||
where lower(environment_id)='default'
|
||||
and lower(config_variable)='environmentid';
|
||||
RETURN vDefaultEnv;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
RETURN NULL;
|
||||
END;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
PROCEDURE INIT_VARIABLES(
|
||||
pEnv VARCHAR2
|
||||
) IS
|
||||
BEGIN
|
||||
for rec in (
|
||||
select
|
||||
ENVIRONMENT_ID
|
||||
,REGION
|
||||
,NAMESPACE
|
||||
,INBOXBUCKETNAME
|
||||
,DATABUCKETNAME
|
||||
,HISTORYBUCKETNAME
|
||||
,CREDENTIALNAME
|
||||
,LOGGINGENABLED
|
||||
,MINLOGLEVEL
|
||||
,DEFAULTDATEFORMAT
|
||||
,CONSOLELOGGINGENABLED
|
||||
from (
|
||||
select environment_id, config_variable, config_variable_value from CT_MRDS.A_FILE_MANAGER_CONFIG
|
||||
where environment_id=pEnv
|
||||
)
|
||||
pivot (
|
||||
min(config_variable_value)
|
||||
for config_variable in (
|
||||
'Region' as Region
|
||||
,'NameSpace' as NameSpace
|
||||
,'InboxBucketName' as InboxBucketName
|
||||
,'DataBucketName' as DataBucketName
|
||||
,'HistoryBucketName' as HistoryBucketName
|
||||
,'CredentialName' as CredentialName
|
||||
,'LoggingEnabled' as LoggingEnabled
|
||||
,'MinLogLevel' as MinLogLevel
|
||||
,'DefaultDateFormat' as DefaultDateFormat
|
||||
,'ConsoleLoggingEnabled' as ConsoleLoggingEnabled)
|
||||
)
|
||||
) loop
|
||||
if (rec.NAMESPACE is NULL
|
||||
or rec.REGION is NULL
|
||||
or rec.NAMESPACE is NULL
|
||||
or rec.INBOXBUCKETNAME is NULL
|
||||
or rec.DATABUCKETNAME is NULL
|
||||
or rec.HISTORYBUCKETNAME is NULL
|
||||
or rec.CREDENTIALNAME is NULL
|
||||
) THEN
|
||||
MSG_CONFIG_VARIABLE_NOT_SET := MSG_CONFIG_VARIABLE_NOT_SET
|
||||
||cgBL||' '||'Details about existing Configuration Variables where environment_id='||pEnv||': '
|
||||
||cgBL||' '||'-------------------------'
|
||||
||cgBL||' '||'Region = '||rec.Region
|
||||
||cgBL||' '||'NameSpace = '||rec.NameSpace
|
||||
||cgBL||' '||'InboxBucketName = '||rec.InboxBucketName
|
||||
||cgBL||' '||'DataBucketName = '||rec.DataBucketName
|
||||
||cgBL||' '||'HistoryBucketName = '||rec.HistoryBucketName
|
||||
||cgBL||' '||'CredentialName = '||rec.CredentialName
|
||||
;
|
||||
LOG_PROCESS_EVENT(MSG_CONFIG_VARIABLE_NOT_SET, 'ERROR');
|
||||
RAISE_APPLICATION_ERROR(CODE_CONFIG_VARIABLE_NOT_SET, MSG_CONFIG_VARIABLE_NOT_SET);
|
||||
|
||||
elsif (rec.LOGGINGENABLED is NULL
|
||||
or rec.MINLOGLEVEL is NULL
|
||||
or rec.DEFAULTDATEFORMAT is NULL
|
||||
) THEN
|
||||
vgMsgTmp := 'Missing configuration variables'
|
||||
||cgBL||' '||'Details about existing Configuration Variables where environment_id='||pEnv||': '
|
||||
||cgBL||' '||'-------------------------'
|
||||
||cgBL||' '||'LoggingEnabled = '||rec.LoggingEnabled
|
||||
||cgBL||' '||'MinLogLevel = '||rec.MinLogLevel
|
||||
||cgBL||' '||'DefaultDateFormat = '||rec.DefaultDateFormat
|
||||
;
|
||||
LOG_PROCESS_EVENT(vgMsgTmp, 'WARNING');
|
||||
|
||||
else
|
||||
gvNameSpace := rec.NAMESPACE;
|
||||
gvRegion := rec.REGION;
|
||||
gvInboxBucketName := rec.INBOXBUCKETNAME;
|
||||
gvDataBucketName := rec.DATABUCKETNAME;
|
||||
gvHistoryBucketName := rec.HISTORYBUCKETNAME;
|
||||
gvCredentialName := rec.CREDENTIALNAME;
|
||||
gvInboxBucketUri := 'https://objectstorage.'||rec.REGION||'.oraclecloud.com/n/'||rec.NAMESPACE||'/b/'||rec.INBOXBUCKETNAME||'/o/';
|
||||
gvDataBucketUri := 'https://objectstorage.'||rec.REGION||'.oraclecloud.com/n/'||rec.NAMESPACE||'/b/'||rec.DATABUCKETNAME||'/o/';
|
||||
gvHistoryBucketUri := 'https://objectstorage.'||rec.REGION||'.oraclecloud.com/n/'||rec.NAMESPACE||'/b/'||rec.HISTORYBUCKETNAME||'/o/';
|
||||
gvLoggingEnabled := rec.LOGGINGENABLED;
|
||||
gvMinLogLevel := rec.MINLOGLEVEL;
|
||||
gvDefaultDateFormat := rec.DEFAULTDATEFORMAT;
|
||||
gvConsoleLoggingEnabled := NVL(rec.CONSOLELOGGINGENABLED, 'ON');
|
||||
end if;
|
||||
end loop;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
MSG_CONFIG_VARIABLE_NOT_SET := MSG_CONFIG_VARIABLE_NOT_SET_C
|
||||
||cgBL||' '||'No configuration found for environment_id='||pEnv||' in A_FILE_MANAGER_CONFIG table';
|
||||
LOG_PROCESS_EVENT(MSG_CONFIG_VARIABLE_NOT_SET, 'ERROR', 'pEnv='||pEnv);
|
||||
RAISE_APPLICATION_ERROR(CODE_CONFIG_VARIABLE_NOT_SET, MSG_CONFIG_VARIABLE_NOT_SET);
|
||||
WHEN OTHERS THEN
|
||||
vgMsgTmp := 'Unexpected error while initializing variables for environment: '||pEnv
|
||||
||cgBL||' '||'SQLERRM: '||SQLERRM;
|
||||
LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', 'pEnv='||pEnv);
|
||||
RAISE;
|
||||
END INIT_VARIABLES;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
FUNCTION GET_ERROR_MESSAGE(
|
||||
pCode PLS_INTEGER
|
||||
) RETURN VARCHAR2
|
||||
IS
|
||||
BEGIN
|
||||
RETURN Errors(pCode).message;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
LOG_PROCESS_EVENT('No error message found for pCode='||pCode , 'WARNING', 'pCode='||pCode);
|
||||
LOG_PROCESS_EVENT('Update ENV_MANAGER package header with new code.' , 'WARNING', 'pCode='||pCode);
|
||||
RETURN NULL;
|
||||
WHEN OTHERS THEN
|
||||
LOG_PROCESS_EVENT(MSG_UNKNOWN , 'ERROR', 'pCode='||pCode);
|
||||
RAISE ERR_UNKNOWN;
|
||||
END GET_ERROR_MESSAGE;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
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
|
||||
IS
|
||||
vFullErrorCore VARCHAR2(32000);
|
||||
vFullErrorMsg VARCHAR2(32000);
|
||||
BEGIN
|
||||
-- vgErrorMessage := SQLERRM|| cgBL;
|
||||
-- vgErrorStack := DBMS_UTILITY.FORMAT_ERROR_STACK;
|
||||
-- vgErrorBacktrace := DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;
|
||||
vFullErrorCore :='Error Message:'
|
||||
||cgBL|| SQLERRM|| cgBL
|
||||
||'-------------------------------------------------------'
|
||||
||cgBL||'Error Stack:'
|
||||
||cgBL|| DBMS_UTILITY.FORMAT_ERROR_STACK
|
||||
||'-------------------------------------------------------'
|
||||
||cgBL||'Error Backtrace:'
|
||||
||cgBL|| DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;
|
||||
-- vFullErrorCore := REGEXP_REPLACE (vFullErrorCore, pCode||': ', pCode||': '||GET_ERROR_MESSAGE(pCode) , 1, 1);
|
||||
IF (pFormat = 'TABLE') THEN
|
||||
vFullErrorMsg := vFullErrorCore;
|
||||
ELSE
|
||||
vFullErrorMsg := cgBL||'------------------------------------------------------+'
|
||||
||cgBL||vFullErrorCore
|
||||
||'------------------------------------------------------+';
|
||||
END IF;
|
||||
-- IF pSourceFileReceivedKey is not null THEN
|
||||
-- vFullErrorMsg := vFullErrorMsg ||cgBL||GET_DET_SOURCE_FILE_RECEIVED_INFO(pSourceFileReceivedKey,1,1,1);
|
||||
-- END IF;
|
||||
|
||||
RETURN vFullErrorMsg;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
LOG_PROCESS_EVENT(MSG_UNKNOWN , 'ERROR', 'pFormat='||pFormat);
|
||||
RETURN NULL;
|
||||
END GET_ERROR_STACK;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
FUNCTION FORMAT_PARAMETERS(
|
||||
pParameterList SYS.ODCIVARCHAR2LIST
|
||||
) RETURN VARCHAR2 IS
|
||||
vResult VARCHAR2(10000);
|
||||
BEGIN
|
||||
FOR i IN 1 .. pParameterList.COUNT LOOP
|
||||
-- dbms_output.put_line('pParameterList(i): '||pParameterList(i));
|
||||
if i < pParameterList.COUNT then vResult := vResult || replace(pParameterList(i), '''NULL''', 'NULL') ||' ,'|| cgBL;
|
||||
else vResult := vResult || replace(pParameterList(i), '''NULL''', 'NULL');
|
||||
end if;
|
||||
END LOOP;
|
||||
RETURN vResult;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
LOG_PROCESS_EVENT('Error while formating parameters.' , 'WARNING');
|
||||
RETURN NULL;
|
||||
END FORMAT_PARAMETERS;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
PROCEDURE LOG_PROCESS_EVENT (
|
||||
pLogMessage VARCHAR2
|
||||
,pLogLevel VARCHAR2 DEFAULT 'ERROR'
|
||||
,pParameters VARCHAR2 DEFAULT NULL
|
||||
,pProcessName VARCHAR2 DEFAULT 'FILE_MANAGER'
|
||||
) IS
|
||||
PRAGMA AUTONOMOUS_TRANSACTION;
|
||||
|
||||
vLoggingEnabled VARCHAR2(10);
|
||||
vMinLogLevel VARCHAR2(10);
|
||||
vCallStack VARCHAR2(10000);
|
||||
vProcedureName VARCHAR2(100);
|
||||
vProcedureLevel PLS_INTEGER;
|
||||
vTotalLines PLS_INTEGER;
|
||||
vCurrentLine PLS_INTEGER;
|
||||
|
||||
-- Map of priority level
|
||||
TYPE logLevelMap IS TABLE OF NUMBER INDEX BY VARCHAR2(10);
|
||||
vLogLevels logLevelMap;
|
||||
|
||||
BEGIN
|
||||
-- Prority logging level (higher -> more important)
|
||||
vLogLevels('DEBUG') := 1;
|
||||
vLogLevels('INFO') := 2;
|
||||
vLogLevels('WARNING') := 3;
|
||||
vLogLevels('ERROR') := 4;
|
||||
|
||||
-- Check id logging is TURN-OFF
|
||||
IF gvLoggingEnabled = 'OFF' THEN
|
||||
RETURN;
|
||||
END IF;
|
||||
-- Check logging level
|
||||
IF vLogLevels(pLogLevel) < vLogLevels(gvMinLogLevel) THEN
|
||||
RETURN;
|
||||
END IF;
|
||||
|
||||
vCallStack := DBMS_UTILITY.FORMAT_CALL_STACK;
|
||||
vProcedureName := REGEXP_SUBSTR(vCallStack, 'package body\s+\w+\.(\w+\.\w+)', 1, 2, NULL, 1);
|
||||
vTotalLines := REGEXP_COUNT(vCallStack, CHR(10)) + 1;
|
||||
vCurrentLine := REGEXP_COUNT(SUBSTR(vCallStack, 1, INSTR(vCallStack, vProcedureName) - 1), CHR(10)) + 1;
|
||||
vProcedureLevel := (vTotalLines - vCurrentLine + 1) - 3;
|
||||
vProcedureName := LPAD(vProcedureName, LENGTH(vProcedureName) + 2*vProcedureLevel, ' ');
|
||||
|
||||
INSERT INTO CT_MRDS.A_PROCESS_LOG (guid, username, osuser, machine, module, process_name, procedure_name, procedure_parameters, log_level, log_message)
|
||||
VALUES (guid, gvUsername, gvOsuser, gvMachine, gvModule, pProcessName, vProcedureName, pParameters, pLogLevel, pLogMessage);
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- Also output to console for immediate visibility (if enabled)
|
||||
IF gvConsoleLoggingEnabled = 'ON' THEN
|
||||
DBMS_OUTPUT.PUT_LINE('[' || TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') || '] [' || pLogLevel || '] ' || vProcedureName || ': ' || pLogMessage);
|
||||
END IF;
|
||||
|
||||
END LOG_PROCESS_EVENT;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
BEGIN
|
||||
INIT_ERRORS;
|
||||
guid := sys_guid();
|
||||
gvUsername := SYS_CONTEXT('USERENV', 'SESSION_USER');
|
||||
gvOsuser := SYS_CONTEXT('USERENV', 'OS_USER');
|
||||
gvMachine := SYS_CONTEXT('USERENV', 'HOST');
|
||||
gvModule := SYS_CONTEXT('USERENV', 'MODULE');
|
||||
|
||||
-- Get info about EnvironmentID. Without it package cannot proceed further.
|
||||
-- Information about environment is needed to get proper configuration values
|
||||
-- It can be set up in two different ways :
|
||||
-- 1. Set it on session level: execute DBMS_SESSION.SET_IDENTIFIER (client_id => 'dev');
|
||||
-- 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');
|
||||
-- Session level setup (1.) takes precedence over configuration level one (2.)
|
||||
|
||||
gvEnv := nvl(SYS_CONTEXT ('USERENV', 'CLIENT_IDENTIFIER'), GET_DEFAULT_ENV());
|
||||
if gvEnv is null then
|
||||
dbms_output.put_line(MSG_ENVIRONMENT_NOT_SET);
|
||||
LOG_PROCESS_EVENT(MSG_ENVIRONMENT_NOT_SET, 'ERROR');
|
||||
RAISE_APPLICATION_ERROR(CODE_ENVIRONMENT_NOT_SET, MSG_ENVIRONMENT_NOT_SET);
|
||||
else
|
||||
dbms_output.put_line('EnvironmentID set to: '||gvEnv);
|
||||
end if;
|
||||
|
||||
INIT_VARIABLES(pEnv => gvEnv);
|
||||
END ENV_MANAGER;
|
||||
|
||||
/
|
||||
@@ -0,0 +1,178 @@
|
||||
--MARS-770
|
||||
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
|
||||
select 'install_package_MarsGeneralRelease_MARS770_packages_2_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
|
||||
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 payload --CT_MRDS.WORKFLOW_MANAGER package
|
||||
--=============================================================================================================================
|
||||
|
||||
CREATE OR REPLACE EDITIONABLE PACKAGE "CT_MRDS"."WORKFLOW_MANAGER"
|
||||
IS
|
||||
|
||||
FUNCTION INIT_WORKFLOW(pServiceName IN VARCHAR2, pWorkflowRunId IN VARCHAR2, pWorkflowName in VARCHAR2)
|
||||
RETURN NUMBER;
|
||||
|
||||
PROCEDURE FINALISE_WORKFLOW(pWorkflowHistoryKey IN NUMBER, pWorkflowStatus IN VARCHAR2);
|
||||
PROCEDURE FINALISE_WORKFLOW(pWorkflowHistoryKey IN NUMBER, pServiceName IN VARCHAR2, pWorkflowStatus IN VARCHAR2);
|
||||
|
||||
FUNCTION INIT_TASK(pTaskRunId IN VARCHAR2, pTaskName in VARCHAR2, pWorkflowHistoryKey IN NUMBER)
|
||||
RETURN NUMBER;
|
||||
|
||||
PROCEDURE FINALISE_TASK(pTaskHistoryKey IN NUMBER, pTaskStatus IN VARCHAR2);
|
||||
|
||||
PROCEDURE STORE_TASK_SOURCE_INFO(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2, pNumRows IN NUMBER);
|
||||
|
||||
PROCEDURE STORE_TASK_TARGET_INFO(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2,
|
||||
pNumRowsApplied IN NUMBER, pNumRowsRejected IN NUMBER);
|
||||
|
||||
vpRunningStatus CT_MRDS.A_WORKFLOW_HISTORY.WORKFLOW_SUCCESSFUL%TYPE := 'Running';
|
||||
|
||||
--
|
||||
-- Set and get information on workflow level
|
||||
--
|
||||
PROCEDURE SET_WORKFLOW_PROPERTY(
|
||||
pWorkflowHistoryKey IN NUMBER
|
||||
,pServiceName IN VARCHAR2
|
||||
,pProperty IN VARCHAR2
|
||||
,pValue IN VARCHAR2
|
||||
);
|
||||
|
||||
FUNCTION GET_WORKFLOW_PROPERTY(
|
||||
pWorkflowHistoryKey IN NUMBER
|
||||
,pServiceName IN VARCHAR2
|
||||
,pProperty IN VARCHAR2)
|
||||
RETURN VARCHAR2;
|
||||
|
||||
END WORKFLOW_MANAGER;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE EDITIONABLE PACKAGE BODY "CT_MRDS"."WORKFLOW_MANAGER"
|
||||
IS
|
||||
|
||||
FUNCTION INIT_WORKFLOW(pServiceName IN VARCHAR2, pWorkflowRunId IN VARCHAR2, pWorkflowName in VARCHAR2)
|
||||
RETURN NUMBER
|
||||
IS
|
||||
vWorkflowHistoryKey NUMBER;
|
||||
BEGIN
|
||||
vWorkflowHistoryKey := A_WORKFLOW_HISTORY_KEY_SEQ.NEXTVAL;
|
||||
INSERT INTO CT_MRDS.A_WORKFLOW_HISTORY (SERVICE_NAME, A_WORKFLOW_HISTORY_KEY, ORCHESTRATION_RUN_ID,
|
||||
WORKFLOW_NAME, WORKFLOW_START, WORKFLOW_SUCCESSFUL)
|
||||
VALUES (pServiceName, vWorkflowHistoryKey, pWorkflowRunId,
|
||||
pWorkflowName, SYSTIMESTAMP, vpRunningStatus);
|
||||
|
||||
return vWorkflowHistoryKey;
|
||||
|
||||
END INIT_WORKFLOW;
|
||||
|
||||
|
||||
--
|
||||
-- Overload without service name for backward compatability, to be cleaned up later
|
||||
--
|
||||
PROCEDURE FINALISE_WORKFLOW(pWorkflowHistoryKey IN NUMBER, pWorkflowStatus IN VARCHAR2)
|
||||
IS
|
||||
BEGIN
|
||||
FINALISE_WORKFLOW(pWorkflowHistoryKey, NULL, pWorkflowStatus);
|
||||
END;
|
||||
|
||||
PROCEDURE FINALISE_WORKFLOW(pWorkflowHistoryKey IN NUMBER, pServiceName IN VARCHAR2, pWorkflowStatus IN VARCHAR2)
|
||||
IS
|
||||
BEGIN
|
||||
UPDATE CT_MRDS.A_WORKFLOW_HISTORY SET WORKFLOW_SUCCESSFUL = pWorkflowStatus,
|
||||
WORKFLOW_END = SYSTIMESTAMP
|
||||
WHERE A_WORKFLOW_HISTORY_KEY = pWorkflowHistoryKey
|
||||
AND SERVICE_NAME = NVL(pServiceName,SERVICE_NAME);
|
||||
END FINALISE_WORKFLOW;
|
||||
|
||||
|
||||
FUNCTION INIT_TASK(pTaskRunId IN VARCHAR2, pTaskName in VARCHAR2, pWorkflowHistoryKey IN NUMBER)
|
||||
RETURN NUMBER
|
||||
IS
|
||||
vTaskHistoryKey NUMBER;
|
||||
BEGIN
|
||||
vTaskHistoryKey := A_TASK_HISTORY_KEY_SEQ.NEXTVAL;
|
||||
INSERT INTO CT_MRDS.A_TASK_HISTORY (A_TASK_HISTORY_KEY, TASK_RUN_ID, A_WORKFLOW_HISTORY_KEY,
|
||||
TASK_NAME, TASK_START, TASK_SUCCESSFUL, SERVICE_NAME)
|
||||
VALUES (vTaskHistoryKey, pTaskRunId, pWorkflowHistoryKey,
|
||||
pTaskName, SYSTIMESTAMP, vpRunningStatus, 'ODS');
|
||||
|
||||
return vTaskHistoryKey;
|
||||
|
||||
END INIT_TASK;
|
||||
|
||||
|
||||
PROCEDURE FINALISE_TASK(pTaskHistoryKey IN NUMBER, pTaskStatus IN VARCHAR2)
|
||||
IS
|
||||
BEGIN
|
||||
UPDATE CT_MRDS.A_TASK_HISTORY SET TASK_SUCCESSFUL = pTaskStatus,
|
||||
TASK_END = SYSTIMESTAMP
|
||||
WHERE A_TASK_HISTORY_KEY = pTaskHistoryKey;
|
||||
END FINALISE_TASK;
|
||||
|
||||
PROCEDURE STORE_TASK_SOURCE_INFO(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2, pNumRows IN NUMBER)
|
||||
IS
|
||||
BEGIN
|
||||
INSERT INTO CT_MRDS.A_TASK_HISTORY_SOURCE (A_TASK_HISTORY_SOURCE_KEY, A_TASK_HISTORY_KEY,
|
||||
SOURCE_NAME, ROW_COUNT)
|
||||
VALUES (A_TASK_HISTORY_SOURCE_KEY_SEQ.NEXTVAL, pTaskHistoryKey,
|
||||
pSourceName, pNumRows);
|
||||
COMMIT;
|
||||
END;
|
||||
|
||||
PROCEDURE STORE_TASK_TARGET_INFO(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2,
|
||||
pNumRowsApplied IN NUMBER, pNumRowsRejected IN NUMBER)
|
||||
IS
|
||||
BEGIN
|
||||
INSERT INTO CT_MRDS.A_TASK_HISTORY_TARGET (A_TASK_HISTORY_TARGET_KEY, A_TASK_HISTORY_KEY,
|
||||
TARGET_NAME, ROW_COUNT_APPLIED, ROW_COUNT_REJECTED)
|
||||
VALUES (A_TASK_HISTORY_TARGET_KEY_SEQ.NEXTVAL, pTaskHistoryKey,
|
||||
pSourceName, pNumRowsApplied, pNumRowsRejected);
|
||||
COMMIT;
|
||||
END;
|
||||
|
||||
PROCEDURE SET_WORKFLOW_PROPERTY(
|
||||
pWorkflowHistoryKey IN NUMBER
|
||||
,pServiceName IN VARCHAR2
|
||||
,pProperty IN VARCHAR2
|
||||
,pValue IN VARCHAR2
|
||||
) IS
|
||||
BEGIN
|
||||
INSERT INTO CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY (A_WORKFLOW_HISTORY_KEY, SERVICE_NAME, PROPERTY, VALUE)
|
||||
VALUES (pWorkflowHistoryKey, pServiceName, pProperty, pValue);
|
||||
END;
|
||||
|
||||
FUNCTION GET_WORKFLOW_PROPERTY(
|
||||
pWorkflowHistoryKey IN NUMBER
|
||||
,pServiceName IN VARCHAR2
|
||||
,pProperty IN VARCHAR2
|
||||
) RETURN VARCHAR2
|
||||
IS
|
||||
vValue CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY.VALUE%TYPE;
|
||||
BEGIN
|
||||
SELECT VALUE
|
||||
INTO vValue
|
||||
FROM CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY
|
||||
WHERE A_WORKFLOW_HISTORY_KEY = pWorkflowHistoryKey
|
||||
AND SERVICE_NAME = pServiceName
|
||||
AND PROPERTY = pProperty;
|
||||
|
||||
RETURN vValue;
|
||||
END;
|
||||
|
||||
END WORKFLOW_MANAGER;
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,475 @@
|
||||
--MARS-770
|
||||
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
|
||||
select 'install_package_MarsGeneralRelease_MARS770_packages_4_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
|
||||
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 payload --CT_MRDS.FILE_ARCHIVER package
|
||||
--=============================================================================================================================
|
||||
|
||||
CREATE OR REPLACE EDITIONABLE 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
|
||||
**/
|
||||
|
||||
cgBL CONSTANT VARCHAR2(2) := ENV_MANAGER.cgBL;
|
||||
|
||||
/**
|
||||
* @name HISTORISE_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).
|
||||
**/
|
||||
PROCEDURE HISTORISE_TABLE_DATA (
|
||||
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||
);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @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
|
||||
);
|
||||
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE EDITIONABLE PACKAGE BODY "CT_MRDS"."FILE_ARCHIVER"
|
||||
AS
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
FUNCTION GET_TABLE_STAT(pSourceFileConfigKey IN NUMBER)
|
||||
RETURN CT_MRDS.A_TABLE_STAT%ROWTYPE
|
||||
IS
|
||||
vTableStat CT_MRDS.A_TABLE_STAT%ROWTYPE;
|
||||
vParameters CT_MRDS.A_PROCESS_LOG.PROCEDURE_PARAMETERS%TYPE;
|
||||
vCount PLS_INTEGER;
|
||||
vSourceFileType CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_TYPE%TYPE;
|
||||
|
||||
BEGIN
|
||||
vParameters := ENV_MANAGER.FORMAT_PARAMETERS(SYS.ODCIVARCHAR2LIST('pSourceFileConfigKey => '||nvl(to_char(pSourceFileConfigKey),NULL)));
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Start','DEBUG', vParameters);
|
||||
SELECT count(*) , min(SOURCE_FILE_TYPE)
|
||||
INTO vCount, vSourceFileType
|
||||
FROM CT_MRDS.A_TABLE_STAT s
|
||||
JOIN CT_MRDS.A_SOURCE_FILE_CONFIG c
|
||||
ON s.A_SOURCE_FILE_CONFIG_KEY = c.A_SOURCE_FILE_CONFIG_KEY
|
||||
WHERE s.A_SOURCE_FILE_CONFIG_KEY = pSourceFileConfigKey;
|
||||
|
||||
IF vCount=0 and vSourceFileType='INPUT' THEN
|
||||
GATHER_TABLE_STAT(pSourceFileConfigKey);
|
||||
END IF;
|
||||
|
||||
BEGIN
|
||||
SELECT *
|
||||
INTO vTableStat
|
||||
FROM CT_MRDS.A_TABLE_STAT
|
||||
WHERE A_SOURCE_FILE_CONFIG_KEY = pSourceFileConfigKey;
|
||||
-- EXCEPTION
|
||||
-- WHEN NO_DATA_FOUND THEN
|
||||
--
|
||||
END;
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('End','DEBUG',vParameters);
|
||||
RETURN vTableStat;
|
||||
|
||||
END GET_TABLE_STAT;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
PROCEDURE HISTORISE_TABLE_DATA (
|
||||
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||
)
|
||||
IS
|
||||
vSourceFileConfig CT_MRDS.A_SOURCE_FILE_CONFIG%ROWTYPE;
|
||||
vTableStat CT_MRDS.A_TABLE_STAT%ROWTYPE;
|
||||
vQuery VARCHAR2(4000);
|
||||
vTableName VARCHAR2(200);
|
||||
vUri VARCHAR2(1000);
|
||||
vfiles T_FILENAMES;
|
||||
vFilename VARCHAR2(300);
|
||||
vOperationId NUMBER := -1;
|
||||
vParameters CT_MRDS.A_PROCESS_LOG.PROCEDURE_PARAMETERS%TYPE;
|
||||
vHistorisationTriggeredBy VARCHAR2(60); -- Possible values: FILES_COUNT, ROWS_COUNT, BYTES_SUM
|
||||
vUserLoadOperations USER_LOAD_OPERATIONS%ROWTYPE;
|
||||
vProcessControlStatus VARCHAR2(60) := 'OK';
|
||||
|
||||
BEGIN
|
||||
vParameters := ENV_MANAGER.FORMAT_PARAMETERS(SYS.ODCIVARCHAR2LIST('pSourceFileConfigKey => '||nvl(to_char(pSourceFileConfigKey), 'NULL')));
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Start','INFO', vParameters);
|
||||
|
||||
vSourceFileConfig := FILE_MANAGER.GET_SOURCE_FILE_CONFIG(pSourceFileConfigKey => pSourceFileConfigKey);
|
||||
vTableStat := GET_TABLE_STAT(pSourceFileConfigKey => pSourceFileConfigKey);
|
||||
|
||||
if vSourceFileConfig.SOURCE_FILE_TYPE <> 'INPUT' then
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.MSG_NOT_INPUT_SOURCE_FILE_TYPE, 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_NOT_INPUT_SOURCE_FILE_TYPE, ENV_MANAGER.MSG_NOT_INPUT_SOURCE_FILE_TYPE);
|
||||
end if;
|
||||
|
||||
if vTableStat.created < sysdate-(vSourceFileConfig.HOURS_TO_EXPIRE_STATISTICS/24) then
|
||||
GATHER_TABLE_STAT(pSourceFileConfigKey => pSourceFileConfigKey);
|
||||
vTableStat := GET_TABLE_STAT(pSourceFileConfigKey => pSourceFileConfigKey);
|
||||
end if;
|
||||
|
||||
if vTableStat.OVER_HIST_THRESOLD_FILE_COUNT >= vSourceFileConfig.FILES_COUNT_OVER_HISTORY_THRESHOLD then vHistorisationTriggeredBy := 'FILES_COUNT';
|
||||
elsif vTableStat.OVER_HIST_THRESOLD_ROW_COUNT >= vSourceFileConfig.ROWS_COUNT_OVER_HISTORY_THRESHOLD then vHistorisationTriggeredBy := vHistorisationTriggeredBy||', ROWS_COUNT';
|
||||
elsif vTableStat.OVER_HIST_THRESOLD_SIZE >= vSourceFileConfig.BYTES_SUM_OVER_HISTORY_THRESHOLD then vHistorisationTriggeredBy := vHistorisationTriggeredBy||', BYTES_SUM';
|
||||
else ENV_MANAGER.LOG_PROCESS_EVENT('Non of historisation triggers reached','INFO');
|
||||
end if;
|
||||
|
||||
if LENGTH(vHistorisationTriggeredBy)>0 THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Historisation Triggered By: '||vHistorisationTriggeredBy,'INFO');
|
||||
vTableName := DBMS_ASSERT.SCHEMA_NAME(vSourceFileConfig.ODS_SCHEMA_NAME) || '.'||vSourceFileConfig.A_SOURCE_KEY||'_'||DBMS_ASSERT.simple_sql_name(vSourceFileConfig.TABLE_ID)||'_ODS';
|
||||
vQuery := '
|
||||
select t_filename(
|
||||
file$name
|
||||
,file$path
|
||||
, to_char(h.workflow_start,''yyyy'')
|
||||
, to_char(h.workflow_start,''mm'')
|
||||
)
|
||||
|
||||
from '||vTableName||' s
|
||||
join CT_MRDS.a_workflow_history h
|
||||
on s.a_workflow_history_key = h.a_workflow_history_key
|
||||
where extract(day from (systimestamp - workflow_start)) > '||vSourceFileConfig.DAYS_FOR_HISTORY_THRESHOLD
|
||||
;
|
||||
|
||||
-- Get all files that will be historised into "vfiles" collection ("regular data files")
|
||||
execute immediate vQuery bulk collect into vfiles;
|
||||
|
||||
-- Start EXPORT "regular data files" to parquet and DROP "csv"
|
||||
FOR ym_loop IN (select distinct year, month from table(vfiles) order by 1,2) LOOP
|
||||
dbms_output.put_line('year: '||ym_loop.year||' - '||'month: '||ym_loop.month);
|
||||
vQuery:=
|
||||
'select
|
||||
s.*
|
||||
-- ,r.partition_year
|
||||
-- ,r.partition_month
|
||||
from '|| vTableName ||' s
|
||||
join CT_MRDS.A_SOURCE_FILE_RECEIVED r
|
||||
on s.file$name = r.source_file_name
|
||||
and r.a_source_file_config_key = '||pSourceFileConfigKey||'
|
||||
and r.partition_year='''||ym_loop.year||'''
|
||||
and r.partition_month='''||ym_loop.month||'''
|
||||
and r.PROCESSING_STATUS = ''INGESTED''
|
||||
'
|
||||
;
|
||||
vUri := FILE_MANAGER.GET_BUCKET_URI('HISTORY')||vSourceFileConfig.A_SOURCE_KEY||'/'||vSourceFileConfig.TABLE_ID||'/YEAR='||ym_loop.year||'/MONTH='||ym_loop.month||'/';
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Start Historization for YEAR_MONTH: '||ym_loop.year||'_'||ym_loop.month ,'INFO');
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Parameter for DBMS_CLOUD.EXPORT_DATA => file_uri_list' ,'DEBUG',vUri);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Parameter for DBMS_CLOUD.EXPORT_DATA => query' ,'DEBUG',vQuery);
|
||||
|
||||
|
||||
|
||||
BEGIN
|
||||
DBMS_CLOUD.EXPORT_DATA(
|
||||
credential_name => ENV_MANAGER.gvCredentialName,
|
||||
file_uri_list => vUri||'d' ,
|
||||
format => json_object('type' value 'parquet'),
|
||||
query => vQuery,
|
||||
operation_id => vOperationId
|
||||
);
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
vProcessControlStatus :='EXPORT_FAILURE';
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_EXP_DATA_FOR_HIST_FAILED, ENV_MANAGER.MSG_EXP_DATA_FOR_HIST_FAILED);
|
||||
|
||||
END;
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('vOperationId of export: '||vOperationId,'DEBUG');
|
||||
|
||||
-- Get USER_LOAD_OPERATIONS info
|
||||
select *
|
||||
into vUserLoadOperations
|
||||
from USER_LOAD_OPERATIONS
|
||||
where id = vOperationId;
|
||||
|
||||
IF vUserLoadOperations.STATUS <>'COMPLETED' THEN
|
||||
ENV_MANAGER.MSG_EXP_DATA_FOR_HIST_FAILED := ENV_MANAGER.MSG_EXP_DATA_FOR_HIST_FAILED
|
||||
||cgBL|| ' Export ended with status '||vUserLoadOperations.STATUS;
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_EXP_DATA_FOR_HIST_FAILED, ENV_MANAGER.MSG_EXP_DATA_FOR_HIST_FAILED);
|
||||
ELSIF vUserLoadOperations.STATUS = 'COMPLETED' and vUserLoadOperations.ROWS_LOADED = 0 THEN
|
||||
ENV_MANAGER.MSG_EXP_DATA_FOR_HIST_FAILED := ENV_MANAGER.MSG_EXP_DATA_FOR_HIST_FAILED
|
||||
||cgBL|| ' Zero rows were exported.';
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_EXP_DATA_FOR_HIST_FAILED, ENV_MANAGER.MSG_EXP_DATA_FOR_HIST_FAILED);
|
||||
ELSE
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Data exported to historization file for YEAR_MONTH: 2025_01','INFO', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(FILE_MANAGER.GET_DET_USER_LOAD_OPERATIONS (pOperationId => vOperationId),'DEBUG', vParameters);
|
||||
END IF;
|
||||
|
||||
SELECT
|
||||
object_name
|
||||
into vFilename
|
||||
from DBMS_CLOUD.LIST_OBJECTS(
|
||||
credential_name => 'OCI$RESOURCE_PRINCIPAL',
|
||||
location_uri => vUri)
|
||||
where TO_UTC_TIMESTAMP_TZ(REGEXP_REPLACE(object_name, '.*(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(\d{6})Z\.parquet$', '\1-\2-\3T\4:\5:\6.\7'))
|
||||
between vUserLoadOperations.START_TIME
|
||||
and vUserLoadOperations.UPDATE_TIME
|
||||
;
|
||||
|
||||
-- Try to drop EXPORTED FILES ("regular data files")
|
||||
BEGIN
|
||||
FOR f in (select filename, pathname from table(vfiles) where year = ym_loop.year and month = ym_loop.month) loop
|
||||
|
||||
-- first change of status
|
||||
BEGIN
|
||||
UPDATE CT_MRDS.A_SOURCE_FILE_RECEIVED r
|
||||
SET PROCESSING_STATUS = 'HISTORISED'
|
||||
,HIST_FILE_NAME = vUri||vFilename
|
||||
WHERE r.a_source_file_config_key= pSourceFileConfigKey
|
||||
AND r.source_file_name = f.filename
|
||||
AND r.processing_status = 'INGESTED'
|
||||
;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
vProcessControlStatus := 'CHANGE_STATUS_TO_HISTORISED_FAILURE';
|
||||
END;
|
||||
EXIT WHEN vProcessControlStatus = 'CHANGE_STATUS_TO_HISTORISED_FAILURE';
|
||||
|
||||
-- move file to trash before dropping
|
||||
BEGIN
|
||||
DBMS_CLOUD.MOVE_OBJECT(source_credential_name => ENV_MANAGER.gvCredentialName,
|
||||
source_object_uri => f.pathname||'/'||f.filename,
|
||||
target_object_uri => replace(f.pathname,'ODS','TRASH')||'/'||f.filename,
|
||||
target_credential_name => ENV_MANAGER.gvCredentialName
|
||||
);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('File moved to TRASH.','DEBUG', f.pathname||'/'||f.filename);
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Failed to move file to TRASH.','ERROR', f.pathname||'/'||f.filename);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
rollback;
|
||||
vProcessControlStatus := 'MOVE_FILE_TO_TRASH_FAILURE';
|
||||
END;
|
||||
EXIT WHEN vProcessControlStatus = 'MOVE_FILE_TO_TRASH_FAILURE';
|
||||
commit;
|
||||
END LOOP;
|
||||
|
||||
--------------------------------------------------------------------
|
||||
-- IF All goes fine till this point, we drop files from TRASH (if not then ROLLBACK PART)
|
||||
IF vProcessControlStatus = 'OK' THEN
|
||||
FOR f in (select filename, pathname from table(vfiles) where year = ym_loop.year and month = ym_loop.month) LOOP
|
||||
--Drop file from TRASH
|
||||
DBMS_CLOUD.DELETE_OBJECT(credential_name => ENV_MANAGER.gvCredentialName,
|
||||
object_uri => replace(f.pathname,'ODS','TRASH')||'/'||f.filename);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('File dropped from TRASH.','DEBUG', f.pathname||'/'||f.filename);
|
||||
END LOOP;
|
||||
|
||||
--ROLLBACK PART
|
||||
--ROLLBACK PROCESS in case of FAILURE (restore files from TRASH)
|
||||
ELSIF vProcessControlStatus = 'MOVE_FILE_TO_TRASH_FAILURE' THEN
|
||||
FOR f in ( SELECT vf.filename, vf.pathname
|
||||
FROM TABLE(vfiles) vf
|
||||
JOIN CT_MRDS.A_SOURCE_FILE_RECEIVED r
|
||||
ON r.source_file_name = vf.filename
|
||||
AND r.a_source_file_config_key = pSourceFileConfigKey
|
||||
AND r.PROCESSING_STATUS = 'HISTORISED'
|
||||
AND vf.year = ym_loop.year
|
||||
AND vf.month = ym_loop.month
|
||||
) LOOP
|
||||
BEGIN
|
||||
DBMS_CLOUD.MOVE_OBJECT(source_credential_name => ENV_MANAGER.gvCredentialName,
|
||||
source_object_uri => replace(f.pathname,'ODS','TRASH')||'/'||f.filename,
|
||||
target_object_uri => f.pathname||'/'||f.filename,
|
||||
target_credential_name => ENV_MANAGER.gvCredentialName
|
||||
);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('File restored from TRASH.','DEBUG', f.pathname||'/'||f.filename);
|
||||
|
||||
UPDATE CT_MRDS.A_SOURCE_FILE_RECEIVED r
|
||||
SET PROCESSING_STATUS = 'INGESTED'
|
||||
,HIST_FILE_NAME = NULL
|
||||
WHERE r.a_source_file_config_key = pSourceFileConfigKey
|
||||
AND r.source_file_name = f.filename
|
||||
;
|
||||
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Failed to restore file from TRASH.','ERROR', replace(f.pathname,'ODS','TRASH')||'/'||f.filename);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
vProcessControlStatus := 'RESTORE_FILE_FROM_TRASH_FAILURE';
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
DBMS_CLOUD.DELETE_OBJECT(credential_name => ENV_MANAGER.gvCredentialName,
|
||||
object_uri => vUri||vFilename);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('ROLLBACK operation: Historization PARQUET file dropped.','DEBUG', vUri||vFilename);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_MOVE_FILE_TO_TRASH_FAILED, ENV_MANAGER.MSG_MOVE_FILE_TO_TRASH_FAILED);
|
||||
|
||||
ELSIF vProcessControlStatus = 'CHANGE_STATUS_TO_HISTORISED_FAILURE' THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.MSG_CHANGE_STAT_TO_HISTORISED_FAILED, 'ERROR', vParameters);
|
||||
DBMS_CLOUD.DELETE_OBJECT(credential_name => ENV_MANAGER.gvCredentialName,
|
||||
object_uri => vUri||vFilename);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Historization PARQUET file dropped.','DEBUG', vUri||vFilename);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_CHANGE_STAT_TO_HISTORISED_FAILED, ENV_MANAGER.MSG_CHANGE_STAT_TO_HISTORISED_FAILED);
|
||||
|
||||
ELSIF vProcessControlStatus = 'RESTORE_FILE_FROM_TRASH_FAILURE' THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Some files were not restored from TRASH. Check A_PROCESS_LOG table for details','ERROR');
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_RESTORE_FILE_FROM_TRASH, ENV_MANAGER.MSG_RESTORE_FILE_FROM_TRASH);
|
||||
END IF;
|
||||
|
||||
EXCEPTION
|
||||
WHEN ENV_MANAGER.ERR_CHANGE_STAT_TO_HISTORISED_FAILED THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_CHANGE_STAT_TO_HISTORISED_FAILED, ENV_MANAGER.MSG_CHANGE_STAT_TO_HISTORISED_FAILED);
|
||||
|
||||
WHEN ENV_MANAGER.ERR_MOVE_FILE_TO_TRASH_FAILED THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_MOVE_FILE_TO_TRASH_FAILED, ENV_MANAGER.MSG_MOVE_FILE_TO_TRASH_FAILED);
|
||||
|
||||
WHEN ENV_MANAGER.ERR_RESTORE_FILE_FROM_TRASH THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_RESTORE_FILE_FROM_TRASH, ENV_MANAGER.MSG_RESTORE_FILE_FROM_TRASH);
|
||||
|
||||
WHEN OTHERS THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Error during historization process','ERROR');
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_DROP_EXPORTED_FILES_FAILED, ENV_MANAGER.MSG_DROP_EXPORTED_FILES_FAILED);
|
||||
END;
|
||||
-- END of "Try to drop EXPORTED FILES"
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('All historized files had been dropped.','INFO');
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('End Historization for YEAR_MONTH: '||ym_loop.year||'_'||ym_loop.month ,'INFO');
|
||||
END LOOP; --ym_loop end (YEAR_MONTH)
|
||||
|
||||
COMMIT;
|
||||
|
||||
ELSE
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Non of historization thresholds reached. Skip historization.'||vHistorisationTriggeredBy,'INFO');
|
||||
END IF;
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('End','INFO',vParameters);
|
||||
EXCEPTION
|
||||
WHEN ENV_MANAGER.ERR_NOT_INPUT_SOURCE_FILE_TYPE THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.MSG_NOT_INPUT_SOURCE_FILE_TYPE , 'ERROR', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_NOT_INPUT_SOURCE_FILE_TYPE, ENV_MANAGER.GET_ERROR_STACK(pFormat => 'OUTPUT', pCode=> SQLCODE));
|
||||
|
||||
WHEN ENV_MANAGER.ERR_EXP_DATA_FOR_HIST_FAILED THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.MSG_EXP_DATA_FOR_HIST_FAILED , 'ERROR', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_EXP_DATA_FOR_HIST_FAILED, ENV_MANAGER.GET_ERROR_STACK(pFormat => 'OUTPUT', pCode=> SQLCODE));
|
||||
|
||||
WHEN ENV_MANAGER.ERR_CHANGE_STAT_TO_HISTORISED_FAILED THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_CHANGE_STAT_TO_HISTORISED_FAILED, ENV_MANAGER.GET_ERROR_STACK(pFormat => 'OUTPUT', pCode=> SQLCODE));
|
||||
|
||||
WHEN ENV_MANAGER.ERR_MOVE_FILE_TO_TRASH_FAILED THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_MOVE_FILE_TO_TRASH_FAILED, ENV_MANAGER.GET_ERROR_STACK(pFormat => 'OUTPUT', pCode=> SQLCODE));
|
||||
|
||||
WHEN OTHERS THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.MSG_UNKNOWN , 'ERROR', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_UNKNOWN, ENV_MANAGER.GET_ERROR_STACK(pFormat => 'OUTPUT', pCode=> SQLCODE));
|
||||
|
||||
END HISTORISE_TABLE_DATA;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
PROCEDURE GATHER_TABLE_STAT (
|
||||
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||
) IS
|
||||
vParameters CT_MRDS.A_PROCESS_LOG.PROCEDURE_PARAMETERS%TYPE;
|
||||
vStats CT_MRDS.A_TABLE_STAT%ROWTYPE;
|
||||
vSourceFileConfig CT_MRDS.A_SOURCE_FILE_CONFIG%ROWTYPE;
|
||||
vTableName VARCHAR2(200);
|
||||
vQuery VARCHAR2(32000);
|
||||
BEGIN
|
||||
vParameters := ENV_MANAGER.FORMAT_PARAMETERS(SYS.ODCIVARCHAR2LIST('pSourceFileConfigKey => '||nvl(to_char(pSourceFileConfigKey), 'NULL')));
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Start','INFO', vParameters);
|
||||
vSourceFileConfig := FILE_MANAGER.GET_SOURCE_FILE_CONFIG(pSourceFileConfigKey => pSourceFileConfigKey);
|
||||
|
||||
vTableName := DBMS_ASSERT.SCHEMA_NAME(vSourceFileConfig.ODS_SCHEMA_NAME) || '.'||vSourceFileConfig.A_SOURCE_KEY||'_'||DBMS_ASSERT.simple_sql_name(vSourceFileConfig.TABLE_ID)||'_ODS';
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('vTableName','DEBUG',vTableName);
|
||||
vQuery :=
|
||||
'with tmp as (
|
||||
select
|
||||
s.*
|
||||
,file$name as filename
|
||||
,h.workflow_start
|
||||
, to_char(h.workflow_start,''yyyy'') as year
|
||||
, to_char(h.workflow_start,''mm'') as month
|
||||
from '||vTableName||' s
|
||||
join CT_MRDS.a_workflow_history h
|
||||
on s.a_workflow_history_key = h.a_workflow_history_key
|
||||
)
|
||||
, tmp_gr as (
|
||||
select
|
||||
filename, count(*) as row_count_per_file, min(workflow_start) as workflow_start
|
||||
from tmp
|
||||
group by filename
|
||||
)
|
||||
select
|
||||
NULL as A_TABLE_STAT_KEY
|
||||
,'||pSourceFileConfigKey||' as A_SOURCE_FILE_CONFIG_KEY
|
||||
,'''||vTableName||''' as TABLE_NAME
|
||||
,count(*) as FILE_COUNT
|
||||
,sum(case when extract(day from (systimestamp - workflow_start)) > '||vSourceFileConfig.DAYS_FOR_HISTORY_THRESHOLD||' then 1 else 0 end) as OLD_FILE_COUNT
|
||||
,sum (row_count_per_file) as ROW_COUNT
|
||||
,sum(case when extract(day from (systimestamp - workflow_start)) > '||vSourceFileConfig.DAYS_FOR_HISTORY_THRESHOLD||' then row_count_per_file else 0 end) as OLD_ROW_COUNT
|
||||
,sum(r.bytes) as BYTES
|
||||
,sum(case when extract(day from (systimestamp - workflow_start)) > '||vSourceFileConfig.DAYS_FOR_HISTORY_THRESHOLD||' then r.bytes else 0 end) as OLD_BYTES
|
||||
,'||vSourceFileConfig.DAYS_FOR_HISTORY_THRESHOLD||' as DAYS_FOR_HISTORY_THRESHOLD
|
||||
,systimestamp as CREATED
|
||||
from tmp_gr t
|
||||
join (SELECT * from DBMS_CLOUD.LIST_OBJECTS(
|
||||
credential_name => '''||ENV_MANAGER.gvCredentialName||''',
|
||||
location_uri => FILE_MANAGER.GET_BUCKET_URI(''ODS'')||''ODS/'||vSourceFileConfig.A_SOURCE_KEY||'/'||vSourceFileConfig.TABLE_ID||'/''
|
||||
)
|
||||
) r
|
||||
on t.filename = r.object_name'
|
||||
;
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('vQuery','DEBUG',vQuery);
|
||||
execute immediate vQuery into vStats;
|
||||
|
||||
vStats.A_TABLE_STAT_KEY := CT_MRDS.A_TABLE_STAT_KEY_SEQ.NEXTVAL;
|
||||
insert into A_TABLE_STAT_HIST values vStats;
|
||||
delete from A_TABLE_STAT where A_SOURCE_FILE_CONFIG_KEY = pSourceFileConfigKey;
|
||||
insert into A_TABLE_STAT values vStats;
|
||||
COMMIT;
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('End','INFO',vParameters);
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.MSG_UNKNOWN , 'ERROR', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_UNKNOWN, ENV_MANAGER.GET_ERROR_STACK(pFormat => 'OUTPUT', pCode=> SQLCODE));
|
||||
END GATHER_TABLE_STAT;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
END;
|
||||
@@ -0,0 +1,25 @@
|
||||
--MARS-770
|
||||
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
|
||||
select 'install_package_MarsGeneralRelease_MARS770_packages_4_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
|
||||
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 payload --CT_MRDS.FILE_ARCHIVER package
|
||||
--=============================================================================================================================
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
--MARS-770
|
||||
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
|
||||
select 'install_package_MarsGeneralRelease_MARS770_prd_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
|
||||
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 payload prd specific part
|
||||
--=============================================================================================================================
|
||||
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('default', 'EnvironmentID', 'prd', '');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('prd', 'Region', 'eu-frankfurt-1', 'OCI region for prd environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('prd', 'NameSpace', 'frcnomajoc7v', 'OCI namespace for prd environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('prd', 'InboxBucketName', 'mrds_inbox_prd', 'Name of the inbox bucket for prd environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('prd', 'DataBucketName', 'mrds_data_prd', 'Name of the data bucket for prd environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('prd', 'HistoryBucketName', 'mrds_hist_prd', 'Name of the history bucket for prd environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('prd', 'CredentialName', 'OCI$RESOURCE_PRINCIPAL', 'Name of the credential for prd environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('prd', 'LoggingEnabled', 'ON', 'Enable logging for prd environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('prd', 'MinLogLevel', 'DEBUG', 'Minimum logging level for prd environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('prd', 'DefaultDateFormat', 'DD/MM/YYYY HH24:MI:SS', 'Default date format for prd environment');
|
||||
COMMIT;
|
||||
@@ -0,0 +1,250 @@
|
||||
--MARS-770
|
||||
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
|
||||
select 'install_package_MarsGeneralRelease_tables_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
|
||||
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 payload
|
||||
--=============================================================================================================================
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_PROCESS_LOG" (
|
||||
a_process_log_key NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||
guid VARCHAR2(32),
|
||||
Username VARCHAR2(128),
|
||||
Osuser VARCHAR2(128),
|
||||
Machine VARCHAR2(64),
|
||||
Module VARCHAR2(64),
|
||||
process_name VARCHAR2(200),
|
||||
procedure_name VARCHAR2(200),
|
||||
procedure_parameters VARCHAR2(20000),
|
||||
log_level VARCHAR2(10), -- DEBUG, INFO, WARNING, ERROR
|
||||
log_message VARCHAR2(4000),
|
||||
log_timestamp TIMESTAMP DEFAULT SYSTIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_CASPER_FILEVAULT" (
|
||||
"A_WORKFLOW_HISTORY_KEY" NUMBER(28,0),
|
||||
"WLA_RUN_ID" NUMBER(28,0),
|
||||
"WORKFLOW_NAME" CHAR(16 BYTE),
|
||||
"FILENAME" VARCHAR2(250 CHAR),
|
||||
"STATUS" VARCHAR2(30 CHAR),
|
||||
"FILESIZE" NUMBER(28,0),
|
||||
"FILE_ID" NUMBER(28,0),
|
||||
"IS_TEST" VARCHAR2(5 CHAR),
|
||||
"REFERENCE_TIME" TIMESTAMP (6)
|
||||
);
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_TASK_HISTORY" (
|
||||
"A_TASK_HISTORY_KEY" NUMBER(38,0),
|
||||
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||
"TASK_RUN_ID" VARCHAR2(255 BYTE),
|
||||
"TASK_NAME" VARCHAR2(255 BYTE),
|
||||
"TASK_START" TIMESTAMP (6),
|
||||
"TASK_END" TIMESTAMP (6),
|
||||
"TASK_SUCCESSFUL" VARCHAR2(200 BYTE),
|
||||
"SERVICE_NAME" VARCHAR2(25 BYTE)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE CT_MRDS.A_TASK_HISTORY IS 'This table logs subprocesses and their execution details.';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY.A_TASK_HISTORY_KEY IS 'Surrogate key for logged subprocesses';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY.A_WORKFLOW_HISTORY_KEY IS 'Technical key to identify a load operation. Generated with Oracle sequence "CT_MRDS.SA_TASK_HISTORY_KEY_SEQ"';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY.TASK_RUN_ID IS 'Unique identifier for the task run';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY.TASK_NAME IS 'Mapping name of the logged subprocess';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY.TASK_START IS 'Start time of the subprocess';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY.TASK_END IS 'End time of the subprocess';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY.TASK_SUCCESSFUL IS 'Indicates that the subprocess completed successfully. Allowed values are ''RUNNING'', ''FAILED'', and ''SUCCESS''.';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY.SERVICE_NAME IS 'Database of reference';
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_TASK_HISTORY_SOURCE" (
|
||||
"A_TASK_HISTORY_SOURCE_KEY" NUMBER(38,0),
|
||||
"A_TASK_HISTORY_KEY" NUMBER(38,0),
|
||||
"A_WORKFLOW_HISTORY_SOURCE_KEY" NUMBER(38,0),
|
||||
"SOURCE_NAME" VARCHAR2(255 BYTE),
|
||||
"ROW_COUNT" NUMBER(38,0),
|
||||
"SERVICE_NAME" VARCHAR2(25 BYTE)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE CT_MRDS.A_TASK_HISTORY_SOURCE IS 'This table logs details of data sources used in load processes.';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_SOURCE.A_TASK_HISTORY_SOURCE_KEY IS 'Technical primary key';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_SOURCE.A_TASK_HISTORY_KEY IS 'Foreign key referencing the subprocess delivering to the target';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_SOURCE.A_WORKFLOW_HISTORY_SOURCE_KEY IS 'Technical key for the workflow history source';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_SOURCE.SOURCE_NAME IS 'Name of the source used in the load process';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_SOURCE.ROW_COUNT IS 'Number of rows read from the source during the load process';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_SOURCE.SERVICE_NAME IS 'Database of reference';
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_TASK_HISTORY_TARGET" (
|
||||
"A_TASK_HISTORY_TARGET_KEY" NUMBER(38,0),
|
||||
"A_TASK_HISTORY_KEY" NUMBER(38,0),
|
||||
"TARGET_NAME" VARCHAR2(255 BYTE),
|
||||
"ROW_COUNT_APPLIED" NUMBER(38,0),
|
||||
"ROW_COUNT_REJECTED" NUMBER(38,0),
|
||||
"LOAD_SUCCESSFUL" CHAR(1 CHAR),
|
||||
"SERVICE_NAME" VARCHAR2(25 BYTE)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE CT_MRDS.A_TASK_HISTORY_TARGET IS 'This table logs details of target data written during load processes.';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_TARGET.A_TASK_HISTORY_TARGET_KEY IS 'Technical primary key';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_TARGET.A_TASK_HISTORY_KEY IS 'Foreign key referencing the subprocess delivering to the target';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_TARGET.TARGET_NAME IS 'Name of the target where data is written during the load process';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_TARGET.ROW_COUNT_APPLIED IS 'Number of rows successfully applied (written to) the DWH target table during the load process';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_TARGET.ROW_COUNT_REJECTED IS 'Number of rows rejected (NOT written to) the DWH target table during the load process';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_TARGET.LOAD_SUCCESSFUL IS 'Indicates the success of the load process. Allowed values are ''RUNNING'', ''SUCCESS'', and ''FAILED''.';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_TARGET.SERVICE_NAME IS 'Database of reference';
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_WORKFLOW_HISTORY" (
|
||||
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||
"ORCHESTRATION_RUN_ID" VARCHAR2(300 BYTE),
|
||||
"WORKFLOW_NAME" VARCHAR2(255 BYTE),
|
||||
"WORKFLOW_START" TIMESTAMP (6),
|
||||
"WORKFLOW_END" TIMESTAMP (6),
|
||||
"WORKFLOW_SUCCESSFUL" VARCHAR2(200 BYTE),
|
||||
"DBT_INVOCATION_ID" VARCHAR2(200 BYTE),
|
||||
"SERVICE_NAME" VARCHAR2(25 BYTE)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE CT_MRDS.A_WORKFLOW_HISTORY IS 'This table logs details of workflow executions, including start and end times, and overall workflow status.';
|
||||
COMMENT ON COLUMN CT_MRDS.A_WORKFLOW_HISTORY.A_WORKFLOW_HISTORY_KEY IS 'Technical key to identify a load operation. Generated with Oracle sequence "CT_MRDS.SEQ_WORKFLOW_HISTORY"';
|
||||
COMMENT ON COLUMN CT_MRDS.A_WORKFLOW_HISTORY.ORCHESTRATION_RUN_ID IS 'Unique identifier for the orchestration run';
|
||||
COMMENT ON COLUMN CT_MRDS.A_WORKFLOW_HISTORY.WORKFLOW_NAME IS 'The name of the workflow';
|
||||
COMMENT ON COLUMN CT_MRDS.A_WORKFLOW_HISTORY.WORKFLOW_START IS 'Start time of the Airflow / Informatica workflow';
|
||||
COMMENT ON COLUMN CT_MRDS.A_WORKFLOW_HISTORY.WORKFLOW_END IS 'End time of the Airflow / Informatica workflow';
|
||||
COMMENT ON COLUMN CT_MRDS.A_WORKFLOW_HISTORY.WORKFLOW_SUCCESSFUL IS 'Overall status of the workflow. Allowed values are ''R'' (running), ''Y'' (yes), and ''N'' (no)';
|
||||
COMMENT ON COLUMN CT_MRDS.A_WORKFLOW_HISTORY.DBT_INVOCATION_ID IS 'Unique identifier for the DBT invocation';
|
||||
COMMENT ON COLUMN CT_MRDS.A_WORKFLOW_HISTORY.SERVICE_NAME IS 'Filter for the service: RAR, MOPDB, ODS';
|
||||
|
||||
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_DEVO_REPLICA_MGMT_MOPDB" AS
|
||||
SELECT OWNER,
|
||||
TABLE_NAME,
|
||||
TABLE_ALIAS,
|
||||
CAST(NULL AS VARCHAR2(200)) AS LAST_RUN_ID,
|
||||
CAST(NULL AS DATE) AS LAST_START_TIME,
|
||||
CAST(NULL AS DATE) AS LAST_END_TIME,
|
||||
CAST(NULL AS VARCHAR2(200)) AS LAST_STATUS,
|
||||
SAVE_MODE,
|
||||
BUCKET_COLUMN AS PARTITION_COLUMN,
|
||||
NUMBER_OF_BUCKETS AS MAX_THREADS,
|
||||
CAST(NULL AS NUMBER(28,10)) AS LAST_PROCESSED_KEY
|
||||
FROM CT_MOPDB.MOPDB_ON_DISC_REPLICA_MGMT;
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_DEVO_REPLICA_MGMT_RAR" AS
|
||||
SELECT OWNER,
|
||||
TABLE_NAME,
|
||||
TABLE_ALIAS,
|
||||
CAST(NULL AS VARCHAR2(200)) AS LAST_RUN_ID,
|
||||
CAST(NULL AS DATE) AS LAST_START_TIME,
|
||||
CAST(NULL AS DATE) AS LAST_END_TIME,
|
||||
CAST(NULL AS VARCHAR2(200)) AS LAST_STATUS,
|
||||
SAVE_MODE,
|
||||
BUCKET_COLUMN AS PARTITION_COLUMN,
|
||||
NUMBER_OF_BUCKETS AS MAX_THREADS,
|
||||
CAST(NULL AS NUMBER(28,10)) AS LAST_PROCESSED_KEY
|
||||
FROM CT_REF.RAR_ON_DISC_REPLICA_MGMT;
|
||||
|
||||
CREATE TABLE "CT_MRDS"."ERR_LOG"
|
||||
("ERR_LOG_KEY" NUMBER(*,0),
|
||||
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||
"ERR_MESSAGE_FK" NUMBER,
|
||||
"ERR_SEVERITY_FK" NUMBER,
|
||||
"ERR_WORKFLOW_RUN_ID" CHAR(17 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_WORKFLOW_NAME" CHAR(18 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_MAPPING_NAME" CHAR(74 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_LOCATION" CHAR(74 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_SOURCE" CHAR(22 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_KEY_BUSINESS" CHAR(6 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_KEY_BUSINESS_VALUE" CHAR(14 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_KEY_TECHNICAL" CHAR(22 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_KEY_TECHNICAL_VALUE" VARCHAR2(40 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_DESCRIPTION" CHAR(94 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_MESSAGE" VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"INDEP_SUBPROCESS_FK" NUMBER(38,0)
|
||||
);
|
||||
|
||||
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_CEPH';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'MPEC' AND TABLE_NAME = 'T_MPEC';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'REFERENCE' AND TABLE_NAME = 'T_CAPITAL_KEY';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'CT_MOPDB' AND TABLE_NAME = 'MOPDB_METADATA_INVENTORY';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'REFERENCE' AND TABLE_NAME = 'T_CSDB_RATING_ACTION';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'REFERENCE' AND TABLE_NAME = 'T_CURRENCY';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'CLSLNK_SNPSHT_DT' WHERE OWNER = 'RIAD' AND TABLE_NAME = 'T_CLSLNK_PSTNZ_HIST';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'TOP' AND TABLE_NAME = 'T_AGGREGATED_ALLOTMENT';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'ELA' AND TABLE_NAME = 'T_ELA_INFO';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS_ORIGINATOR';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS_ADD_GUARANTOR';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS_IAB';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS_SERVICER';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS_LSP';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS_IRSP';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS_FXSC';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_COLLATERAL';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'REFERENCE' AND TABLE_NAME = 'T_COUNTRY';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_SNAPSHOT_DATE';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'TOP' AND TABLE_NAME = 'T_ALLOTMENT';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'TOP' AND TABLE_NAME = 'T_ALLOTMENT_MODIFICATIONS';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'TOP' AND TABLE_NAME = 'T_ANNOUNCEMENT';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'TOP' AND TABLE_NAME = 'T_FBL_ITEM';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'TOP' AND TABLE_NAME = 'T_FULLBID_ARRAY_COMPILED';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'REF_DATE' WHERE OWNER = 'LM' AND TABLE_NAME = 'T_STANDING_FACILITIES';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'REFERENCE_DATE' WHERE OWNER = 'LM' AND TABLE_NAME = 'T_CURRENT_ACCOUNTS';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'REF_DATE' WHERE OWNER = 'LM' AND TABLE_NAME = 'T_BALANCE_SHEET';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'REFERENCE_DATE' WHERE OWNER = 'LM' AND TABLE_NAME = 'T_FORECAST';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'ADJUSTMENT_DATE' WHERE OWNER = 'LM' AND TABLE_NAME = 'T_FC_ADH_ADJUSTMENTS';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'LM' AND TABLE_NAME = 'T_FC_CSM_ADJUSTMENTS';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'LM' AND TABLE_NAME = 'T_FC_QRE_ADJUSTMENTS';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_COLLATERAL_ALL_SOURCES';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'TIME_PERIOD' WHERE OWNER = 'SDW' AND TABLE_NAME = 'T_EXCHANGE_RATES';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'TOP' AND TABLE_NAME = 'T_ALLOTMENT_MODIFICATIONS_AGGREGATED';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_INTRADAY_CREDIT';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'MV_PUBLIC_ELIGIBLE_MARKETABLE_ASSETS';
|
||||
commit;
|
||||
|
||||
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_RAR
|
||||
SET SAVE_MODE = 'OVERWRITE' , PARTITION_COLUMN = 'ROWID';
|
||||
commit;
|
||||
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_RAR SET SAVE_MODE = 'APPEND' , PARTITION_COLUMN = 'A_SNAPSHOT_DATE' WHERE TABLE_NAME = 'NH_HF_PRICE' AND OWNER = 'CORR_RAR' ;
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_RAR SET SAVE_MODE = 'APPEND' , PARTITION_COLUMN = 'A_INSERTION_DATE' WHERE TABLE_NAME = 'NH_PRICE' AND OWNER = 'CORR_RAR' ;
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_RAR SET SAVE_MODE = 'APPEND' , PARTITION_COLUMN = 'A_INSERTION_DATE' WHERE TABLE_NAME = 'NH_POSITION' AND OWNER = 'CORR_RAR' ;
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_RAR SET SAVE_MODE = 'APPEND' , PARTITION_COLUMN = 'A_INSERTION_DATE' WHERE TABLE_NAME = 'NH_PERFORMANCE' AND OWNER = 'CORR_RAR' ;
|
||||
|
||||
commit;
|
||||
|
||||
---------------------
|
||||
------ SEQUENCES ----
|
||||
---------------------
|
||||
|
||||
DECLARE
|
||||
start_val NUMBER; -- Variable to hold the maximum value from the table
|
||||
BEGIN
|
||||
-- Create A_TASK_HISTORY_KEY_SEQ
|
||||
EXECUTE IMMEDIATE 'CREATE SEQUENCE CT_MRDS.A_TASK_HISTORY_KEY_SEQ MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 10000000 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL';
|
||||
|
||||
-- Create A_TASK_HISTORY_SOURCE_KEY_SEQ
|
||||
EXECUTE IMMEDIATE 'CREATE SEQUENCE CT_MRDS.A_TASK_HISTORY_SOURCE_KEY_SEQ MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 10000000 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL';
|
||||
|
||||
-- Create A_TASK_HISTORY_TARGET_KEY_SEQ
|
||||
EXECUTE IMMEDIATE 'CREATE SEQUENCE CT_MRDS.A_TASK_HISTORY_TARGET_KEY_SEQ MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 10000000 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL';
|
||||
|
||||
-- Create A_WORKFLOW_HISTORY_KEY_SEQ
|
||||
EXECUTE IMMEDIATE 'CREATE SEQUENCE CT_MRDS.A_WORKFLOW_HISTORY_KEY_SEQ MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 10000000 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL';
|
||||
END;
|
||||
@@ -0,0 +1,59 @@
|
||||
--MARS-770
|
||||
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
|
||||
select 'install_package_MarsGeneralRelease_templates_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
|
||||
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 payload
|
||||
--=============================================================================================================================
|
||||
|
||||
CREATE USER CT_ET_TEMPLATES IDENTIFIED BY "afa3343DDD___"
|
||||
DEFAULT TABLESPACE DATA;
|
||||
|
||||
--DROP TABLE CT_ET_TEMPLATES.IDS_DATA;
|
||||
CREATE TABLE CT_ET_TEMPLATES.IDS_DATA(
|
||||
"STATION" VARCHAR2(2000),
|
||||
"DATE" VARCHAR2(2000),
|
||||
"LATITUDE" VARCHAR2(2000),
|
||||
"LONGITUDE" VARCHAR2(2000),
|
||||
"ELEVATION" VARCHAR2(2000),
|
||||
"NAME" VARCHAR2(2000),
|
||||
"TEMP" VARCHAR2(2000),
|
||||
"TEMP_ATTRIBUTES" VARCHAR2(2000),
|
||||
"DEWP" VARCHAR2(2000),
|
||||
"DEWP_ATTRIBUTES" VARCHAR2(2000),
|
||||
"SLP" VARCHAR2(2000),
|
||||
"SLP_ATTRIBUTES" VARCHAR2(2000),
|
||||
"STP" VARCHAR2(2000),
|
||||
"STP_ATTRIBUTES" VARCHAR2(2000),
|
||||
"VISIB" VARCHAR2(2000),
|
||||
"VISIB_ATTRIBUTES" VARCHAR2(2000),
|
||||
"WDSP" VARCHAR2(2000),
|
||||
"WDSP_ATTRIBUTES" VARCHAR2(2000),
|
||||
"MXSPD" VARCHAR2(2000),
|
||||
"GUST" VARCHAR2(2000),
|
||||
"MAX" VARCHAR2(2000),
|
||||
"MAX_ATTRIBUTES" VARCHAR2(2000),
|
||||
"MIN" VARCHAR2(2000),
|
||||
"MIN_ATTRIBUTES" VARCHAR2(2000),
|
||||
"PRCP" VARCHAR2(2000),
|
||||
"PRCP_ATTRIBUTES" VARCHAR2(2000),
|
||||
"SNDP" VARCHAR2(2000),
|
||||
"FRSHTT" VARCHAR2(2000)
|
||||
);
|
||||
@@ -0,0 +1,95 @@
|
||||
--MARS-770
|
||||
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
|
||||
select 'install_package_MarsGeneralRelease_MARS770_triggers_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
|
||||
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 triggers
|
||||
--=============================================================================================================================
|
||||
|
||||
CREATE OR REPLACE TRIGGER CT_MRDS.TRG_BIU_CHCK_TEMPLATE_TABLE_NAME
|
||||
BEFORE INSERT OR UPDATE ON "CT_MRDS"."A_COLUMN_DATE_FORMAT"
|
||||
FOR EACH ROW
|
||||
DECLARE
|
||||
vCount NUMBER;
|
||||
BEGIN
|
||||
SELECT COUNT(*)
|
||||
INTO vCount
|
||||
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
WHERE TEMPLATE_TABLE_NAME = :NEW.TEMPLATE_TABLE_NAME;
|
||||
|
||||
IF vCount = 0 THEN
|
||||
RAISE_APPLICATION_ERROR(-20001, 'TEMPLATE_TABLE_NAME = '''||:NEW.TEMPLATE_TABLE_NAME||''' not exists in A_SOURCE_FILE_CONFIG.TEMPLATE_TABLE_NAME ');
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE TRIGGER CT_MRDS.TRG_BI_A_SOURCE_FILE_CONFIG_CHECK
|
||||
BEFORE INSERT ON CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
FOR EACH ROW
|
||||
DECLARE
|
||||
-- NO_CONTAINER_FOR_INPUT EXCEPTION;
|
||||
WRONG_CONTAINER_FOR_INPUT EXCEPTION;
|
||||
CONTAINER_ALREADY_EXISTS EXCEPTION;
|
||||
vCount PLS_INTEGER;
|
||||
vContainerFileKey CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE;
|
||||
BEGIN
|
||||
|
||||
--Check if there is CONTAINER entity in A_SOURCE_FILE_CONFIG table
|
||||
IF (:NEW.SOURCE_FILE_TYPE = 'INPUT' AND :NEW.CONTAINER_FILE_KEY IS NULL) THEN
|
||||
:NEW.CONTAINER_FILE_KEY := CT_MRDS.FILE_MANAGER.GET_CONTAINER_SOURCE_FILE_CONFIG_KEY(:NEW.SOURCE_FILE_ID);
|
||||
-- IF :NEW.CONTAINER_FILE_KEY is null THEN
|
||||
-- RAISE NO_CONTAINER_FOR_INPUT;
|
||||
-- END IF;
|
||||
|
||||
-- Check if provided CONTAINER_FILE_KEY is the one which exists in the A_SOURCE_FILE_CONFIG table
|
||||
ELSIF (:NEW.SOURCE_FILE_TYPE = 'INPUT' AND :NEW.CONTAINER_FILE_KEY IS NOT NULL) THEN
|
||||
vContainerFileKey := CT_MRDS.FILE_MANAGER.GET_CONTAINER_SOURCE_FILE_CONFIG_KEY(:NEW.SOURCE_FILE_ID);
|
||||
IF :NEW.CONTAINER_FILE_KEY <> vContainerFileKey THEN
|
||||
RAISE WRONG_CONTAINER_FOR_INPUT;
|
||||
END IF;
|
||||
|
||||
-- Check if there is already a CONTAINER for provided SOURCE_FILE_ID
|
||||
ELSIF (:NEW.SOURCE_FILE_TYPE = 'CONTAINER') THEN
|
||||
SELECT count(*)
|
||||
INTO vCount
|
||||
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
WHERE :NEW.SOURCE_FILE_TYPE = 'CONTAINER'
|
||||
AND SOURCE_FILE_ID = :NEW.SOURCE_FILE_ID;
|
||||
|
||||
IF vCount > 0 THEN
|
||||
RAISE CONTAINER_ALREADY_EXISTS;
|
||||
END IF;
|
||||
END IF;
|
||||
SELECT CT_MRDS.A_SOURCE_FILE_CONFIG_KEY_SEQ.NEXTVAL INTO :NEW.A_SOURCE_FILE_CONFIG_KEY FROM DUAL;
|
||||
EXCEPTION
|
||||
-- WHEN NO_CONTAINER_FOR_INPUT THEN
|
||||
-- RAISE_APPLICATION_ERROR(-20011, 'Error while adding entity where SOURCE_FILE_TYPE = ''INPUT'''
|
||||
-- ||CHR(13)||CHR(10)||'There is no A_SOURCE_FILE_CONFIG entity where SOURCE_FILE_ID = '''||:NEW.SOURCE_FILE_ID||''' AND SOURCE_FILE_TYPE = ''CONTAINER'''
|
||||
-- ||CHR(13)||CHR(10)||'Add ''CONTAINER'' config entity before ''INPUT'' one');
|
||||
WHEN WRONG_CONTAINER_FOR_INPUT THEN
|
||||
RAISE_APPLICATION_ERROR(-20012, 'Provided CONTAINER_FILE_KEY='||:NEW.CONTAINER_FILE_KEY||' is wrong'
|
||||
||CHR(13)||CHR(10)||'There is A_SOURCE_FILE_CONFIG entity where SOURCE_FILE_ID = '''||:NEW.SOURCE_FILE_ID||''' AND SOURCE_FILE_TYPE = ''CONTAINER'''
|
||||
||CHR(13)||CHR(10)||'Existing CONTAINER_FILE_KEY='||vContainerFileKey);
|
||||
WHEN CONTAINER_ALREADY_EXISTS THEN
|
||||
RAISE_APPLICATION_ERROR(-20013, 'Such CONTAINER already exists!'
|
||||
||CHR(13)||CHR(10)||'There is A_SOURCE_FILE_CONFIG entity where SOURCE_FILE_ID = '''||:NEW.SOURCE_FILE_ID||''' AND SOURCE_FILE_TYPE = ''CONTAINER''');
|
||||
END;
|
||||
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
--MARS-770
|
||||
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
|
||||
select 'install_package_MarsGeneralRelease_MARS770_tst_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
|
||||
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 payload tst specific part
|
||||
--=============================================================================================================================
|
||||
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('default', 'EnvironmentID', 'tst', '');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('tst', 'Region', 'eu-frankfurt-1', 'OCI region for test environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('tst', 'NameSpace', 'frcnomajoc7v', 'OCI namespace for test environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('tst', 'InboxBucketName', 'mrds_inbox_tst', 'Name of the inbox bucket for test environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('tst', 'DataBucketName', 'mrds_data_tst', 'Name of the data bucket for test environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('tst', 'HistoryBucketName', 'mrds_history_tst', 'Name of the history bucket for test environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('tst', 'CredentialName', 'OCI$RESOURCE_PRINCIPAL', 'Name of the credential for test environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('tst', 'LoggingEnabled', 'ON', 'Enable logging for test environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('tst', 'MinLogLevel', 'DEBUG', 'Minimum logging level for test environment');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (ENVIRONMENT_ID, CONFIG_VARIABLE, CONFIG_VARIABLE_VALUE, CONFIG_VARIABLE_COMMENT) VALUES ('tst', 'DefaultDateFormat', 'DD/MM/YYYY HH24:MI:SS', 'Default date format for test environment');
|
||||
COMMIT;
|
||||
@@ -0,0 +1,116 @@
|
||||
--MARS-770
|
||||
|
||||
set verify off
|
||||
SET serveroutput ON
|
||||
--SET TIMING ON
|
||||
whenever sqlerror exit sql.sqlcode rollback;
|
||||
|
||||
column owner format a15
|
||||
column object_name format a30
|
||||
column spoolname new_value spoolname
|
||||
|
||||
select 'install_package_MarsGeneralRelease_MARS770_views_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
|
||||
spool '&spoolname'
|
||||
|
||||
|
||||
prompt ##### started at time #####
|
||||
select systimestamp from dual;
|
||||
prompt ##### database name #####
|
||||
select name pdb_name from v$pdbs;
|
||||
|
||||
--set echo on
|
||||
--=============================================================================================================================
|
||||
-- start install --MARS-770 views
|
||||
--=============================================================================================================================
|
||||
|
||||
create or replace view CT_MRDS.VW_A_PROCESS_LOG as
|
||||
select * from (
|
||||
select
|
||||
l.a_process_log_key
|
||||
,l.guid
|
||||
,l.process_name
|
||||
,l.procedure_name
|
||||
,l.log_level
|
||||
,l.log_message
|
||||
,l.log_timestamp
|
||||
,lead(log_message) over (partition by l.process_name, l.procedure_name, guid order by l.a_process_log_key) as next_log_message
|
||||
,lead(log_timestamp) over (partition by l.process_name, l.procedure_name, guid order by l.a_process_log_key) as next_log_timestamp
|
||||
from CT_MRDS.a_process_log l
|
||||
) where 1=1
|
||||
and log_message='Start'
|
||||
order by log_timestamp
|
||||
;
|
||||
|
||||
create or replace view CT_MRDS.VW_FILE_RECONCILIATION as
|
||||
select
|
||||
case
|
||||
when c.bytes is null then 'RECEIVED_MISSING_ON_CLOUD'
|
||||
when r.bytes is null then 'NOT_RECEIVED'
|
||||
when r.bytes is not null and c.bytes is not null then 'RECEIVED'
|
||||
else 'UNKNOWN'
|
||||
end as status
|
||||
,c.object_name as cloud_file
|
||||
,r.*
|
||||
from DBMS_CLOUD.LIST_OBJECTS('OCI$RESOURCE_PRINCIPAL', CT_MRDS.FILE_MANAGER.GET_INBOX_BUCKET_URI()) c
|
||||
full join a_source_file_received r
|
||||
on c.bytes = r.bytes
|
||||
and c.checksum = r.checksum
|
||||
and c.created = r.created
|
||||
;
|
||||
|
||||
create or replace view CT_MRDS.VW_FILE_RECONCILIATION_SUMMARY as
|
||||
select
|
||||
all_statuses.status
|
||||
,nvl(recon_stats.cnt, 0) as number_of_files
|
||||
from (
|
||||
select 'RECEIVED_MISSING_ON_CLOUD' as status from dual
|
||||
union all select 'NOT_RECEIVED' from dual
|
||||
union all select 'RECEIVED' from dual
|
||||
union all select 'UNKNOWN' from dual
|
||||
) all_statuses
|
||||
left join (select status, count(*) as cnt from CT_MRDS.VW_FILE_RECONCILIATION group by status
|
||||
) recon_stats
|
||||
on all_statuses.status = recon_stats.status
|
||||
order by 1
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FORCE EDITIONABLE VIEW "CT_MRDS"."A_MOPDB_LOAD_HISTORY" ("A_WORKFLOW_HISTORY_KEY", "A_WORKFLOW_HISTORY_SOURCE_KEY", "A_TASK_HISTORY_KEY", "TASK_NAME", "TASK_START", "TASK_END", "WORKFLOW_SUCCESSFUL") DEFAULT COLLATION "USING_NLS_COMP" AS
|
||||
SELECT distinct wh.a_workflow_history_key,
|
||||
ths.a_workflow_history_source_key,
|
||||
th.a_task_history_key,
|
||||
th.task_name,
|
||||
th.task_start,
|
||||
th.task_end,
|
||||
wh.workflow_successful
|
||||
FROM CT_MRDS.A_WORKFLOW_HISTORY wh
|
||||
JOIN CT_MRDS.A_TASK_HISTORY th
|
||||
ON wh.a_workflow_history_key = th.a_workflow_history_key
|
||||
AND wh.service_name = th.service_name
|
||||
JOIN CT_MRDS.A_TASK_HISTORY_SOURCE ths
|
||||
ON th.a_task_history_key = ths.a_task_history_key
|
||||
AND th.service_name = ths.service_name
|
||||
WHERE wh.service_name = 'MOPDB'
|
||||
AND wh.workflow_successful = 'Y'
|
||||
AND lower(th.task_name) not like '%_sq'
|
||||
AND ths.a_workflow_history_source_key is not null;
|
||||
|
||||
CREATE OR REPLACE FORCE EDITIONABLE VIEW "CT_MRDS"."A_DWH_LOAD_HISTORY" ("A_WORKFLOW_HISTORY_KEY", "A_WORKFLOW_HISTORY_SOURCE_KEY", "A_TASK_HISTORY_KEY", "TASK_NAME", "TASK_START", "TASK_END", "WORKFLOW_SUCCESSFUL") DEFAULT COLLATION "USING_NLS_COMP" AS
|
||||
SELECT distinct wh.a_workflow_history_key,
|
||||
ths.a_workflow_history_source_key,
|
||||
th.a_task_history_key,
|
||||
th.task_name,
|
||||
th.task_start,
|
||||
th.task_end,
|
||||
wh.workflow_successful
|
||||
FROM CT_MRDS.A_WORKFLOW_HISTORY wh
|
||||
JOIN CT_MRDS.A_TASK_HISTORY th
|
||||
ON wh.a_workflow_history_key = th.a_workflow_history_key
|
||||
AND wh.service_name = th.service_name
|
||||
JOIN CT_MRDS.A_TASK_HISTORY_SOURCE ths
|
||||
ON th.a_task_history_key = ths.a_task_history_key
|
||||
AND th.service_name = ths.service_name
|
||||
WHERE wh.service_name = 'RAR'
|
||||
AND wh.workflow_successful = 'Y'
|
||||
AND lower(th.task_name) not like '%_sq'
|
||||
AND ths.a_workflow_history_source_key is not null;
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
DROP USER CT_MRDS CASCADE;
|
||||
|
||||
|
||||
CREATE USER CT_MRDS IDENTIFIED BY Start_1234567890
|
||||
DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
|
||||
ALTER USER CT_MRDS QUOTA UNLIMITED ON DATA;
|
||||
|
||||
|
||||
EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL(username => 'CT_MRDS');
|
||||
|
||||
-- Cloud and database privileges (MARS-770)
|
||||
GRANT EXECUTE ON DBMS_CLOUD TO CT_MRDS;
|
||||
GRANT INHERIT PRIVILEGES ON USER ADMIN TO CT_MRDS;
|
||||
GRANT INHERIT PRIVILEGES ON USER PDBADMIN TO CT_MRDS;
|
||||
GRANT INHERIT PRIVILEGES ON USER PDBSOFA TO CT_MRDS;
|
||||
GRANT INHERIT PRIVILEGES ON USER MRDS_LOADER TO CT_MRDS;
|
||||
|
||||
-- Grant DBMS_CRYPTO for package hash calculation (SHA256)
|
||||
GRANT EXECUTE ON DBMS_CRYPTO TO CT_MRDS;
|
||||
|
||||
-- Grant SELECT ANY DICTIONARY for cross-schema package hash tracking (MARS-1049)
|
||||
-- Allows ENV_MANAGER to read ALL_SOURCE for packages in ODS and other schemas
|
||||
-- Required for CALCULATE_PACKAGE_HASH to work across schemas
|
||||
GRANT SELECT ANY DICTIONARY TO CT_MRDS;
|
||||
@@ -0,0 +1,25 @@
|
||||
-- ====================================================================
|
||||
-- Additional Grants from MARS-770
|
||||
-- ====================================================================
|
||||
-- Purpose: Additional grants and dynamic privilege assignments
|
||||
-- Source: MARS-770 install_package_MarsGeneralRelease_MARS770_grants.sql
|
||||
-- ====================================================================
|
||||
|
||||
-- Grant SELECT ANY TABLE to specific schemas
|
||||
GRANT SELECT ANY TABLE TO OU_RQSD;
|
||||
GRANT SELECT ANY TABLE TO RQSD;
|
||||
|
||||
-- Dynamic grants to all non-Oracle schemas for A_WORKFLOW_HISTORY access
|
||||
BEGIN
|
||||
FOR user_rec IN (SELECT username FROM dba_users WHERE oracle_maintained != 'Y' AND common != 'YES') LOOP
|
||||
DECLARE
|
||||
schema_name VARCHAR2(128) := user_rec.username;
|
||||
BEGIN
|
||||
EXECUTE IMMEDIATE 'GRANT SELECT ON CT_MRDS.A_WORKFLOW_HISTORY TO "'|| schema_name ||'" WITH GRANT OPTION';
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE('Error processing schema ' || schema_name || ': ' || SQLERRM);
|
||||
END;
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
@@ -0,0 +1,733 @@
|
||||
create or replace PACKAGE BODY CT_MRDS.DATA_EXPORTER
|
||||
AS
|
||||
|
||||
-- Internal shared function to process column list with T. prefix and key column mapping
|
||||
FUNCTION processColumnList(pColumnList IN VARCHAR2, pTableName IN VARCHAR2, pSchemaName IN VARCHAR2, pKeyColumnName IN VARCHAR2) RETURN VARCHAR2 IS
|
||||
vResult VARCHAR2(32767);
|
||||
vColumns VARCHAR2(32767);
|
||||
vPos PLS_INTEGER;
|
||||
vNextPos PLS_INTEGER;
|
||||
vCurrentCol VARCHAR2(128);
|
||||
vAllCols VARCHAR2(32767);
|
||||
BEGIN
|
||||
IF pColumnList IS NULL THEN
|
||||
-- Build list of all columns
|
||||
SELECT LISTAGG(column_name, ', ') WITHIN GROUP (ORDER BY column_id)
|
||||
INTO vAllCols
|
||||
FROM all_tab_columns
|
||||
WHERE table_name = pTableName
|
||||
AND owner = pSchemaName;
|
||||
|
||||
-- Add T. prefix to all columns
|
||||
vResult := 'T.' || REPLACE(vAllCols, ', ', ', T.');
|
||||
|
||||
-- Replace key column with aliased version (e.g., T.A_ETL_LOAD_SET_KEY_FK AS A_WORKFLOW_HISTORY_KEY)
|
||||
vResult := REPLACE(vResult, 'T.' || pKeyColumnName, 'T.' || pKeyColumnName || ' AS A_WORKFLOW_HISTORY_KEY');
|
||||
|
||||
RETURN vResult;
|
||||
END IF;
|
||||
|
||||
-- Remove extra spaces and convert to uppercase
|
||||
vColumns := UPPER(REPLACE(pColumnList, ' ', ''));
|
||||
vPos := 1;
|
||||
vResult := '';
|
||||
|
||||
-- Parse comma-separated column list and add T. prefix
|
||||
WHILE vPos <= LENGTH(vColumns) LOOP
|
||||
vNextPos := INSTR(vColumns, ',', vPos);
|
||||
IF vNextPos = 0 THEN
|
||||
vNextPos := LENGTH(vColumns) + 1;
|
||||
END IF;
|
||||
|
||||
vCurrentCol := SUBSTR(vColumns, vPos, vNextPos - vPos);
|
||||
|
||||
-- Check if this is the key column (e.g., A_ETL_LOAD_SET_KEY_FK) and add alias
|
||||
IF UPPER(vCurrentCol) = UPPER(pKeyColumnName) THEN
|
||||
vCurrentCol := 'T.' || pKeyColumnName || ' AS A_WORKFLOW_HISTORY_KEY';
|
||||
ELSIF UPPER(vCurrentCol) = 'A_ETL_LOAD_SET_KEY' THEN
|
||||
vCurrentCol := 'T.A_ETL_LOAD_SET_KEY AS A_WORKFLOW_HISTORY_KEY';
|
||||
ELSE
|
||||
-- Add T. prefix if not already present
|
||||
IF INSTR(vCurrentCol, '.') = 0 THEN
|
||||
vCurrentCol := 'T.' || vCurrentCol;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
-- Add to result with comma separator
|
||||
IF vResult IS NOT NULL THEN
|
||||
vResult := vResult || ', ';
|
||||
END IF;
|
||||
vResult := vResult || vCurrentCol;
|
||||
|
||||
vPos := vNextPos + 1;
|
||||
END LOOP;
|
||||
|
||||
RETURN vResult;
|
||||
END processColumnList;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
PROCEDURE EXPORT_TABLE_DATA (
|
||||
pSchemaName IN VARCHAR2,
|
||||
pTableName IN VARCHAR2,
|
||||
pKeyColumnName IN VARCHAR2,
|
||||
pBucketArea IN VARCHAR2,
|
||||
pFolderName IN VARCHAR2,
|
||||
pCredentialName IN VARCHAR2 default ENV_MANAGER.gvCredentialName
|
||||
)
|
||||
IS
|
||||
-- Type definition for key values
|
||||
TYPE key_value_tab IS TABLE OF VARCHAR2(4000);
|
||||
vKeyValues key_value_tab;
|
||||
vCount INTEGER;
|
||||
vSql VARCHAR2(4000);
|
||||
vKeyValue VARCHAR2(4000);
|
||||
vQuery VARCHAR2(32767);
|
||||
vUri VARCHAR2(4000);
|
||||
vDataType VARCHAR2(30);
|
||||
vTableName VARCHAR2(128);
|
||||
vSchemaName VARCHAR2(128);
|
||||
vKeyColumnName VARCHAR2(128);
|
||||
vParameters VARCHAR2(4000);
|
||||
vBucketUri VARCHAR2(4000);
|
||||
vProcessedColumnList VARCHAR2(32767);
|
||||
vCurrentCol VARCHAR2(128);
|
||||
vAllColumnsList VARCHAR2(32767);
|
||||
|
||||
|
||||
-- Function to sanitize file names
|
||||
FUNCTION sanitizeFilename(pFilename IN VARCHAR2) RETURN VARCHAR2 IS
|
||||
vFilename VARCHAR2(1000);
|
||||
BEGIN
|
||||
-- Replace any disallowed characters with underscores
|
||||
vFilename := REGEXP_REPLACE(pFilename, '[^a-zA-Z0-9._-]', '_');
|
||||
RETURN vFilename;
|
||||
END sanitizeFilename;
|
||||
|
||||
BEGIN
|
||||
vParameters := ENV_MANAGER.FORMAT_PARAMETERS(SYS.ODCIVARCHAR2LIST( 'pSchemaName => '''||nvl(pSchemaName, 'NULL')||''''
|
||||
,'pTableName => '''||nvl(pTableName, 'NULL')||''''
|
||||
,'pKeyColumnName => '''||nvl(pKeyColumnName, 'NULL')||''''
|
||||
,'pBucketArea => '''||nvl(pBucketArea, 'NULL')||''''
|
||||
,'pFolderName => '''||nvl(pFolderName, 'NULL')||''''
|
||||
,'pCredentialName => '''||nvl(pCredentialName, 'NULL')||''''
|
||||
));
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Start','INFO', vParameters);
|
||||
|
||||
-- Get bucket URI based on bucket area using FILE_MANAGER function
|
||||
vBucketUri := FILE_MANAGER.GET_BUCKET_URI(pBucketArea);
|
||||
|
||||
-- Convert table and column names to uppercase to match data dictionary
|
||||
vTableName := UPPER(pTableName);
|
||||
vSchemaName := UPPER(pSchemaName);
|
||||
vKeyColumnName := UPPER(pKeyColumnName);
|
||||
|
||||
-- Check if table exists
|
||||
SELECT COUNT(*) INTO vCount
|
||||
FROM all_tables
|
||||
WHERE table_name = vTableName
|
||||
AND owner = vSchemaName;
|
||||
|
||||
IF vCount = 0 THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_TABLE_NOT_EXISTS, ENV_MANAGER.MSG_TABLE_NOT_EXISTS);
|
||||
END IF;
|
||||
|
||||
-- Check if key column exists
|
||||
SELECT COUNT(*) INTO vCount
|
||||
FROM all_tab_columns
|
||||
WHERE table_name = vTableName
|
||||
AND column_name = vKeyColumnName
|
||||
AND owner = vSchemaName;
|
||||
|
||||
IF vCount = 0 THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_COLUMN_NOT_EXISTS, ENV_MANAGER.MSG_COLUMN_NOT_EXISTS);
|
||||
|
||||
END IF;
|
||||
|
||||
-- Get the data type of the key column
|
||||
SELECT data_type INTO vDataType
|
||||
FROM all_tab_columns
|
||||
WHERE table_name = vTableName
|
||||
AND column_name = vKeyColumnName
|
||||
AND owner = vSchemaName;
|
||||
|
||||
-- Build list of all columns for the table (excluding key column to avoid duplication)
|
||||
SELECT LISTAGG(column_name, ', ') WITHIN GROUP (ORDER BY column_id)
|
||||
INTO vAllColumnsList
|
||||
FROM all_tab_columns
|
||||
WHERE table_name = vTableName
|
||||
AND owner = vSchemaName
|
||||
AND column_name != vKeyColumnName;
|
||||
|
||||
-- Process column list to add T. prefix to each column
|
||||
vProcessedColumnList := processColumnList(vAllColumnsList, vTableName, vSchemaName, vKeyColumnName);
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Dynamic column list built (excluding key): ' || vAllColumnsList, 'DEBUG', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Processed column list with T. prefix: ' || vProcessedColumnList, 'DEBUG', vParameters);
|
||||
|
||||
vTableName := DBMS_ASSERT.SCHEMA_NAME(vSchemaName) || '.' || DBMS_ASSERT.simple_sql_name(vTableName);
|
||||
-- Fetch unique key values from A_LOAD_HISTORY
|
||||
vSql := 'SELECT DISTINCT L.A_ETL_LOAD_SET_KEY' ||
|
||||
' FROM ' || vTableName || ' T, CT_ODS.A_LOAD_HISTORY L' ||
|
||||
' WHERE T.' || DBMS_ASSERT.simple_sql_name(vKeyColumnName) || ' = L.A_ETL_LOAD_SET_KEY';
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Executing key values query: ' || vSql, 'DEBUG', vParameters);
|
||||
EXECUTE IMMEDIATE vSql BULK COLLECT INTO vKeyValues;
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Found ' || vKeyValues.COUNT || ' unique key values to process', 'DEBUG', vParameters);
|
||||
|
||||
-- Loop over each unique key value
|
||||
FOR i IN 1 .. vKeyValues.COUNT LOOP
|
||||
vKeyValue := vKeyValues(i);
|
||||
|
||||
-- Construct the query to extract data for the current key value with A_WORKFLOW_HISTORY_KEY mapping
|
||||
IF vDataType IN ('VARCHAR2', 'CHAR', 'NCHAR', 'NVARCHAR2') THEN
|
||||
vQuery := 'SELECT ' || vProcessedColumnList ||
|
||||
' FROM ' || vTableName || ' T, CT_ODS.A_LOAD_HISTORY L' ||
|
||||
' WHERE T.' || DBMS_ASSERT.simple_sql_name(vKeyColumnName) || ' = L.A_ETL_LOAD_SET_KEY' ||
|
||||
' AND L.A_ETL_LOAD_SET_KEY = ' || CHR(39) || vKeyValue || CHR(39);
|
||||
ELSIF vDataType IN ('NUMBER', 'FLOAT', 'BINARY_FLOAT', 'BINARY_DOUBLE') THEN
|
||||
vQuery := 'SELECT ' || vProcessedColumnList ||
|
||||
' FROM ' || vTableName || ' T, CT_ODS.A_LOAD_HISTORY L' ||
|
||||
' WHERE T.' || DBMS_ASSERT.simple_sql_name(vKeyColumnName) || ' = L.A_ETL_LOAD_SET_KEY' ||
|
||||
' AND L.A_ETL_LOAD_SET_KEY = ' || vKeyValue;
|
||||
ELSIF vDataType LIKE 'TIMESTAMP%' OR vDataType = 'DATE' THEN
|
||||
vQuery := 'SELECT ' || vProcessedColumnList ||
|
||||
' FROM ' || vTableName || ' T, CT_ODS.A_LOAD_HISTORY L' ||
|
||||
' WHERE T.' || DBMS_ASSERT.simple_sql_name(vKeyColumnName) || ' = L.A_ETL_LOAD_SET_KEY' ||
|
||||
' AND L.A_ETL_LOAD_SET_KEY = TO_TIMESTAMP(' || CHR(39) || vKeyValue || CHR(39) ||', ''YYYY-MM-DD HH24:MI:SS.FF'')';
|
||||
ELSE
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_UNSUPPORTED_DATA_TYPE, ENV_MANAGER.MSG_UNSUPPORTED_DATA_TYPE);
|
||||
END IF;
|
||||
|
||||
-- Construct the URI for the file in OCI Object Storage
|
||||
vUri := vBucketUri ||
|
||||
CASE WHEN pFolderName IS NOT NULL THEN pFolderName || '/' ELSE '' END ||
|
||||
sanitizeFilename(vKeyValue) || '.csv';
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Processing key value: ' || vKeyValue || ' (' || (i) || '/' || vKeyValues.COUNT || ')', 'DEBUG', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Export query: ' || vQuery, 'DEBUG', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Export URI: ' || vUri, 'DEBUG', vParameters);
|
||||
|
||||
-- Use DBMS_CLOUD package to export data to the URI
|
||||
DBMS_CLOUD.EXPORT_DATA(
|
||||
credential_name => pCredentialName,
|
||||
file_uri_list => vUri,
|
||||
query => vQuery,
|
||||
format => json_object('type' VALUE 'CSV', 'header' VALUE true)
|
||||
);
|
||||
END LOOP;
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('End','INFO',vParameters);
|
||||
EXCEPTION
|
||||
WHEN ENV_MANAGER.ERR_TABLE_NOT_EXISTS THEN
|
||||
vgMsgTmp := ENV_MANAGER.MSG_TABLE_NOT_EXISTS ||': '||vTableName;
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_TABLE_NOT_EXISTS, vgMsgTmp);
|
||||
WHEN ENV_MANAGER.ERR_COLUMN_NOT_EXISTS THEN
|
||||
vgMsgTmp := ENV_MANAGER.MSG_COLUMN_NOT_EXISTS || ' (TableName.ColumnName): ' || vTableName||'.'||vKeyColumnName||CASE WHEN vCurrentCol IS NOT NULL THEN '.'||vCurrentCol||' in column list' ELSE '' END;
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_COLUMN_NOT_EXISTS, vgMsgTmp);
|
||||
WHEN ENV_MANAGER.ERR_UNSUPPORTED_DATA_TYPE THEN
|
||||
vgMsgTmp := ENV_MANAGER.MSG_UNSUPPORTED_DATA_TYPE || ' vDataType: '||vDataType;
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_UNSUPPORTED_DATA_TYPE, vgMsgTmp);
|
||||
WHEN OTHERS THEN
|
||||
-- Log complete error details including full stack trace and backtrace
|
||||
ENV_MANAGER.LOG_PROCESS_ERROR('Export failed: ' || SQLERRM, vParameters, 'DATA_EXPORTER');
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_UNKNOWN, ENV_MANAGER.GET_ERROR_STACK(pFormat => 'OUTPUT', pCode=> SQLCODE));
|
||||
|
||||
END EXPORT_TABLE_DATA;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
PROCEDURE EXPORT_TABLE_DATA_BY_DATE (
|
||||
pSchemaName IN VARCHAR2,
|
||||
pTableName IN VARCHAR2,
|
||||
pKeyColumnName IN VARCHAR2,
|
||||
pBucketArea IN VARCHAR2,
|
||||
pFolderName IN VARCHAR2,
|
||||
pColumnList IN VARCHAR2 default NULL,
|
||||
pMinDate IN DATE default DATE '1900-01-01',
|
||||
pMaxDate IN DATE default SYSDATE,
|
||||
pCredentialName IN VARCHAR2 default ENV_MANAGER.gvCredentialName
|
||||
)
|
||||
IS
|
||||
-- Type definition for key values
|
||||
TYPE key_value_tab IS TABLE OF VARCHAR2(4000);
|
||||
|
||||
vKeyValuesYear key_value_tab;
|
||||
vKeyValuesMonth key_value_tab;
|
||||
|
||||
vCount INTEGER;
|
||||
vSql VARCHAR2(32000);
|
||||
vKeyValueYear VARCHAR2(4000);
|
||||
vKeyValueMonth VARCHAR2(4000);
|
||||
vQuery VARCHAR2(32767);
|
||||
vUri VARCHAR2(4000);
|
||||
vDataType VARCHAR2(30);
|
||||
vTableName VARCHAR2(128);
|
||||
vSchemaName VARCHAR2(128);
|
||||
vKeyColumnName VARCHAR2(128);
|
||||
vParameters CT_MRDS.A_PROCESS_LOG.PROCEDURE_PARAMETERS%TYPE;
|
||||
vProcessedColumnList VARCHAR2(32767);
|
||||
vBucketUri VARCHAR2(4000);
|
||||
vCurrentCol VARCHAR2(128);
|
||||
|
||||
-- Function to sanitize file names
|
||||
FUNCTION sanitizeFilename(pFilename IN VARCHAR2) RETURN VARCHAR2 IS
|
||||
vFilename VARCHAR2(1000);
|
||||
BEGIN
|
||||
-- Replace any disallowed characters with underscores
|
||||
vFilename := REGEXP_REPLACE(pFilename, '[^a-zA-Z0-9._-]', '_');
|
||||
RETURN vFilename;
|
||||
END sanitizeFilename;
|
||||
|
||||
BEGIN
|
||||
vParameters := ENV_MANAGER.FORMAT_PARAMETERS(SYS.ODCIVARCHAR2LIST( 'pSchemaName => '''||nvl(pSchemaName, 'NULL')||''''
|
||||
,'pTableName => '''||nvl(pTableName, 'NULL')||''''
|
||||
,'pKeyColumnName => '''||nvl(pKeyColumnName, 'NULL')||''''
|
||||
,'pBucketArea => '''||nvl(pBucketArea, 'NULL')||''''
|
||||
,'pFolderName => '''||nvl(pFolderName, 'NULL')||''''
|
||||
,'pColumnList => '''||nvl(pColumnList, 'NULL')||''''
|
||||
,'pMinDate => '''||nvl(TO_CHAR(pMinDate, 'YYYY-MM-DD HH24:MI:SS'), 'NULL')||''''
|
||||
,'pMaxDate => '''||nvl(TO_CHAR(pMaxDate, 'YYYY-MM-DD HH24:MI:SS'), 'NULL')||''''
|
||||
,'pCredentialName => '''||nvl(pCredentialName, 'NULL')||''''
|
||||
));
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Start','INFO', vParameters);
|
||||
|
||||
-- Get bucket URI based on bucket area using FILE_MANAGER function
|
||||
vBucketUri := FILE_MANAGER.GET_BUCKET_URI(pBucketArea);
|
||||
|
||||
-- Convert table and column names to uppercase to match data dictionary
|
||||
vTableName := UPPER(pTableName);
|
||||
vSchemaName := UPPER(pSchemaName);
|
||||
vKeyColumnName := UPPER(pKeyColumnName);
|
||||
|
||||
-- Check if table exists
|
||||
SELECT COUNT(*) INTO vCount
|
||||
FROM all_tables
|
||||
WHERE table_name = vTableName
|
||||
AND owner = vSchemaName;
|
||||
|
||||
IF vCount = 0 THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_TABLE_NOT_EXISTS, ENV_MANAGER.MSG_TABLE_NOT_EXISTS);
|
||||
END IF;
|
||||
|
||||
-- Check if key column exists
|
||||
SELECT COUNT(*) INTO vCount
|
||||
FROM all_tab_columns
|
||||
WHERE table_name = vTableName
|
||||
AND column_name = vKeyColumnName
|
||||
AND owner = vSchemaName;
|
||||
|
||||
IF vCount = 0 THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_COLUMN_NOT_EXISTS, ENV_MANAGER.MSG_COLUMN_NOT_EXISTS);
|
||||
END IF;
|
||||
|
||||
-- Validate pColumnList - check if all column names exist in the table
|
||||
IF pColumnList IS NOT NULL THEN
|
||||
DECLARE
|
||||
vColumnName VARCHAR2(128);
|
||||
vColumns VARCHAR2(32767);
|
||||
vPos PLS_INTEGER;
|
||||
vNextPos PLS_INTEGER;
|
||||
vCurrentCol VARCHAR2(128);
|
||||
BEGIN
|
||||
-- Remove spaces and convert to uppercase for processing
|
||||
vColumns := UPPER(REPLACE(pColumnList, ' ', ''));
|
||||
vPos := 1;
|
||||
|
||||
-- Parse comma-separated column list
|
||||
WHILE vPos <= LENGTH(vColumns) LOOP
|
||||
vNextPos := INSTR(vColumns, ',', vPos);
|
||||
IF vNextPos = 0 THEN
|
||||
vNextPos := LENGTH(vColumns) + 1;
|
||||
END IF;
|
||||
|
||||
vCurrentCol := SUBSTR(vColumns, vPos, vNextPos - vPos);
|
||||
|
||||
-- Remove table alias prefix if present (e.g., 'T.COLUMN_NAME' -> 'COLUMN_NAME')
|
||||
IF INSTR(vCurrentCol, '.') > 0 THEN
|
||||
vCurrentCol := SUBSTR(vCurrentCol, INSTR(vCurrentCol, '.') + 1);
|
||||
END IF;
|
||||
|
||||
-- Check if column exists in the table
|
||||
SELECT COUNT(*) INTO vCount
|
||||
FROM all_tab_columns
|
||||
WHERE table_name = vTableName
|
||||
AND column_name = vCurrentCol
|
||||
AND owner = vSchemaName;
|
||||
|
||||
IF vCount = 0 THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_COLUMN_NOT_EXISTS, ENV_MANAGER.MSG_COLUMN_NOT_EXISTS);
|
||||
END IF;
|
||||
|
||||
vPos := vNextPos + 1;
|
||||
END LOOP;
|
||||
END;
|
||||
END IF;
|
||||
|
||||
-- Process column list to add T. prefix to each column
|
||||
vProcessedColumnList := processColumnList(pColumnList, vTableName, vSchemaName, vKeyColumnName);
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Input column list: ' || NVL(pColumnList, 'NULL (building dynamic list from table metadata)'), 'DEBUG', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Processed column list: ' || vProcessedColumnList, 'DEBUG', vParameters);
|
||||
|
||||
vTableName := DBMS_ASSERT.SCHEMA_NAME(vSchemaName) || '.' || DBMS_ASSERT.simple_sql_name(vTableName);
|
||||
-- Fetch unique key values
|
||||
vSql := 'SELECT DISTINCT TO_CHAR(L.LOAD_START,''YYYY'') AS YR, TO_CHAR(L.LOAD_START,''MM'') AS MN
|
||||
FROM ' || vTableName || ' T, CT_ODS.A_LOAD_HISTORY L
|
||||
WHERE T.' || DBMS_ASSERT.simple_sql_name(vKeyColumnName) || ' = L.A_ETL_LOAD_SET_KEY
|
||||
AND L.LOAD_START >= :pMinDate
|
||||
AND L.LOAD_START < :pMaxDate
|
||||
' ;
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Executing date range query: ' || vSql, 'DEBUG', vParameters);
|
||||
EXECUTE IMMEDIATE vSql BULK COLLECT INTO vKeyValuesYear, vKeyValuesMonth USING pMinDate, pMaxDate;
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Found ' || vKeyValuesYear.COUNT || ' year/month combinations to export', 'DEBUG', vParameters);
|
||||
|
||||
-- Loop over each unique key value
|
||||
FOR i IN 1 .. vKeyValuesYear.COUNT LOOP
|
||||
vKeyValueYear := vKeyValuesYear(i);
|
||||
vKeyValueMonth := vKeyValuesMonth(i);
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Processing Year/Month: ' || vKeyValueYear || '/' || vKeyValueMonth || ' (' || i || '/' || vKeyValuesYear.COUNT || ')', 'DEBUG', vParameters);
|
||||
-- Construct the query to extract data for the current key value
|
||||
-- Note: processColumnList already handles A_WORKFLOW_HISTORY_KEY aliasing
|
||||
|
||||
vQuery := 'SELECT ' || vProcessedColumnList || '
|
||||
FROM ' || vTableName || ' T, CT_ODS.A_LOAD_HISTORY L
|
||||
WHERE T.' || DBMS_ASSERT.simple_sql_name(vKeyColumnName) || ' = L.A_ETL_LOAD_SET_KEY
|
||||
AND TO_CHAR(L.LOAD_START,''YYYY'') = ' || CHR(39) || vKeyValueYear || CHR(39) || '
|
||||
AND TO_CHAR(L.LOAD_START,''MM'') = ' || CHR(39) || vKeyValueMonth || CHR(39) || '
|
||||
AND L.LOAD_START >= TO_DATE(' || CHR(39) || TO_CHAR(pMinDate, 'YYYY-MM-DD HH24:MI:SS') || CHR(39) || ', ''YYYY-MM-DD HH24:MI:SS'')
|
||||
AND L.LOAD_START < TO_DATE(' || CHR(39) || TO_CHAR(pMaxDate, 'YYYY-MM-DD HH24:MI:SS') || CHR(39) || ', ''YYYY-MM-DD HH24:MI:SS'')';
|
||||
|
||||
-- Construct the URI for the file in OCI Object Storage
|
||||
vUri := vBucketUri ||
|
||||
CASE WHEN pFolderName IS NOT NULL THEN pFolderName || '/' ELSE '' END ||
|
||||
'PARTITION_YEAR=' || sanitizeFilename(vKeyValueYear) || '/' ||
|
||||
'PARTITION_MONTH=' || sanitizeFilename(vKeyValueMonth) || '/' ||
|
||||
sanitizeFilename(vKeyValueYear) || sanitizeFilename(vKeyValueMonth) || '.parquet';
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Export query: ' || vQuery, 'DEBUG', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Parquet export URI: ' || vUri, 'DEBUG', vParameters);
|
||||
|
||||
-- Use DBMS_CLOUD package to export data to the URI
|
||||
DBMS_CLOUD.EXPORT_DATA(
|
||||
credential_name => pCredentialName,
|
||||
file_uri_list => vUri,
|
||||
query => vQuery,
|
||||
format => json_object('type' VALUE 'parquet')
|
||||
);
|
||||
END LOOP;
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('End','INFO',vParameters);
|
||||
EXCEPTION
|
||||
WHEN ENV_MANAGER.ERR_TABLE_NOT_EXISTS THEN
|
||||
vgMsgTmp := ENV_MANAGER.MSG_TABLE_NOT_EXISTS ||': '||vTableName;
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_TABLE_NOT_EXISTS, vgMsgTmp);
|
||||
WHEN ENV_MANAGER.ERR_COLUMN_NOT_EXISTS THEN
|
||||
vgMsgTmp := ENV_MANAGER.MSG_COLUMN_NOT_EXISTS || ' (TableName.ColumnName): ' || vTableName||'.'||vKeyColumnName||CASE WHEN vCurrentCol IS NOT NULL THEN '.'||vCurrentCol||' in pColumnList' ELSE '' END;
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_COLUMN_NOT_EXISTS, vgMsgTmp);
|
||||
WHEN OTHERS THEN
|
||||
-- Log complete error details including full stack trace and backtrace
|
||||
ENV_MANAGER.LOG_PROCESS_ERROR('Export failed: ' || SQLERRM, vParameters, 'DATA_EXPORTER');
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_UNKNOWN, ENV_MANAGER.GET_ERROR_STACK(pFormat => 'OUTPUT', pCode=> SQLCODE));
|
||||
|
||||
END EXPORT_TABLE_DATA_BY_DATE;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* @name EXPORT_TABLE_DATA_TO_CSV_BY_DATE
|
||||
* @desc Exports data to a single CSV file with date filtering.
|
||||
* Unlike EXPORT_TABLE_DATA_BY_DATE, this procedure creates one CSV file
|
||||
* instead of multiple Parquet files partitioned by year/month.
|
||||
* Uses the same date filtering mechanism with CT_ODS.A_LOAD_HISTORY.
|
||||
* Allows specifying custom column list or uses T.* if pColumnList is NULL.
|
||||
* Validates that all columns in pColumnList exist in the target table.
|
||||
* Automatically adds 'T.' prefix to column names in pColumnList.
|
||||
* @example
|
||||
* begin
|
||||
* DATA_EXPORTER.EXPORT_TABLE_DATA_TO_CSV_BY_DATE(
|
||||
* pSchemaName => 'CT_MRDS',
|
||||
* pTableName => 'MY_TABLE',
|
||||
* pKeyColumnName => 'A_ETL_LOAD_SET_KEY_FK',
|
||||
* pBucketArea => 'DATA',
|
||||
* pFolderName => 'exports',
|
||||
* pFileName => 'my_export.csv',
|
||||
* pColumnList => 'COLUMN1, COLUMN2, COLUMN3', -- Optional
|
||||
* pMinDate => DATE '2024-01-01',
|
||||
* pMaxDate => SYSDATE
|
||||
* );
|
||||
* end;
|
||||
**/
|
||||
PROCEDURE EXPORT_TABLE_DATA_TO_CSV_BY_DATE (
|
||||
pSchemaName IN VARCHAR2,
|
||||
pTableName IN VARCHAR2,
|
||||
pKeyColumnName IN VARCHAR2,
|
||||
pBucketArea IN VARCHAR2,
|
||||
pFolderName IN VARCHAR2,
|
||||
pFileName IN VARCHAR2 DEFAULT NULL,
|
||||
pColumnList IN VARCHAR2 default NULL,
|
||||
pMinDate IN DATE default DATE '1900-01-01',
|
||||
pMaxDate IN DATE default SYSDATE,
|
||||
pCredentialName IN VARCHAR2 default ENV_MANAGER.gvCredentialName
|
||||
)
|
||||
IS
|
||||
-- Type definition for key values
|
||||
TYPE key_value_tab IS TABLE OF VARCHAR2(4000);
|
||||
|
||||
vKeyValuesYear key_value_tab;
|
||||
vKeyValuesMonth key_value_tab;
|
||||
|
||||
vCount INTEGER;
|
||||
vSql VARCHAR2(4000);
|
||||
vKeyValueYear VARCHAR2(4000);
|
||||
vKeyValueMonth VARCHAR2(4000);
|
||||
vQuery VARCHAR2(32767);
|
||||
vUri VARCHAR2(4000);
|
||||
vDataType VARCHAR2(30);
|
||||
vTableName VARCHAR2(128);
|
||||
vSchemaName VARCHAR2(128);
|
||||
vKeyColumnName VARCHAR2(128);
|
||||
vParameters CT_MRDS.A_PROCESS_LOG.PROCEDURE_PARAMETERS%TYPE;
|
||||
vFileBaseName VARCHAR2(4000);
|
||||
vFileExtension VARCHAR2(10);
|
||||
vProcessedColumnList VARCHAR2(32767);
|
||||
vBucketUri VARCHAR2(4000);
|
||||
vCurrentCol VARCHAR2(128);
|
||||
|
||||
-- Function to sanitize file names
|
||||
FUNCTION sanitizeFilename(pFilename IN VARCHAR2) RETURN VARCHAR2 IS
|
||||
vFilename VARCHAR2(1000);
|
||||
BEGIN
|
||||
-- Replace any disallowed characters with underscores
|
||||
vFilename := REGEXP_REPLACE(pFilename, '[^a-zA-Z0-9._-]', '_');
|
||||
RETURN vFilename;
|
||||
END sanitizeFilename;
|
||||
|
||||
BEGIN
|
||||
vParameters := ENV_MANAGER.FORMAT_PARAMETERS(SYS.ODCIVARCHAR2LIST( 'pSchemaName => '''||nvl(pSchemaName, 'NULL')||''''
|
||||
,'pTableName => '''||nvl(pTableName, 'NULL')||''''
|
||||
,'pKeyColumnName => '''||nvl(pKeyColumnName, 'NULL')||''''
|
||||
,'pBucketArea => '''||nvl(pBucketArea, 'NULL')||''''
|
||||
,'pFolderName => '''||nvl(pFolderName, 'NULL')||''''
|
||||
,'pFileName => '''||nvl(pFileName, 'NULL')||''''
|
||||
,'pColumnList => '''||nvl(pColumnList, 'NULL')||''''
|
||||
,'pMinDate => '''||nvl(TO_CHAR(pMinDate, 'YYYY-MM-DD HH24:MI:SS'), 'NULL')||''''
|
||||
,'pMaxDate => '''||nvl(TO_CHAR(pMaxDate, 'YYYY-MM-DD HH24:MI:SS'), 'NULL')||''''
|
||||
,'pCredentialName => '''||nvl(pCredentialName, 'NULL')||''''
|
||||
));
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Start','INFO', vParameters);
|
||||
|
||||
-- Get bucket URI based on bucket area using FILE_MANAGER function
|
||||
vBucketUri := FILE_MANAGER.GET_BUCKET_URI(pBucketArea);
|
||||
|
||||
-- Convert table and column names to uppercase to match data dictionary
|
||||
vTableName := UPPER(pTableName);
|
||||
vSchemaName := UPPER(pSchemaName);
|
||||
vKeyColumnName := UPPER(pKeyColumnName);
|
||||
|
||||
-- Extract base filename and extension or construct default filename
|
||||
IF pFileName IS NOT NULL THEN
|
||||
-- Use provided filename
|
||||
IF INSTR(pFileName, '.') > 0 THEN
|
||||
vFileBaseName := SUBSTR(pFileName, 1, INSTR(pFileName, '.', -1) - 1);
|
||||
vFileExtension := SUBSTR(pFileName, INSTR(pFileName, '.', -1));
|
||||
ELSE
|
||||
vFileBaseName := pFileName;
|
||||
vFileExtension := '.csv';
|
||||
END IF;
|
||||
ELSE
|
||||
-- Construct default filename: TABLENAME.csv (without date range)
|
||||
vFileBaseName := UPPER(pTableName);
|
||||
vFileExtension := '.csv';
|
||||
END IF;
|
||||
|
||||
-- Check if table exists
|
||||
SELECT COUNT(*) INTO vCount
|
||||
FROM all_tables
|
||||
WHERE table_name = vTableName
|
||||
AND owner = vSchemaName;
|
||||
|
||||
IF vCount = 0 THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_TABLE_NOT_EXISTS, ENV_MANAGER.MSG_TABLE_NOT_EXISTS);
|
||||
END IF;
|
||||
|
||||
-- Check if key column exists
|
||||
SELECT COUNT(*) INTO vCount
|
||||
FROM all_tab_columns
|
||||
WHERE table_name = vTableName
|
||||
AND column_name = vKeyColumnName
|
||||
AND owner = vSchemaName;
|
||||
|
||||
IF vCount = 0 THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_COLUMN_NOT_EXISTS, ENV_MANAGER.MSG_COLUMN_NOT_EXISTS);
|
||||
END IF;
|
||||
|
||||
-- Validate pColumnList - check if all column names exist in the table
|
||||
IF pColumnList IS NOT NULL THEN
|
||||
DECLARE
|
||||
vColumnName VARCHAR2(128);
|
||||
vColumns VARCHAR2(32767);
|
||||
vPos PLS_INTEGER;
|
||||
vNextPos PLS_INTEGER;
|
||||
vCurrentCol VARCHAR2(128);
|
||||
BEGIN
|
||||
-- Remove spaces and convert to uppercase for processing
|
||||
vColumns := UPPER(REPLACE(pColumnList, ' ', ''));
|
||||
vPos := 1;
|
||||
|
||||
-- Parse comma-separated column list
|
||||
WHILE vPos <= LENGTH(vColumns) LOOP
|
||||
vNextPos := INSTR(vColumns, ',', vPos);
|
||||
IF vNextPos = 0 THEN
|
||||
vNextPos := LENGTH(vColumns) + 1;
|
||||
END IF;
|
||||
|
||||
vCurrentCol := SUBSTR(vColumns, vPos, vNextPos - vPos);
|
||||
|
||||
-- Remove table alias prefix if present (e.g., 'T.COLUMN_NAME' -> 'COLUMN_NAME')
|
||||
IF INSTR(vCurrentCol, '.') > 0 THEN
|
||||
vCurrentCol := SUBSTR(vCurrentCol, INSTR(vCurrentCol, '.') + 1);
|
||||
END IF;
|
||||
|
||||
-- Check if column exists in the table
|
||||
SELECT COUNT(*) INTO vCount
|
||||
FROM all_tab_columns
|
||||
WHERE table_name = vTableName
|
||||
AND column_name = vCurrentCol
|
||||
AND owner = vSchemaName;
|
||||
|
||||
IF vCount = 0 THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_COLUMN_NOT_EXISTS, ENV_MANAGER.MSG_COLUMN_NOT_EXISTS);
|
||||
END IF;
|
||||
|
||||
vPos := vNextPos + 1;
|
||||
END LOOP;
|
||||
END;
|
||||
END IF;
|
||||
|
||||
-- Process column list to add T. prefix to each column
|
||||
vProcessedColumnList := processColumnList(pColumnList, vTableName, vSchemaName, vKeyColumnName);
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Input column list: ' || NVL(pColumnList, 'NULL (using dynamic column list)'), 'DEBUG', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Processed column list: ' || vProcessedColumnList, 'DEBUG', vParameters);
|
||||
|
||||
-- Get the data type of the key column
|
||||
SELECT data_type INTO vDataType
|
||||
FROM all_tab_columns
|
||||
WHERE table_name = vTableName
|
||||
AND column_name = vKeyColumnName
|
||||
AND owner = vSchemaName;
|
||||
|
||||
vTableName := DBMS_ASSERT.SCHEMA_NAME(vSchemaName) || '.' || DBMS_ASSERT.simple_sql_name(vTableName);
|
||||
|
||||
-- Fetch unique year/month combinations
|
||||
vSql := 'SELECT DISTINCT TO_CHAR(L.LOAD_START,''YYYY'') AS YR, TO_CHAR(L.LOAD_START,''MM'') AS MN
|
||||
FROM ' || vTableName || ' T, CT_ODS.A_LOAD_HISTORY L
|
||||
WHERE T.' || DBMS_ASSERT.simple_sql_name(vKeyColumnName) || ' = L.A_ETL_LOAD_SET_KEY
|
||||
AND L.LOAD_START >= :pMinDate
|
||||
AND L.LOAD_START < :pMaxDate
|
||||
' ;
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Executing date range query: ' || vSql, 'DEBUG', vParameters);
|
||||
EXECUTE IMMEDIATE vSql BULK COLLECT INTO vKeyValuesYear, vKeyValuesMonth USING pMinDate, pMaxDate;
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Found ' || vKeyValuesYear.COUNT || ' year/month combinations to export', 'INFO', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Date range: ' || TO_CHAR(pMinDate, 'YYYY-MM-DD HH24:MI:SS') || ' to ' || TO_CHAR(pMaxDate, 'YYYY-MM-DD HH24:MI:SS'), 'DEBUG', vParameters);
|
||||
|
||||
-- Loop over each unique year/month combination
|
||||
FOR i IN 1 .. vKeyValuesYear.COUNT LOOP
|
||||
vKeyValueYear := vKeyValuesYear(i);
|
||||
vKeyValueMonth := vKeyValuesMonth(i);
|
||||
|
||||
-- Construct the query to extract data for the current year/month
|
||||
vQuery := 'SELECT ' || vProcessedColumnList || '
|
||||
FROM ' || vTableName || ' T, CT_ODS.A_LOAD_HISTORY L
|
||||
WHERE T.' || DBMS_ASSERT.simple_sql_name(vKeyColumnName) || ' = L.A_ETL_LOAD_SET_KEY
|
||||
AND TO_CHAR(L.LOAD_START,''YYYY'') = ' || CHR(39) || vKeyValueYear || CHR(39) || '
|
||||
AND TO_CHAR(L.LOAD_START,''MM'') = ' || CHR(39) || vKeyValueMonth || CHR(39) || '
|
||||
AND L.LOAD_START >= TO_DATE(' || CHR(39) || TO_CHAR(pMinDate, 'YYYY-MM-DD HH24:MI:SS') || CHR(39) || ', ''YYYY-MM-DD HH24:MI:SS'')
|
||||
AND L.LOAD_START < TO_DATE(' || CHR(39) || TO_CHAR(pMaxDate, 'YYYY-MM-DD HH24:MI:SS') || CHR(39) || ', ''YYYY-MM-DD HH24:MI:SS'')';
|
||||
|
||||
-- Construct the URI for the CSV file in OCI Object Storage
|
||||
vUri := vBucketUri ||
|
||||
CASE WHEN pFolderName IS NOT NULL THEN pFolderName || '/' ELSE '' END ||
|
||||
sanitizeFilename(vFileBaseName) || '_' ||
|
||||
sanitizeFilename(vKeyValueYear) || sanitizeFilename(vKeyValueMonth) ||
|
||||
vFileExtension;
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Exporting to CSV file: ' || vUri, 'INFO', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Processing Year/Month: ' || vKeyValueYear || '/' || vKeyValueMonth || ' (' || i || '/' || vKeyValuesYear.COUNT || ')', 'DEBUG', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Export query: ' || vQuery, 'DEBUG', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('File name pattern: ' || vFileBaseName || '_' || vKeyValueYear || vKeyValueMonth || vFileExtension, 'DEBUG', vParameters);
|
||||
|
||||
-- Use DBMS_CLOUD package to export data to CSV file
|
||||
DBMS_CLOUD.EXPORT_DATA(
|
||||
credential_name => pCredentialName,
|
||||
file_uri_list => vUri,
|
||||
query => vQuery,
|
||||
format => json_object('type' VALUE 'CSV', 'header' VALUE true)
|
||||
);
|
||||
END LOOP;
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Export completed successfully for ' || vKeyValuesYear.COUNT || ' files', 'INFO', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('End','INFO',vParameters);
|
||||
|
||||
EXCEPTION
|
||||
WHEN ENV_MANAGER.ERR_TABLE_NOT_EXISTS THEN
|
||||
vgMsgTmp := ENV_MANAGER.MSG_TABLE_NOT_EXISTS ||': '||vTableName;
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_TABLE_NOT_EXISTS, vgMsgTmp);
|
||||
WHEN ENV_MANAGER.ERR_COLUMN_NOT_EXISTS THEN
|
||||
vgMsgTmp := ENV_MANAGER.MSG_COLUMN_NOT_EXISTS || ' (TableName.ColumnName): ' || vTableName||'.'||vKeyColumnName||CASE WHEN vCurrentCol IS NOT NULL THEN '.'||vCurrentCol||' in pColumnList' ELSE '' END;
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_COLUMN_NOT_EXISTS, vgMsgTmp);
|
||||
WHEN OTHERS THEN
|
||||
-- Log complete error details including full stack trace and backtrace
|
||||
ENV_MANAGER.LOG_PROCESS_ERROR('Export failed: ' || SQLERRM, vParameters, 'DATA_EXPORTER');
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_UNKNOWN, ENV_MANAGER.GET_ERROR_STACK(pFormat => 'OUTPUT', pCode=> SQLCODE));
|
||||
|
||||
END EXPORT_TABLE_DATA_TO_CSV_BY_DATE;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
-- VERSION MANAGEMENT FUNCTIONS
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
FUNCTION GET_VERSION RETURN VARCHAR2 IS
|
||||
BEGIN
|
||||
RETURN PACKAGE_VERSION;
|
||||
END GET_VERSION;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
FUNCTION GET_BUILD_INFO RETURN VARCHAR2 IS
|
||||
BEGIN
|
||||
RETURN ENV_MANAGER.GET_PACKAGE_VERSION_INFO(
|
||||
pPackageName => 'DATA_EXPORTER',
|
||||
pVersion => PACKAGE_VERSION,
|
||||
pBuildDate => PACKAGE_BUILD_DATE,
|
||||
pAuthor => PACKAGE_AUTHOR
|
||||
);
|
||||
END GET_BUILD_INFO;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
FUNCTION GET_VERSION_HISTORY RETURN VARCHAR2 IS
|
||||
BEGIN
|
||||
RETURN ENV_MANAGER.FORMAT_VERSION_HISTORY(
|
||||
pPackageName => 'DATA_EXPORTER',
|
||||
pVersionHistory => VERSION_HISTORY
|
||||
);
|
||||
END GET_VERSION_HISTORY;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
END;
|
||||
|
||||
/
|
||||
@@ -0,0 +1,166 @@
|
||||
create or replace PACKAGE CT_MRDS.DATA_EXPORTER
|
||||
AUTHID CURRENT_USER
|
||||
AS
|
||||
/**
|
||||
* Data Export Package: Provides comprehensive data export capabilities to various formats (CSV, Parquet)
|
||||
* with support for cloud storage integration via Oracle Cloud Infrastructure (OCI).
|
||||
* The structure of comment is used by GET_PACKAGE_DOCUMENTATION function
|
||||
* which returns documentation text for confluence page (to Copy-Paste it).
|
||||
**/
|
||||
|
||||
-- Package Version Information
|
||||
PACKAGE_VERSION CONSTANT VARCHAR2(10) := '2.1.1';
|
||||
PACKAGE_BUILD_DATE CONSTANT VARCHAR2(19) := '2025-12-04 13:10:00';
|
||||
PACKAGE_AUTHOR CONSTANT VARCHAR2(50) := 'MRDS Development Team';
|
||||
|
||||
-- Version History (last 3-5 changes)
|
||||
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
|
||||
'v2.1.1 (2025-12-04): Fixed JOIN column reference A_WORKFLOW_HISTORY_KEY -> A_ETL_LOAD_SET_KEY, added consistent column mapping and dynamic column list to EXPORT_TABLE_DATA procedure, enhanced DEBUG logging for all export operations' || CHR(10) ||
|
||||
'v2.1.1 (2025-12-04): Fixed JOIN column reference A_WORKFLOW_HISTORY_KEY -> A_ETL_LOAD_SET_KEY' || CHR(10) ||
|
||||
'v2.1.0 (2025-10-22): Added version tracking and PARTITION_YEAR/PARTITION_MONTH support' || CHR(10) ||
|
||||
'v2.0.0 (2025-10-01): Separated export functionality from FILE_MANAGER package' || CHR(10) ||
|
||||
'v1.0.0 (2025-09-15): Initial implementation within FILE_MANAGER package' || CHR(10);
|
||||
|
||||
cgBL CONSTANT VARCHAR2(2) := CHR(13)||CHR(10);
|
||||
vgMsgTmp VARCHAR2(32000);
|
||||
|
||||
---------------------------------------------------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* @name EXPORT_TABLE_DATA
|
||||
* @desc Wrapper procedure for DBMS_CLOUD.EXPORT_DATA.
|
||||
* Exports data into CSV file on OCI infrustructure.
|
||||
* pBucketArea parameter accepts: 'INBOX', 'ODS', 'DATA', 'ARCHIVE'
|
||||
* @example
|
||||
* begin
|
||||
* DATA_EXPORTER.EXPORT_TABLE_DATA(
|
||||
* pSchemaName => 'CT_MRDS',
|
||||
* pTableName => 'MY_TABLE',
|
||||
* pKeyColumnName => 'A_ETL_LOAD_SET_KEY_FK',
|
||||
* pBucketArea => 'DATA',
|
||||
* pFolderName => 'csv_exports'
|
||||
* );
|
||||
* end;
|
||||
**/
|
||||
PROCEDURE EXPORT_TABLE_DATA (
|
||||
pSchemaName IN VARCHAR2,
|
||||
pTableName IN VARCHAR2,
|
||||
pKeyColumnName IN VARCHAR2,
|
||||
pBucketArea IN VARCHAR2,
|
||||
pFolderName IN VARCHAR2,
|
||||
pCredentialName IN VARCHAR2 default ENV_MANAGER.gvCredentialName
|
||||
);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @name EXPORT_TABLE_DATA_BY_DATE
|
||||
* @desc Wrapper procedure for DBMS_CLOUD.EXPORT_DATA.
|
||||
* Exports data into PARQUET files on OCI infrustructure.
|
||||
* Each YEAR_MONTH pair goes to seperate file (implicit partitioning).
|
||||
* Allows specifying custom column list or uses T.* if pColumnList is NULL.
|
||||
* Validates that all columns in pColumnList exist in the target table.
|
||||
* Automatically adds 'T.' prefix to column names in pColumnList.
|
||||
* pBucketArea parameter accepts: 'INBOX', 'ODS', 'DATA', 'ARCHIVE'
|
||||
* @example
|
||||
* begin
|
||||
* DATA_EXPORTER.EXPORT_TABLE_DATA_BY_DATE(
|
||||
* pSchemaName => 'CT_MRDS',
|
||||
* pTableName => 'MY_TABLE',
|
||||
* pKeyColumnName => 'A_ETL_LOAD_SET_KEY_FK',
|
||||
* pBucketArea => 'DATA',
|
||||
* pFolderName => 'parquet_exports',
|
||||
* pColumnList => 'COLUMN1, COLUMN2, COLUMN3', -- Optional
|
||||
* pMinDate => DATE '2024-01-01',
|
||||
* pMaxDate => SYSDATE
|
||||
* );
|
||||
* end;
|
||||
**/
|
||||
PROCEDURE EXPORT_TABLE_DATA_BY_DATE (
|
||||
pSchemaName IN VARCHAR2,
|
||||
pTableName IN VARCHAR2,
|
||||
pKeyColumnName IN VARCHAR2,
|
||||
pBucketArea IN VARCHAR2,
|
||||
pFolderName IN VARCHAR2,
|
||||
pColumnList IN VARCHAR2 default NULL,
|
||||
pMinDate IN DATE default DATE '1900-01-01',
|
||||
pMaxDate IN DATE default SYSDATE,
|
||||
pCredentialName IN VARCHAR2 default ENV_MANAGER.gvCredentialName
|
||||
);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @name EXPORT_TABLE_DATA_TO_CSV_BY_DATE
|
||||
* @desc Exports data to separate CSV files partitioned by year and month.
|
||||
* Creates one CSV file for each year/month combination found in the data.
|
||||
* Uses the same date filtering mechanism with CT_ODS.A_LOAD_HISTORY as EXPORT_TABLE_DATA_BY_DATE,
|
||||
* but exports to CSV format instead of Parquet.
|
||||
* File naming pattern: {pFileName}_YYYYMM.csv or {TABLENAME}_YYYYMM.csv (if pFileName is NULL)
|
||||
* @example
|
||||
* begin
|
||||
* -- With custom filename
|
||||
* DATA_EXPORTER.EXPORT_TABLE_DATA_TO_CSV_BY_DATE(
|
||||
* pSchemaName => 'CT_MRDS',
|
||||
* pTableName => 'MY_TABLE',
|
||||
* pKeyColumnName => 'A_ETL_LOAD_SET_KEY_FK',
|
||||
* pBucketArea => 'DATA',
|
||||
* pFolderName => 'exports',
|
||||
* pFileName => 'my_export.csv',
|
||||
* pMinDate => DATE '2024-01-01',
|
||||
* pMaxDate => SYSDATE
|
||||
* );
|
||||
*
|
||||
* -- With auto-generated filename (based on table name only)
|
||||
* DATA_EXPORTER.EXPORT_TABLE_DATA_TO_CSV_BY_DATE(
|
||||
* pSchemaName => 'OU_TOP',
|
||||
* pTableName => 'AGGREGATED_ALLOTMENT',
|
||||
* pKeyColumnName => 'A_ETL_LOAD_SET_KEY_FK',
|
||||
* pBucketArea => 'ARCHIVE',
|
||||
* pFolderName => 'exports',
|
||||
* pMinDate => DATE '2025-09-01',
|
||||
* pMaxDate => DATE '2025-09-17'
|
||||
* );
|
||||
* -- This will create files like: AGGREGATED_ALLOTMENT_202509.csv, etc.
|
||||
* pBucketArea parameter accepts: 'INBOX', 'ODS', 'DATA', 'ARCHIVE'
|
||||
* end;
|
||||
**/
|
||||
PROCEDURE EXPORT_TABLE_DATA_TO_CSV_BY_DATE (
|
||||
pSchemaName IN VARCHAR2,
|
||||
pTableName IN VARCHAR2,
|
||||
pKeyColumnName IN VARCHAR2,
|
||||
pBucketArea IN VARCHAR2,
|
||||
pFolderName IN VARCHAR2,
|
||||
pFileName IN VARCHAR2 DEFAULT NULL,
|
||||
pColumnList IN VARCHAR2 default NULL,
|
||||
pMinDate IN DATE default DATE '1900-01-01',
|
||||
pMaxDate IN DATE default SYSDATE,
|
||||
pCredentialName IN VARCHAR2 default ENV_MANAGER.gvCredentialName
|
||||
);
|
||||
|
||||
---------------------------------------------------------------------------------------------------------------------------
|
||||
-- VERSION MANAGEMENT FUNCTIONS
|
||||
---------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Returns the current package version number
|
||||
* return: Version string in format X.Y.Z (e.g., '2.1.0')
|
||||
**/
|
||||
FUNCTION GET_VERSION RETURN VARCHAR2;
|
||||
|
||||
/**
|
||||
* Returns comprehensive build information including version, date, and author
|
||||
* return: Formatted string with complete build details
|
||||
**/
|
||||
FUNCTION GET_BUILD_INFO RETURN VARCHAR2;
|
||||
|
||||
/**
|
||||
* Returns the version history with recent changes
|
||||
* return: Multi-line string with version history
|
||||
**/
|
||||
FUNCTION GET_VERSION_HISTORY RETURN VARCHAR2;
|
||||
|
||||
END;
|
||||
|
||||
/
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,611 @@
|
||||
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.1.0';
|
||||
PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2025-10-22 20:57:00';
|
||||
PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
|
||||
|
||||
-- Version History (Latest changes first)
|
||||
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
|
||||
'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_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;
|
||||
@@ -0,0 +1,443 @@
|
||||
create or replace PACKAGE BODY CT_MRDS.FILE_ARCHIVER
|
||||
AS
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
FUNCTION GET_TABLE_STAT(pSourceFileConfigKey IN NUMBER)
|
||||
RETURN CT_MRDS.A_TABLE_STAT%ROWTYPE
|
||||
IS
|
||||
vTableStat CT_MRDS.A_TABLE_STAT%ROWTYPE;
|
||||
vParameters CT_MRDS.A_PROCESS_LOG.PROCEDURE_PARAMETERS%TYPE;
|
||||
vCount PLS_INTEGER;
|
||||
vSourceFileType CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_TYPE%TYPE;
|
||||
|
||||
BEGIN
|
||||
vParameters := ENV_MANAGER.FORMAT_PARAMETERS(SYS.ODCIVARCHAR2LIST('pSourceFileConfigKey => '||nvl(to_char(pSourceFileConfigKey),NULL)));
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Start','DEBUG', vParameters);
|
||||
SELECT count(*) , min(SOURCE_FILE_TYPE)
|
||||
INTO vCount, vSourceFileType
|
||||
FROM CT_MRDS.A_TABLE_STAT s
|
||||
JOIN CT_MRDS.A_SOURCE_FILE_CONFIG c
|
||||
ON s.A_SOURCE_FILE_CONFIG_KEY = c.A_SOURCE_FILE_CONFIG_KEY
|
||||
WHERE s.A_SOURCE_FILE_CONFIG_KEY = pSourceFileConfigKey;
|
||||
|
||||
IF vCount=0 and vSourceFileType='INPUT' THEN
|
||||
GATHER_TABLE_STAT(pSourceFileConfigKey);
|
||||
END IF;
|
||||
|
||||
BEGIN
|
||||
SELECT *
|
||||
INTO vTableStat
|
||||
FROM CT_MRDS.A_TABLE_STAT
|
||||
WHERE A_SOURCE_FILE_CONFIG_KEY = pSourceFileConfigKey;
|
||||
-- EXCEPTION
|
||||
-- WHEN NO_DATA_FOUND THEN
|
||||
--
|
||||
END;
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('End','DEBUG',vParameters);
|
||||
RETURN vTableStat;
|
||||
|
||||
END GET_TABLE_STAT;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
PROCEDURE ARCHIVE_TABLE_DATA (
|
||||
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||
)
|
||||
IS
|
||||
vSourceFileConfig CT_MRDS.A_SOURCE_FILE_CONFIG%ROWTYPE;
|
||||
vTableStat CT_MRDS.A_TABLE_STAT%ROWTYPE;
|
||||
vQuery VARCHAR2(4000);
|
||||
vTableName VARCHAR2(200);
|
||||
vUri VARCHAR2(1000);
|
||||
vfiles T_FILENAMES;
|
||||
vFilename VARCHAR2(300);
|
||||
vOperationId NUMBER := -1;
|
||||
vParameters CT_MRDS.A_PROCESS_LOG.PROCEDURE_PARAMETERS%TYPE;
|
||||
vArchivalTriggeredBy VARCHAR2(60); -- Possible values: FILES_COUNT, ROWS_COUNT, BYTES_SUM
|
||||
vUserLoadOperations USER_LOAD_OPERATIONS%ROWTYPE;
|
||||
vProcessControlStatus VARCHAR2(60) := 'OK';
|
||||
|
||||
BEGIN
|
||||
vParameters := ENV_MANAGER.FORMAT_PARAMETERS(SYS.ODCIVARCHAR2LIST('pSourceFileConfigKey => '||nvl(to_char(pSourceFileConfigKey), 'NULL')));
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Start','INFO', vParameters);
|
||||
|
||||
vSourceFileConfig := FILE_MANAGER.GET_SOURCE_FILE_CONFIG(pSourceFileConfigKey => pSourceFileConfigKey);
|
||||
vTableStat := GET_TABLE_STAT(pSourceFileConfigKey => pSourceFileConfigKey);
|
||||
|
||||
if vSourceFileConfig.SOURCE_FILE_TYPE <> 'INPUT' then
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.MSG_NOT_INPUT_SOURCE_FILE_TYPE, 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_NOT_INPUT_SOURCE_FILE_TYPE, ENV_MANAGER.MSG_NOT_INPUT_SOURCE_FILE_TYPE);
|
||||
end if;
|
||||
|
||||
if vTableStat.created < sysdate-(vSourceFileConfig.HOURS_TO_EXPIRE_STATISTICS/24) then
|
||||
GATHER_TABLE_STAT(pSourceFileConfigKey => pSourceFileConfigKey);
|
||||
vTableStat := GET_TABLE_STAT(pSourceFileConfigKey => pSourceFileConfigKey);
|
||||
end if;
|
||||
|
||||
if vTableStat.OVER_ARCH_THRESOLD_FILE_COUNT >= vSourceFileConfig.FILES_COUNT_OVER_ARCHIVE_THRESHOLD then vArchivalTriggeredBy := 'FILES_COUNT';
|
||||
elsif vTableStat.OVER_ARCH_THRESOLD_ROW_COUNT >= vSourceFileConfig.ROWS_COUNT_OVER_ARCHIVE_THRESHOLD then vArchivalTriggeredBy := vArchivalTriggeredBy||', ROWS_COUNT';
|
||||
elsif vTableStat.OVER_ARCH_THRESOLD_SIZE >= vSourceFileConfig.BYTES_SUM_OVER_ARCHIVE_THRESHOLD then vArchivalTriggeredBy := vArchivalTriggeredBy||', BYTES_SUM';
|
||||
else ENV_MANAGER.LOG_PROCESS_EVENT('Non of archival triggers reached','INFO');
|
||||
end if;
|
||||
|
||||
if LENGTH(vArchivalTriggeredBy)>0 THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Archival Triggered By: '||vArchivalTriggeredBy,'INFO');
|
||||
vTableName := DBMS_ASSERT.SCHEMA_NAME(vSourceFileConfig.ODS_SCHEMA_NAME) || '.'||vSourceFileConfig.A_SOURCE_KEY||'_'||DBMS_ASSERT.simple_sql_name(vSourceFileConfig.TABLE_ID)||'_ODS';
|
||||
vQuery := '
|
||||
select t_filename(
|
||||
file$name
|
||||
,file$path
|
||||
, to_char(h.workflow_start,''yyyy'')
|
||||
, to_char(h.workflow_start,''mm'')
|
||||
)
|
||||
|
||||
from '||vTableName||' s
|
||||
join CT_MRDS.a_workflow_history h
|
||||
on s.a_workflow_history_key = h.a_workflow_history_key
|
||||
where extract(day from (systimestamp - workflow_start)) > '||vSourceFileConfig.DAYS_FOR_ARCHIVE_THRESHOLD
|
||||
;
|
||||
|
||||
-- Get all files that will be archived into "vfiles" collection ("regular data files")
|
||||
execute immediate vQuery bulk collect into vfiles;
|
||||
|
||||
-- Start EXPORT "regular data files" to parquet and DROP "csv"
|
||||
FOR ym_loop IN (select distinct year, month from table(vfiles) order by 1,2) LOOP
|
||||
dbms_output.put_line('year: '||ym_loop.year||' - '||'month: '||ym_loop.month);
|
||||
vQuery:=
|
||||
'select
|
||||
s.*
|
||||
-- ,r.partition_year
|
||||
-- ,r.partition_month
|
||||
from '|| vTableName ||' s
|
||||
join CT_MRDS.A_SOURCE_FILE_RECEIVED r
|
||||
on s.file$name = r.source_file_name
|
||||
and r.a_source_file_config_key = '||pSourceFileConfigKey||'
|
||||
and r.partition_year='''||ym_loop.year||'''
|
||||
and r.partition_month='''||ym_loop.month||'''
|
||||
and r.PROCESSING_STATUS = ''INGESTED''
|
||||
'
|
||||
;
|
||||
vUri := FILE_MANAGER.GET_BUCKET_URI('ARCHIVE')||vSourceFileConfig.A_SOURCE_KEY||'/'||vSourceFileConfig.TABLE_ID||'/PARTITION_YEAR='||ym_loop.year||'/PARTITION_MONTH='||ym_loop.month||'/';
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Start Archiving for YEAR_MONTH: '||ym_loop.year||'_'||ym_loop.month ,'INFO');
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Parameter for DBMS_CLOUD.EXPORT_DATA => file_uri_list' ,'DEBUG',vUri);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Parameter for DBMS_CLOUD.EXPORT_DATA => query' ,'DEBUG',vQuery);
|
||||
|
||||
|
||||
|
||||
BEGIN
|
||||
DBMS_CLOUD.EXPORT_DATA(
|
||||
credential_name => ENV_MANAGER.gvCredentialName,
|
||||
file_uri_list => vUri||'d' ,
|
||||
format => json_object('type' value 'parquet'),
|
||||
query => vQuery,
|
||||
operation_id => vOperationId
|
||||
);
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
vProcessControlStatus :='EXPORT_FAILURE';
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_EXP_DATA_FOR_ARCH_FAILED, ENV_MANAGER.MSG_EXP_DATA_FOR_ARCH_FAILED);
|
||||
|
||||
END;
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('vOperationId of export: '||vOperationId,'DEBUG');
|
||||
|
||||
-- Get USER_LOAD_OPERATIONS info
|
||||
select *
|
||||
into vUserLoadOperations
|
||||
from USER_LOAD_OPERATIONS
|
||||
where id = vOperationId;
|
||||
|
||||
IF vUserLoadOperations.STATUS <>'COMPLETED' THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_EXP_DATA_FOR_ARCH_FAILED,
|
||||
ENV_MANAGER.MSG_EXP_DATA_FOR_ARCH_FAILED ||cgBL|| ' Export ended with status '||vUserLoadOperations.STATUS);
|
||||
ELSIF vUserLoadOperations.STATUS = 'COMPLETED' and vUserLoadOperations.ROWS_LOADED = 0 THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_EXP_DATA_FOR_ARCH_FAILED,
|
||||
ENV_MANAGER.MSG_EXP_DATA_FOR_ARCH_FAILED ||cgBL|| ' Zero rows were exported.');
|
||||
ELSE
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Data exported to archival file for YEAR_MONTH: 2025_01','INFO', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(FILE_MANAGER.GET_DET_USER_LOAD_OPERATIONS (pOperationId => vOperationId),'DEBUG', vParameters);
|
||||
END IF;
|
||||
|
||||
SELECT
|
||||
object_name
|
||||
into vFilename
|
||||
from DBMS_CLOUD.LIST_OBJECTS(
|
||||
credential_name => 'OCI$RESOURCE_PRINCIPAL',
|
||||
location_uri => vUri)
|
||||
where TO_UTC_TIMESTAMP_TZ(REGEXP_REPLACE(object_name, '.*(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(\d{6})Z\.parquet$', '\1-\2-\3T\4:\5:\6.\7'))
|
||||
between vUserLoadOperations.START_TIME
|
||||
and vUserLoadOperations.UPDATE_TIME
|
||||
;
|
||||
|
||||
-- Try to drop EXPORTED FILES ("regular data files")
|
||||
BEGIN
|
||||
FOR f in (select filename, pathname from table(vfiles) where year = ym_loop.year and month = ym_loop.month) loop
|
||||
|
||||
-- first change of status
|
||||
BEGIN
|
||||
UPDATE CT_MRDS.A_SOURCE_FILE_RECEIVED r
|
||||
SET PROCESSING_STATUS = 'ARCHIVED'
|
||||
,ARCH_FILE_NAME = vUri||vFilename
|
||||
WHERE r.a_source_file_config_key= pSourceFileConfigKey
|
||||
AND r.source_file_name = f.filename
|
||||
AND r.processing_status = 'INGESTED'
|
||||
;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
vProcessControlStatus := 'CHANGE_STATUS_TO_ARCHIVED_FAILURE';
|
||||
END;
|
||||
EXIT WHEN vProcessControlStatus = 'CHANGE_STATUS_TO_ARCHIVED_FAILURE';
|
||||
|
||||
-- move file to trash before dropping
|
||||
BEGIN
|
||||
DBMS_CLOUD.MOVE_OBJECT(source_credential_name => ENV_MANAGER.gvCredentialName,
|
||||
source_object_uri => f.pathname||'/'||f.filename,
|
||||
target_object_uri => replace(f.pathname,'ODS','TRASH')||'/'||f.filename,
|
||||
target_credential_name => ENV_MANAGER.gvCredentialName
|
||||
);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('File moved to TRASH.','DEBUG', f.pathname||'/'||f.filename);
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Failed to move file to TRASH.','ERROR', f.pathname||'/'||f.filename);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
rollback;
|
||||
vProcessControlStatus := 'MOVE_FILE_TO_TRASH_FAILURE';
|
||||
END;
|
||||
EXIT WHEN vProcessControlStatus = 'MOVE_FILE_TO_TRASH_FAILURE';
|
||||
commit;
|
||||
END LOOP;
|
||||
|
||||
--------------------------------------------------------------------
|
||||
-- IF All goes fine till this point, we drop files from TRASH (if not then ROLLBACK PART)
|
||||
IF vProcessControlStatus = 'OK' THEN
|
||||
FOR f in (select filename, pathname from table(vfiles) where year = ym_loop.year and month = ym_loop.month) LOOP
|
||||
--Drop file from TRASH
|
||||
DBMS_CLOUD.DELETE_OBJECT(credential_name => ENV_MANAGER.gvCredentialName,
|
||||
object_uri => replace(f.pathname,'ODS','TRASH')||'/'||f.filename);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('File dropped from TRASH.','DEBUG', f.pathname||'/'||f.filename);
|
||||
END LOOP;
|
||||
|
||||
--ROLLBACK PART
|
||||
--ROLLBACK PROCESS in case of FAILURE (restore files from TRASH)
|
||||
ELSIF vProcessControlStatus = 'MOVE_FILE_TO_TRASH_FAILURE' THEN
|
||||
FOR f in ( SELECT vf.filename, vf.pathname
|
||||
FROM TABLE(vfiles) vf
|
||||
JOIN CT_MRDS.A_SOURCE_FILE_RECEIVED r
|
||||
ON r.source_file_name = vf.filename
|
||||
AND r.a_source_file_config_key = pSourceFileConfigKey
|
||||
AND r.PROCESSING_STATUS = 'ARCHIVED'
|
||||
AND vf.year = ym_loop.year
|
||||
AND vf.month = ym_loop.month
|
||||
) LOOP
|
||||
BEGIN
|
||||
DBMS_CLOUD.MOVE_OBJECT(source_credential_name => ENV_MANAGER.gvCredentialName,
|
||||
source_object_uri => replace(f.pathname,'ODS','TRASH')||'/'||f.filename,
|
||||
target_object_uri => f.pathname||'/'||f.filename,
|
||||
target_credential_name => ENV_MANAGER.gvCredentialName
|
||||
);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('File restored from TRASH.','DEBUG', f.pathname||'/'||f.filename);
|
||||
|
||||
UPDATE CT_MRDS.A_SOURCE_FILE_RECEIVED r
|
||||
SET PROCESSING_STATUS = 'INGESTED'
|
||||
,ARCH_FILE_NAME = NULL
|
||||
WHERE r.a_source_file_config_key = pSourceFileConfigKey
|
||||
AND r.source_file_name = f.filename
|
||||
;
|
||||
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Failed to restore file from TRASH.','ERROR', replace(f.pathname,'ODS','TRASH')||'/'||f.filename);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
vProcessControlStatus := 'RESTORE_FILE_FROM_TRASH_FAILURE';
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
DBMS_CLOUD.DELETE_OBJECT(credential_name => ENV_MANAGER.gvCredentialName,
|
||||
object_uri => vUri||vFilename);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('ROLLBACK operation: Archival PARQUET file dropped.','DEBUG', vUri||vFilename);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_MOVE_FILE_TO_TRASH_FAILED, ENV_MANAGER.MSG_MOVE_FILE_TO_TRASH_FAILED);
|
||||
|
||||
ELSIF vProcessControlStatus = 'CHANGE_STATUS_TO_ARCHIVED_FAILURE' THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.MSG_CHANGE_STAT_TO_ARCHIVED_FAILED, 'ERROR', vParameters);
|
||||
DBMS_CLOUD.DELETE_OBJECT(credential_name => ENV_MANAGER.gvCredentialName,
|
||||
object_uri => vUri||vFilename);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Archival PARQUET file dropped.','DEBUG', vUri||vFilename);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_CHANGE_STAT_TO_ARCHIVED_FAILED, ENV_MANAGER.MSG_CHANGE_STAT_TO_ARCHIVED_FAILED);
|
||||
|
||||
ELSIF vProcessControlStatus = 'RESTORE_FILE_FROM_TRASH_FAILURE' THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Some files were not restored from TRASH. Check A_PROCESS_LOG table for details','ERROR');
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_RESTORE_FILE_FROM_TRASH, ENV_MANAGER.MSG_RESTORE_FILE_FROM_TRASH);
|
||||
END IF;
|
||||
|
||||
EXCEPTION
|
||||
WHEN ENV_MANAGER.ERR_CHANGE_STAT_TO_ARCHIVED_FAILED THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_CHANGE_STAT_TO_ARCHIVED_FAILED, ENV_MANAGER.MSG_CHANGE_STAT_TO_ARCHIVED_FAILED);
|
||||
|
||||
WHEN ENV_MANAGER.ERR_MOVE_FILE_TO_TRASH_FAILED THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_MOVE_FILE_TO_TRASH_FAILED, ENV_MANAGER.MSG_MOVE_FILE_TO_TRASH_FAILED);
|
||||
|
||||
WHEN ENV_MANAGER.ERR_RESTORE_FILE_FROM_TRASH THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_RESTORE_FILE_FROM_TRASH, ENV_MANAGER.MSG_RESTORE_FILE_FROM_TRASH);
|
||||
|
||||
WHEN OTHERS THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Error during archiving process','ERROR');
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_DROP_EXPORTED_FILES_FAILED, ENV_MANAGER.MSG_DROP_EXPORTED_FILES_FAILED);
|
||||
END;
|
||||
-- END of "Try to drop EXPORTED FILES"
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('All archived files had been dropped.','INFO');
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('End Archiving for YEAR_MONTH: '||ym_loop.year||'_'||ym_loop.month ,'INFO');
|
||||
END LOOP; --ym_loop end (YEAR_MONTH)
|
||||
|
||||
COMMIT;
|
||||
|
||||
ELSE
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Non of archival thresholds reached. Skip archiving.'||vArchivalTriggeredBy,'INFO');
|
||||
END IF;
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('End','INFO',vParameters);
|
||||
EXCEPTION
|
||||
WHEN ENV_MANAGER.ERR_NOT_INPUT_SOURCE_FILE_TYPE THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.MSG_NOT_INPUT_SOURCE_FILE_TYPE , 'ERROR', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_NOT_INPUT_SOURCE_FILE_TYPE, ENV_MANAGER.GET_ERROR_STACK(pFormat => 'OUTPUT', pCode=> SQLCODE));
|
||||
|
||||
WHEN ENV_MANAGER.ERR_EXP_DATA_FOR_ARCH_FAILED THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.MSG_EXP_DATA_FOR_ARCH_FAILED , 'ERROR', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_EXP_DATA_FOR_ARCH_FAILED, ENV_MANAGER.GET_ERROR_STACK(pFormat => 'OUTPUT', pCode=> SQLCODE));
|
||||
|
||||
WHEN ENV_MANAGER.ERR_CHANGE_STAT_TO_ARCHIVED_FAILED THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_CHANGE_STAT_TO_ARCHIVED_FAILED, ENV_MANAGER.GET_ERROR_STACK(pFormat => 'OUTPUT', pCode=> SQLCODE));
|
||||
|
||||
WHEN ENV_MANAGER.ERR_MOVE_FILE_TO_TRASH_FAILED THEN
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_MOVE_FILE_TO_TRASH_FAILED, ENV_MANAGER.GET_ERROR_STACK(pFormat => 'OUTPUT', pCode=> SQLCODE));
|
||||
|
||||
WHEN OTHERS THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.MSG_UNKNOWN , 'ERROR', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_UNKNOWN, ENV_MANAGER.GET_ERROR_STACK(pFormat => 'OUTPUT', pCode=> SQLCODE));
|
||||
|
||||
END ARCHIVE_TABLE_DATA;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
PROCEDURE GATHER_TABLE_STAT (
|
||||
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||
) IS
|
||||
vParameters CT_MRDS.A_PROCESS_LOG.PROCEDURE_PARAMETERS%TYPE;
|
||||
vStats CT_MRDS.A_TABLE_STAT%ROWTYPE;
|
||||
vSourceFileConfig CT_MRDS.A_SOURCE_FILE_CONFIG%ROWTYPE;
|
||||
vTableName VARCHAR2(200);
|
||||
vQuery VARCHAR2(32000);
|
||||
BEGIN
|
||||
vParameters := ENV_MANAGER.FORMAT_PARAMETERS(SYS.ODCIVARCHAR2LIST('pSourceFileConfigKey => '||nvl(to_char(pSourceFileConfigKey), 'NULL')));
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('Start','INFO', vParameters);
|
||||
vSourceFileConfig := FILE_MANAGER.GET_SOURCE_FILE_CONFIG(pSourceFileConfigKey => pSourceFileConfigKey);
|
||||
|
||||
vTableName := DBMS_ASSERT.SCHEMA_NAME(vSourceFileConfig.ODS_SCHEMA_NAME) || '.'||vSourceFileConfig.A_SOURCE_KEY||'_'||DBMS_ASSERT.simple_sql_name(vSourceFileConfig.TABLE_ID)||'_ODS';
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('vTableName','DEBUG',vTableName);
|
||||
vQuery :=
|
||||
'with tmp as (
|
||||
select
|
||||
s.*
|
||||
,file$name as filename
|
||||
,h.workflow_start
|
||||
, to_char(h.workflow_start,''yyyy'') as year
|
||||
, to_char(h.workflow_start,''mm'') as month
|
||||
from '||vTableName||' s
|
||||
join CT_MRDS.a_workflow_history h
|
||||
on s.a_workflow_history_key = h.a_workflow_history_key
|
||||
)
|
||||
, tmp_gr as (
|
||||
select
|
||||
filename, count(*) as row_count_per_file, min(workflow_start) as workflow_start
|
||||
from tmp
|
||||
group by filename
|
||||
)
|
||||
select
|
||||
NULL as A_TABLE_STAT_KEY
|
||||
,'||pSourceFileConfigKey||' as A_SOURCE_FILE_CONFIG_KEY
|
||||
,'''||vTableName||''' as TABLE_NAME
|
||||
,count(*) as FILE_COUNT
|
||||
,sum(case when extract(day from (systimestamp - workflow_start)) > '||vSourceFileConfig.DAYS_FOR_ARCHIVE_THRESHOLD||' then 1 else 0 end) as OLD_FILE_COUNT
|
||||
,sum (row_count_per_file) as ROW_COUNT
|
||||
,sum(case when extract(day from (systimestamp - workflow_start)) > '||vSourceFileConfig.DAYS_FOR_ARCHIVE_THRESHOLD||' then row_count_per_file else 0 end) as OLD_ROW_COUNT
|
||||
,sum(r.bytes) as BYTES
|
||||
,sum(case when extract(day from (systimestamp - workflow_start)) > '||vSourceFileConfig.DAYS_FOR_ARCHIVE_THRESHOLD||' then r.bytes else 0 end) as OLD_BYTES
|
||||
,'||vSourceFileConfig.DAYS_FOR_ARCHIVE_THRESHOLD||' as DAYS_FOR_ARCHIVE_THRESHOLD
|
||||
,systimestamp as CREATED
|
||||
from tmp_gr t
|
||||
join (SELECT * from DBMS_CLOUD.LIST_OBJECTS(
|
||||
credential_name => '''||ENV_MANAGER.gvCredentialName||''',
|
||||
location_uri => FILE_MANAGER.GET_BUCKET_URI(''ODS'')||''ODS/'||vSourceFileConfig.A_SOURCE_KEY||'/'||vSourceFileConfig.TABLE_ID||'/''
|
||||
)
|
||||
) r
|
||||
on t.filename = r.object_name'
|
||||
;
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('vQuery','DEBUG',vQuery);
|
||||
execute immediate vQuery into vStats;
|
||||
|
||||
vStats.A_TABLE_STAT_KEY := CT_MRDS.A_TABLE_STAT_KEY_SEQ.NEXTVAL;
|
||||
insert into A_TABLE_STAT_HIST values vStats;
|
||||
delete from A_TABLE_STAT where A_SOURCE_FILE_CONFIG_KEY = pSourceFileConfigKey;
|
||||
insert into A_TABLE_STAT values vStats;
|
||||
COMMIT;
|
||||
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT('End','INFO',vParameters);
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.MSG_UNKNOWN , 'ERROR', vParameters);
|
||||
ENV_MANAGER.LOG_PROCESS_EVENT(ENV_MANAGER.GET_ERROR_STACK(pFormat => 'TABLE', pCode=> SQLCODE), 'ERROR', vParameters);
|
||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_UNKNOWN, ENV_MANAGER.GET_ERROR_STACK(pFormat => 'OUTPUT', pCode=> SQLCODE));
|
||||
END GATHER_TABLE_STAT;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
-- PACKAGE VERSION MANAGEMENT FUNCTIONS IMPLEMENTATION
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
FUNCTION GET_VERSION
|
||||
RETURN VARCHAR2
|
||||
IS
|
||||
BEGIN
|
||||
RETURN PACKAGE_VERSION;
|
||||
END GET_VERSION;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
FUNCTION GET_BUILD_INFO
|
||||
RETURN VARCHAR2
|
||||
IS
|
||||
BEGIN
|
||||
RETURN ENV_MANAGER.GET_PACKAGE_VERSION_INFO(
|
||||
pPackageName => 'FILE_ARCHIVER',
|
||||
pVersion => PACKAGE_VERSION,
|
||||
pBuildDate => PACKAGE_BUILD_DATE,
|
||||
pAuthor => PACKAGE_AUTHOR
|
||||
);
|
||||
END GET_BUILD_INFO;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
FUNCTION GET_VERSION_HISTORY
|
||||
RETURN VARCHAR2
|
||||
IS
|
||||
BEGIN
|
||||
RETURN ENV_MANAGER.FORMAT_VERSION_HISTORY(
|
||||
pPackageName => 'FILE_ARCHIVER',
|
||||
pVersionHistory => VERSION_HISTORY
|
||||
);
|
||||
END GET_VERSION_HISTORY;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
END;
|
||||
|
||||
/
|
||||
@@ -0,0 +1,90 @@
|
||||
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) := '2.0.0';
|
||||
PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2025-10-22 16:45:00';
|
||||
PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
|
||||
|
||||
-- Version History (Latest changes first)
|
||||
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
|
||||
'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 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).
|
||||
**/
|
||||
PROCEDURE ARCHIVE_TABLE_DATA (
|
||||
pSourceFileConfigKey IN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE
|
||||
);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @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
|
||||
);
|
||||
|
||||
---------------------------------------------------------------------------------------------------------------------------
|
||||
-- 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;
|
||||
|
||||
/
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,697 @@
|
||||
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.4.0';
|
||||
PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2025-11-27 14:00:00';
|
||||
PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
|
||||
|
||||
-- Version History (Latest changes first)
|
||||
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
|
||||
'3.4.0 (2025-11-27): MARS-1057 - Added CREATE_EXTERNAL_TABLES_SET and CREATE_EXTERNAL_TABLES_BATCH procedures for batch external table creation' || 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;
|
||||
|
||||
---------------------------------------------------------------------------------------------------------------------------
|
||||
-- EXTERNAL TABLE BATCH OPERATIONS (MARS-1057)
|
||||
---------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* @name CREATE_EXTERNAL_TABLES_SET
|
||||
* @desc Creates a complete set of 3 external tables (INBOX, ODS, ARCHIVE) for a single configuration
|
||||
* from A_SOURCE_FILE_CONFIG table. Automatically generates table names and paths following
|
||||
* official path patterns. Optionally drops and recreates existing tables.
|
||||
* @param pSourceFileConfigKey - Primary key from A_SOURCE_FILE_CONFIG table
|
||||
* @param pRecreate - If TRUE, drops existing tables before creating new ones; if FALSE, fails if tables exist
|
||||
* @example BEGIN
|
||||
* FILE_MANAGER.CREATE_EXTERNAL_TABLES_SET(
|
||||
* pSourceFileConfigKey => 123,
|
||||
* pRecreate => FALSE
|
||||
* );
|
||||
* END;
|
||||
* @ex_rslt Creates three external tables in ODS schema:
|
||||
* - C2D_A_UC_DISSEM_METADATA_LOADS_INBOX
|
||||
* - C2D_A_UC_DISSEM_METADATA_LOADS_ODS
|
||||
* - C2D_A_UC_DISSEM_METADATA_LOADS_ARCHIVE
|
||||
**/
|
||||
PROCEDURE CREATE_EXTERNAL_TABLES_SET (
|
||||
pSourceFileConfigKey IN NUMBER,
|
||||
pRecreate IN BOOLEAN DEFAULT FALSE
|
||||
);
|
||||
|
||||
/**
|
||||
* @name CREATE_EXTERNAL_TABLES_BATCH
|
||||
* @desc Creates external table sets for multiple configurations based on filter criteria.
|
||||
* Processes only INPUT type files from A_SOURCE_FILE_CONFIG. Creates 3 tables per configuration
|
||||
* (INBOX, ODS, ARCHIVE). Continues processing even if individual sets fail.
|
||||
* @param pSourceKey - Filter by A_SOURCE_KEY (NULL = all sources)
|
||||
* @param pSourceFileId - Filter by SOURCE_FILE_ID (NULL = all file types)
|
||||
* @param pTableId - Filter by TABLE_ID (NULL = all tables)
|
||||
* @param pRecreate - If TRUE, drops and recreates existing tables; if FALSE, skips if tables exist
|
||||
* @example -- Create all external tables for C2D source
|
||||
* BEGIN
|
||||
* FILE_MANAGER.CREATE_EXTERNAL_TABLES_BATCH(
|
||||
* pSourceKey => 'C2D',
|
||||
* pRecreate => FALSE
|
||||
* );
|
||||
* END;
|
||||
*
|
||||
* -- Recreate all external tables for all sources
|
||||
* BEGIN
|
||||
* FILE_MANAGER.CREATE_EXTERNAL_TABLES_BATCH(
|
||||
* pRecreate => TRUE
|
||||
* );
|
||||
* END;
|
||||
* @ex_rslt Returns summary: Total: 10, Processed: 9, Failed: 1
|
||||
**/
|
||||
PROCEDURE CREATE_EXTERNAL_TABLES_BATCH (
|
||||
pSourceKey IN VARCHAR2 DEFAULT NULL,
|
||||
pSourceFileId IN VARCHAR2 DEFAULT NULL,
|
||||
pTableId IN VARCHAR2 DEFAULT NULL,
|
||||
pRecreate IN BOOLEAN DEFAULT FALSE
|
||||
);
|
||||
|
||||
---------------------------------------------------------------------------------------------------------------------------
|
||||
-- PACKAGE VERSION MANAGEMENT FUNCTIONS
|
||||
---------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* @name GET_VERSION
|
||||
* @desc Returns the current version number of the FILE_MANAGER 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,215 @@
|
||||
CREATE OR REPLACE PACKAGE BODY CT_MRDS.WORKFLOW_MANAGER
|
||||
IS
|
||||
|
||||
FUNCTION INIT_WORKFLOW(pServiceName IN VARCHAR2, pWorkflowRunId IN VARCHAR2, pWorkflowName in VARCHAR2)
|
||||
RETURN NUMBER
|
||||
IS
|
||||
vWorkflowHistoryKey NUMBER;
|
||||
BEGIN
|
||||
vWorkflowHistoryKey := A_WORKFLOW_HISTORY_KEY_SEQ.NEXTVAL;
|
||||
INSERT INTO CT_MRDS.A_WORKFLOW_HISTORY (SERVICE_NAME, A_WORKFLOW_HISTORY_KEY, ORCHESTRATION_RUN_ID,
|
||||
WORKFLOW_NAME, WORKFLOW_START, WORKFLOW_SUCCESSFUL)
|
||||
VALUES (pServiceName, vWorkflowHistoryKey, pWorkflowRunId,
|
||||
pWorkflowName, SYSTIMESTAMP, vpRunningStatus);
|
||||
|
||||
return vWorkflowHistoryKey;
|
||||
|
||||
END INIT_WORKFLOW;
|
||||
|
||||
|
||||
--
|
||||
-- Overload without service name for backward compatability, to be cleaned up later
|
||||
--
|
||||
PROCEDURE FINALISE_WORKFLOW(pWorkflowHistoryKey IN NUMBER, pWorkflowStatus IN VARCHAR2)
|
||||
IS
|
||||
BEGIN
|
||||
FINALISE_WORKFLOW(pWorkflowHistoryKey, NULL, pWorkflowStatus);
|
||||
END;
|
||||
|
||||
PROCEDURE FINALISE_WORKFLOW(pWorkflowHistoryKey IN NUMBER, pServiceName IN VARCHAR2, pWorkflowStatus IN VARCHAR2)
|
||||
IS
|
||||
BEGIN
|
||||
UPDATE CT_MRDS.A_WORKFLOW_HISTORY SET WORKFLOW_SUCCESSFUL = pWorkflowStatus,
|
||||
WORKFLOW_END = SYSTIMESTAMP
|
||||
WHERE A_WORKFLOW_HISTORY_KEY = pWorkflowHistoryKey
|
||||
AND SERVICE_NAME = NVL(pServiceName,SERVICE_NAME);
|
||||
END FINALISE_WORKFLOW;
|
||||
|
||||
|
||||
FUNCTION INIT_TASK(pTaskRunId IN VARCHAR2, pTaskName in VARCHAR2, pWorkflowHistoryKey IN NUMBER)
|
||||
RETURN NUMBER
|
||||
IS
|
||||
vTaskHistoryKey NUMBER;
|
||||
BEGIN
|
||||
vTaskHistoryKey := A_TASK_HISTORY_KEY_SEQ.NEXTVAL;
|
||||
INSERT INTO CT_MRDS.A_TASK_HISTORY (A_TASK_HISTORY_KEY, TASK_RUN_ID, A_WORKFLOW_HISTORY_KEY,
|
||||
TASK_NAME, TASK_START, TASK_SUCCESSFUL, SERVICE_NAME)
|
||||
VALUES (vTaskHistoryKey, pTaskRunId, pWorkflowHistoryKey,
|
||||
pTaskName, SYSTIMESTAMP, vpRunningStatus, 'ODS');
|
||||
|
||||
return vTaskHistoryKey;
|
||||
|
||||
END INIT_TASK;
|
||||
|
||||
|
||||
PROCEDURE FINALISE_TASK(pTaskHistoryKey IN NUMBER, pTaskStatus IN VARCHAR2)
|
||||
IS
|
||||
BEGIN
|
||||
UPDATE CT_MRDS.A_TASK_HISTORY SET TASK_SUCCESSFUL = pTaskStatus,
|
||||
TASK_END = SYSTIMESTAMP
|
||||
WHERE A_TASK_HISTORY_KEY = pTaskHistoryKey;
|
||||
END FINALISE_TASK;
|
||||
|
||||
-- Internal helper function without COMMIT for use within other functions
|
||||
FUNCTION STORE_TASK_SOURCE_INFO_INTERNAL(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2, pNumRows IN NUMBER)
|
||||
RETURN NUMBER
|
||||
IS
|
||||
vTaskHistorySourceKey NUMBER;
|
||||
BEGIN
|
||||
vTaskHistorySourceKey := A_TASK_HISTORY_SOURCE_KEY_SEQ.NEXTVAL;
|
||||
INSERT INTO CT_MRDS.A_TASK_HISTORY_SOURCE (A_TASK_HISTORY_SOURCE_KEY, A_TASK_HISTORY_KEY,
|
||||
SOURCE_NAME, ROW_COUNT)
|
||||
VALUES (vTaskHistorySourceKey, pTaskHistoryKey,
|
||||
pSourceName, pNumRows);
|
||||
RETURN vTaskHistorySourceKey;
|
||||
END;
|
||||
|
||||
FUNCTION STORE_TASK_SOURCE_INFO(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2, pNumRows IN NUMBER)
|
||||
RETURN NUMBER
|
||||
IS
|
||||
vTaskHistorySourceKey NUMBER;
|
||||
BEGIN
|
||||
vTaskHistorySourceKey := STORE_TASK_SOURCE_INFO_INTERNAL(pTaskHistoryKey, pSourceName, pNumRows);
|
||||
COMMIT;
|
||||
RETURN vTaskHistorySourceKey;
|
||||
END;
|
||||
|
||||
-- Internal helper function without COMMIT for use within other functions
|
||||
FUNCTION STORE_TASK_TARGET_INFO_INTERNAL(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2,
|
||||
pNumRowsApplied IN NUMBER, pNumRowsRejected IN NUMBER,
|
||||
pLoadSuccessful IN VARCHAR2, pServiceName IN VARCHAR2)
|
||||
RETURN NUMBER
|
||||
IS
|
||||
vTaskHistoryTargetKey NUMBER;
|
||||
BEGIN
|
||||
vTaskHistoryTargetKey := A_TASK_HISTORY_TARGET_KEY_SEQ.NEXTVAL;
|
||||
INSERT INTO CT_MRDS.A_TASK_HISTORY_TARGET (A_TASK_HISTORY_TARGET_KEY, A_TASK_HISTORY_KEY,
|
||||
TARGET_NAME, ROW_COUNT_APPLIED, ROW_COUNT_REJECTED,
|
||||
LOAD_SUCCESSFUL, SERVICE_NAME)
|
||||
VALUES (vTaskHistoryTargetKey, pTaskHistoryKey,
|
||||
pSourceName, pNumRowsApplied, pNumRowsRejected,
|
||||
pLoadSuccessful, pServiceName);
|
||||
RETURN vTaskHistoryTargetKey;
|
||||
END;
|
||||
|
||||
FUNCTION STORE_TASK_TARGET_INFO(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2,
|
||||
pNumRowsApplied IN NUMBER, pNumRowsRejected IN NUMBER,
|
||||
pLoadSuccessful IN VARCHAR2, pServiceName IN VARCHAR2)
|
||||
RETURN NUMBER
|
||||
IS
|
||||
vTaskHistoryTargetKey NUMBER;
|
||||
BEGIN
|
||||
vTaskHistoryTargetKey := STORE_TASK_TARGET_INFO_INTERNAL(
|
||||
pTaskHistoryKey, pSourceName, pNumRowsApplied,
|
||||
pNumRowsRejected, pLoadSuccessful, pServiceName
|
||||
);
|
||||
COMMIT;
|
||||
RETURN vTaskHistoryTargetKey;
|
||||
END;
|
||||
|
||||
FUNCTION FINALISE_TASK_WITH_TARGET_INFO(pTaskHistoryKey IN NUMBER, pTaskStatus IN VARCHAR2,
|
||||
pTargetName IN VARCHAR2, pNumRowsApplied IN NUMBER,
|
||||
pNumRowsRejected IN NUMBER, pLoadSuccessful IN VARCHAR2,
|
||||
pServiceName IN VARCHAR2)
|
||||
RETURN NUMBER
|
||||
IS
|
||||
vTaskHistoryTargetKey NUMBER;
|
||||
BEGIN
|
||||
-- Store target information using internal function (without COMMIT)
|
||||
vTaskHistoryTargetKey := STORE_TASK_TARGET_INFO_INTERNAL(
|
||||
pTaskHistoryKey => pTaskHistoryKey,
|
||||
pSourceName => pTargetName,
|
||||
pNumRowsApplied => pNumRowsApplied,
|
||||
pNumRowsRejected => pNumRowsRejected,
|
||||
pLoadSuccessful => pLoadSuccessful,
|
||||
pServiceName => pServiceName
|
||||
);
|
||||
|
||||
-- Finalize the task using existing procedure (no COMMIT in procedure)
|
||||
FINALISE_TASK(pTaskHistoryKey, pTaskStatus);
|
||||
|
||||
-- Single COMMIT for the entire atomic operation
|
||||
COMMIT;
|
||||
|
||||
RETURN vTaskHistoryTargetKey;
|
||||
END;
|
||||
|
||||
PROCEDURE SET_WORKFLOW_PROPERTY(
|
||||
pWorkflowHistoryKey IN NUMBER
|
||||
,pServiceName IN VARCHAR2
|
||||
,pProperty IN VARCHAR2
|
||||
,pValue IN VARCHAR2
|
||||
) IS
|
||||
BEGIN
|
||||
INSERT INTO CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY (A_WORKFLOW_HISTORY_KEY, SERVICE_NAME, PROPERTY, VALUE)
|
||||
VALUES (pWorkflowHistoryKey, pServiceName, pProperty, pValue);
|
||||
END;
|
||||
|
||||
FUNCTION GET_WORKFLOW_PROPERTY(
|
||||
pWorkflowHistoryKey IN NUMBER
|
||||
,pServiceName IN VARCHAR2
|
||||
,pProperty IN VARCHAR2
|
||||
) RETURN VARCHAR2
|
||||
IS
|
||||
vValue CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY.VALUE%TYPE;
|
||||
BEGIN
|
||||
SELECT VALUE
|
||||
INTO vValue
|
||||
FROM CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY
|
||||
WHERE A_WORKFLOW_HISTORY_KEY = pWorkflowHistoryKey
|
||||
AND SERVICE_NAME = pServiceName
|
||||
AND PROPERTY = pProperty;
|
||||
|
||||
RETURN vValue;
|
||||
END;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
-- PACKAGE VERSION MANAGEMENT FUNCTIONS IMPLEMENTATION
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
FUNCTION GET_VERSION
|
||||
RETURN VARCHAR2
|
||||
IS
|
||||
BEGIN
|
||||
RETURN PACKAGE_VERSION;
|
||||
END GET_VERSION;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
FUNCTION GET_BUILD_INFO
|
||||
RETURN VARCHAR2
|
||||
IS
|
||||
BEGIN
|
||||
RETURN ENV_MANAGER.GET_PACKAGE_VERSION_INFO(
|
||||
pPackageName => 'WORKFLOW_MANAGER',
|
||||
pVersion => PACKAGE_VERSION,
|
||||
pBuildDate => PACKAGE_BUILD_DATE,
|
||||
pAuthor => PACKAGE_AUTHOR
|
||||
);
|
||||
END GET_BUILD_INFO;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
FUNCTION GET_VERSION_HISTORY
|
||||
RETURN VARCHAR2
|
||||
IS
|
||||
BEGIN
|
||||
RETURN ENV_MANAGER.FORMAT_VERSION_HISTORY(
|
||||
pPackageName => 'WORKFLOW_MANAGER',
|
||||
pVersionHistory => VERSION_HISTORY
|
||||
);
|
||||
END GET_VERSION_HISTORY;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
END WORKFLOW_MANAGER;
|
||||
@@ -0,0 +1,99 @@
|
||||
create or replace PACKAGE CT_MRDS.WORKFLOW_MANAGER
|
||||
IS
|
||||
|
||||
-- Package Version Information (Semantic Versioning: MAJOR.MINOR.PATCH)
|
||||
PACKAGE_VERSION CONSTANT VARCHAR2(10) := '1.7.1';
|
||||
PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2025-11-18 12:00:00';
|
||||
PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
|
||||
|
||||
-- Version History (Latest changes first)
|
||||
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
|
||||
'1.7.1 (2025-11-18): Added SERVICE_NAME column with hardcoded ''ODS'' value to INIT_TASK function' || CHR(13)||CHR(10) ||
|
||||
'1.7.0 (2025-10-31): Added FINALISE_TASK_WITH_TARGET_INFO function for atomic task completion with target info' || CHR(13)||CHR(10) ||
|
||||
'1.6.0 (2025-10-31): Converted STORE_TASK_SOURCE_INFO and STORE_TASK_TARGET_INFO from procedures to functions returning sequence keys' || CHR(13)||CHR(10) ||
|
||||
'1.5.0 (2025-10-22): Added package versioning system using centralized ENV_MANAGER functions' || CHR(13)||CHR(10) ||
|
||||
'1.2.0 (2025-10-05): Added workflow property management (SET/GET_WORKFLOW_PROPERTY)' || CHR(13)||CHR(10) ||
|
||||
'1.0.0 (2025-09-10): Initial release with workflow and task lifecycle management';
|
||||
|
||||
-- Line break constant for consistent CRLF formatting across Windows environments
|
||||
cgBL CONSTANT VARCHAR2(2) := CHR(13)||CHR(10);
|
||||
|
||||
FUNCTION INIT_WORKFLOW(pServiceName IN VARCHAR2, pWorkflowRunId IN VARCHAR2, pWorkflowName in VARCHAR2)
|
||||
RETURN NUMBER;
|
||||
|
||||
PROCEDURE FINALISE_WORKFLOW(pWorkflowHistoryKey IN NUMBER, pWorkflowStatus IN VARCHAR2);
|
||||
PROCEDURE FINALISE_WORKFLOW(pWorkflowHistoryKey IN NUMBER, pServiceName IN VARCHAR2, pWorkflowStatus IN VARCHAR2);
|
||||
|
||||
FUNCTION INIT_TASK(pTaskRunId IN VARCHAR2, pTaskName in VARCHAR2, pWorkflowHistoryKey IN NUMBER)
|
||||
RETURN NUMBER;
|
||||
|
||||
PROCEDURE FINALISE_TASK(pTaskHistoryKey IN NUMBER, pTaskStatus IN VARCHAR2);
|
||||
|
||||
FUNCTION STORE_TASK_SOURCE_INFO(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2, pNumRows IN NUMBER)
|
||||
RETURN NUMBER;
|
||||
|
||||
FUNCTION STORE_TASK_TARGET_INFO(pTaskHistoryKey IN NUMBER, pSourceName IN VARCHAR2,
|
||||
pNumRowsApplied IN NUMBER, pNumRowsRejected IN NUMBER,
|
||||
pLoadSuccessful IN VARCHAR2, pServiceName IN VARCHAR2)
|
||||
RETURN NUMBER;
|
||||
|
||||
FUNCTION FINALISE_TASK_WITH_TARGET_INFO(pTaskHistoryKey IN NUMBER, pTaskStatus IN VARCHAR2,
|
||||
pTargetName IN VARCHAR2, pNumRowsApplied IN NUMBER,
|
||||
pNumRowsRejected IN NUMBER, pLoadSuccessful IN VARCHAR2,
|
||||
pServiceName IN VARCHAR2)
|
||||
RETURN NUMBER;
|
||||
|
||||
vpRunningStatus CT_MRDS.A_WORKFLOW_HISTORY.WORKFLOW_SUCCESSFUL%TYPE := 'R';
|
||||
|
||||
--
|
||||
-- Set and get information on workflow level
|
||||
--
|
||||
PROCEDURE SET_WORKFLOW_PROPERTY(
|
||||
pWorkflowHistoryKey IN NUMBER
|
||||
,pServiceName IN VARCHAR2
|
||||
,pProperty IN VARCHAR2
|
||||
,pValue IN VARCHAR2
|
||||
);
|
||||
|
||||
FUNCTION GET_WORKFLOW_PROPERTY(
|
||||
pWorkflowHistoryKey IN NUMBER
|
||||
,pServiceName IN VARCHAR2
|
||||
,pProperty IN VARCHAR2)
|
||||
RETURN VARCHAR2;
|
||||
|
||||
---------------------------------------------------------------------------------------------------------------------------
|
||||
-- PACKAGE VERSION MANAGEMENT FUNCTIONS
|
||||
---------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* @name GET_VERSION
|
||||
* @desc Returns the current version number of the WORKFLOW_MANAGER package.
|
||||
* Uses semantic versioning format (MAJOR.MINOR.PATCH).
|
||||
* @example SELECT WORKFLOW_MANAGER.GET_VERSION() FROM DUAL;
|
||||
* @ex_rslt 1.5.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 WORKFLOW_MANAGER.GET_BUILD_INFO() FROM DUAL;
|
||||
* @ex_rslt Package: WORKFLOW_MANAGER
|
||||
* Version: 1.5.0
|
||||
* Build Date: 2025-10-22 17:00:00
|
||||
* Author: Grzegorz Michalski
|
||||
**/
|
||||
FUNCTION GET_BUILD_INFO RETURN VARCHAR2;
|
||||
|
||||
/**
|
||||
* @name GET_VERSION_HISTORY
|
||||
* @desc Returns complete version history with all releases and changes.
|
||||
* Uses centralized ENV_MANAGER.FORMAT_VERSION_HISTORY function.
|
||||
* @example SELECT WORKFLOW_MANAGER.GET_VERSION_HISTORY() FROM DUAL;
|
||||
* @ex_rslt WORKFLOW_MANAGER Version History:
|
||||
* 1.5.0 (2025-10-22): Added package versioning system...
|
||||
**/
|
||||
FUNCTION GET_VERSION_HISTORY RETURN VARCHAR2;
|
||||
|
||||
END WORKFLOW_MANAGER;
|
||||
@@ -0,0 +1,216 @@
|
||||
|
||||
DELETE FROM CT_MRDS.A_FILE_MANAGER_CONFIG;
|
||||
DELETE FROM CT_MRDS.A_SOURCE_FILE_RECEIVED;
|
||||
DELETE FROM CT_MRDS.A_COLUMN_DATE_FORMAT;
|
||||
DELETE FROM CT_MRDS.A_SOURCE_FILE_CONFIG;
|
||||
DELETE FROM CT_MRDS.A_SOURCE;
|
||||
|
||||
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (environment_id, config_variable, config_variable_value) VALUES ('default', 'EnvironmentID','dev');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (environment_id, config_variable, config_variable_value) VALUES ('dev', 'Region', 'eu-frankfurt-1');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (environment_id, config_variable, config_variable_value) VALUES ('dev', 'NameSpace', 'frcnomajoc7v');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (environment_id, config_variable, config_variable_value) VALUES ('dev', 'InboxBucketName', 'mrds_inbox_tst');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (environment_id, config_variable, config_variable_value) VALUES ('dev', 'DataBucketName', 'mrds_data_tst');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (environment_id, config_variable, config_variable_value) VALUES ('dev', 'HistoryBucketName', 'mrds_history_tst');
|
||||
--INSERT INTO A_FILE_MANAGER_CONFIG (environment_id, config_variable, config_variable_value) VALUES ('dev', 'UriName', 'https://objectstorage.'||vpRegion||'.oraclecloud.com/n/'||vpNameSpace||'/b/'||vpDataBucketName||'/o/');
|
||||
--INSERT INTO A_FILE_MANAGER_CONFIG (environment_id, config_variable, config_variable_value) VALUES ('dev', 'DataBucketUri', 'https://objectstorage.'||vpRegion||'.oraclecloud.com/n/'||vpNameSpace||'/b/'||vpDataBucketName||'/o/');
|
||||
--INSERT INTO A_FILE_MANAGER_CONFIG (environment_id, config_variable, config_variable_value) VALUES ('dev', 'InboxBucketUri', 'http://dev.example.com/inboxBucket');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (environment_id, config_variable, config_variable_value) VALUES ('dev', 'CredentialName', 'OCI$RESOURCE_PRINCIPAL');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (environment_id, config_variable, config_variable_value) VALUES ('dev', 'LoggingEnabled', 'ON');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (environment_id, config_variable, config_variable_value) VALUES ('dev', 'MinLogLevel', 'DEBUG');
|
||||
INSERT INTO CT_MRDS.A_FILE_MANAGER_CONFIG (environment_id, config_variable, config_variable_value) VALUES ('dev', 'DefaultDateFormat', 'DD/MM/YYYY HH24:MI:SS');
|
||||
commit;
|
||||
|
||||
-- ISD
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE(pSourceKey => 'ISD', pSourceNAme => 'Integrated Surface Data');
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||
pSourceKey => 'ISD'
|
||||
,pSourceFileType => 'INPUT'
|
||||
,pSourceFileId => 'IDS_DATA'
|
||||
,pSourceFileDesc => 'Yearly figures by station'
|
||||
,pSourceFileNamePattern => '*.csv'
|
||||
,pTableId => 'IDS_DATA'
|
||||
,pTemplateTableName => 'CT_ET_TEMPLATES.IDS_DATA'
|
||||
);
|
||||
|
||||
-- LM
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE(pSourceKey => 'LM', pSourceNAme => 'LM');
|
||||
|
||||
-- STANDING_FACILITIES
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||
pSourceKey => 'LM'
|
||||
,pSourceFileType => 'CONTAINER'
|
||||
,pSourceFileId => 'STANDING_FACILITIES'
|
||||
,pSourceFileDesc => 'LM Standing facilities'
|
||||
,pSourceFileNamePattern => '*.xml'
|
||||
,pTableId => null
|
||||
,pTemplateTableName => null
|
||||
,pContainerFileKey => null
|
||||
);
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||
pSourceKey => 'LM'
|
||||
,pSourceFileType => 'INPUT'
|
||||
,pSourceFileId => 'STANDING_FACILITIES'
|
||||
,pSourceFileDesc => 'LM Standing facilities header'
|
||||
,pSourceFileNamePattern => '.*.csv'
|
||||
,pTableId => 'STANDING_FACILITIES_HEADER'
|
||||
,pTemplateTableName => 'CT_ET_TEMPLATES.LM_STANDING_FACILITIES_HEADER'
|
||||
);
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||
pSourceKey => 'LM'
|
||||
,pSourceFileType => 'INPUT'
|
||||
,pSourceFileId => 'STANDING_FACILITIES'
|
||||
,pSourceFileDesc => 'LM Standing facilities'
|
||||
,pSourceFileNamePattern => '.*.csv'
|
||||
,pTableId => 'STANDING_FACILITIES'
|
||||
,pTemplateTableName => 'CT_ET_TEMPLATES.LM_STANDING_FACILITIES'
|
||||
);
|
||||
|
||||
--
|
||||
-- C2D
|
||||
--
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE(pSourceKey => 'C2D', pSourceNAme => 'C2D');
|
||||
|
||||
-- UC_ACC
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||
pSourceKey => 'C2D'
|
||||
,pSourceFileType => 'INPUT'
|
||||
,pSourceFileId => 'UC_NMA_ACC'
|
||||
,pSourceFileDesc => 'UC NonMarketableAssets ACC'
|
||||
,pSourceFileNamePattern => '*.csv'
|
||||
,pTableId => 'UC_NMA_ACC'
|
||||
,pTemplateTableName => 'CT_ET_TEMPLATES.C2D_UC_NMA_ACC'
|
||||
);
|
||||
|
||||
|
||||
-- UC_DISSEM
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||
pSourceKey => 'C2D'
|
||||
,pSourceFileType => 'CONTAINER'
|
||||
,pSourceFileId => 'UC_DISSEM'
|
||||
,pSourceFileDesc => 'UC Dissemination'
|
||||
,pSourceFileNamePattern => '*.xml'
|
||||
,pTableId => null
|
||||
,pTemplateTableName => null
|
||||
,pContainerFileKey => null
|
||||
);
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||
pSourceKey => 'C2D'
|
||||
,pSourceFileType => 'INPUT'
|
||||
,pSourceFileId => 'UC_DISSEM'
|
||||
,pSourceFileDesc => 'UC Dissemination Metadata'
|
||||
,pSourceFileNamePattern => '.*.csv'
|
||||
,pTableId => 'A_UC_DISSEM_METADATA_LOADS'
|
||||
,pTemplateTableName => 'CT_ET_TEMPLATES.C2D_A_UC_DISSEM_METADATA_LOADS'
|
||||
);
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT(
|
||||
pSourceFileId => 'UC_DISSEM'
|
||||
,pTableId => 'A_UC_DISSEM_METADATA_LOADS'
|
||||
,pColumnName => 'SNAPSHOT_DATE'
|
||||
,pDateFormat => 'YYYY-MM-DD'
|
||||
);
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT(
|
||||
pSourceFileId => 'UC_DISSEM'
|
||||
,pTableId => 'A_UC_DISSEM_METADATA_LOADS'
|
||||
,pColumnName => 'FILE_CREATION_DATE'
|
||||
,pDateFormat => 'YYYY-MM-DD"T"HH24:MI:SS'
|
||||
);
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||
pSourceKey => 'C2D'
|
||||
,pSourceFileType => 'INPUT'
|
||||
,pSourceFileId => 'UC_DISSEM'
|
||||
,pSourceFileDesc => 'UC MarketableAssets Dissemination'
|
||||
,pSourceFileNamePattern => '.*.csv'
|
||||
,pTableId => 'UC_MA_DISSEM'
|
||||
,pTemplateTableName => 'CT_ET_TEMPLATES.C2D_UC_MA_DISSEM'
|
||||
);
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT(
|
||||
pSourceFileId => 'UC_DISSEM'
|
||||
,pTableId => 'UC_MA_DISSEM'
|
||||
,pColumnName => 'SNAPSHOT_DATE'
|
||||
,pDateFormat => 'YYYY-MM-DD'
|
||||
);
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT(
|
||||
pSourceFileId => 'UC_DISSEM'
|
||||
,pTableId => 'UC_MA_DISSEM'
|
||||
,pColumnName => 'FILE_CREATION_DATE'
|
||||
,pDateFormat => 'YYYY-MM-DD"T"HH24:MI:SS'
|
||||
);
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||
pSourceKey => 'C2D'
|
||||
,pSourceFileType => 'INPUT'
|
||||
,pSourceFileId => 'UC_DISSEM'
|
||||
,pSourceFileDesc => 'UC MarketableAssets Dissemination'
|
||||
,pSourceFileNamePattern => '.*.csv'
|
||||
,pTableId => 'UC_NMA_DISSEM'
|
||||
,pTemplateTableName => 'CT_ET_TEMPLATES.C2D_UC_NMA_DISSEM'
|
||||
);
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT(
|
||||
pSourceFileId => 'UC_DISSEM'
|
||||
,pTableId => 'UC_NMA_DISSEM'
|
||||
,pColumnName => 'SNAPSHOT_DATE'
|
||||
,pDateFormat => 'YYYY-MM-DD'
|
||||
);
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT(
|
||||
pSourceFileId => 'UC_DISSEM'
|
||||
,pTableId => 'UC_NMA_DISSEM'
|
||||
,pColumnName => 'FILE_CREATION_DATE'
|
||||
,pDateFormat => 'YYYY-MM-DD"T"HH24:MI:SS'
|
||||
);
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT(
|
||||
pSourceFileId => 'UC_DISSEM'
|
||||
,pTableId => 'UC_NMA_DISSEM'
|
||||
,pColumnName => 'MATURITY_DATE'
|
||||
,pDateFormat => 'YYYY-MM-DD'
|
||||
);
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||
pSourceKey => 'C2D'
|
||||
,pSourceFileType => 'INPUT'
|
||||
,pSourceFileId => 'UC_DISSEM'
|
||||
,pSourceFileDesc => 'UC Additional Credit Claims'
|
||||
,pSourceFileNamePattern => '.*.csv'
|
||||
,pTableId => 'UC_ACC'
|
||||
,pTemplateTableName => 'CT_ET_TEMPLATES.C2D_UC_NMA_ACC'
|
||||
);
|
||||
--
|
||||
-- MDP
|
||||
--
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE(pSourceKey => 'MDP', pSourceNAme => 'MDP');
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||
pSourceKey => 'MDP'
|
||||
,pSourceFileType => 'INPUT'
|
||||
,pSourceFileId => 'BBG_EQUITY_OT'
|
||||
,pSourceFileDesc => 'Bloomberg Debt'
|
||||
,pSourceFileNamePattern => '.*.csv'
|
||||
,pTableId => 'BBG_EQUITY_OT'
|
||||
,pTemplateTableName => 'CT_ET_TEMPLATES.ODS_MDP_BBG_EQUITY_OT'
|
||||
,pContainerFileKey => null
|
||||
);
|
||||
|
||||
-- LOAD_CONFIG MDP
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||
pSourceKey => 'MDP'
|
||||
,pSourceFileType => 'LOAD_CONFIG'
|
||||
,pSourceFileId => null
|
||||
,pSourceFileDesc => 'Reuters list ODS Cloud'
|
||||
,pSourceFileNamePattern => '.*.txt'
|
||||
,pTableId => null
|
||||
,pTemplateTableName => null
|
||||
,pContainerFileKey => null
|
||||
);
|
||||
@@ -0,0 +1,22 @@
|
||||
-- CSDB
|
||||
--call CT_MRDS.FILE_MANAGER.ADD_SOURCE(pSourceKey => 'CSDB', pSourceNAme => 'Centralised Securities Database');
|
||||
|
||||
--call CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||
-- pSourceKey => 'CSDB'
|
||||
-- ,pSourceFileType => 'INPUT'
|
||||
-- ,pSourceFileId => 'RT_INSTRUMENT_RATING'
|
||||
-- ,pSourceFileDesc => 'Instrument Ratings from DEVO'
|
||||
-- ,pSourceFileNamePattern => '*.csv'
|
||||
-- ,pTableId => 'RT_INSTRUMENT_RATING'
|
||||
-- ,pTemplateTableName => 'CT_ET_TEMPLATES.CSDB_RT_INSTRUMENT_RATING'
|
||||
-- );
|
||||
|
||||
call CT_MRDS.FILE_MANAGER.ADD_SOURCE_FILE_CONFIG(
|
||||
pSourceKey => 'CSDB'
|
||||
,pSourceFileType => 'INPUT'
|
||||
,pSourceFileId => 'DEBT_DAILY'
|
||||
,pSourceFileDesc => 'CSDB Debt Daily'
|
||||
,pSourceFileNamePattern => '*.csv'
|
||||
,pTableId => 'DEBT_DAILY'
|
||||
,pTemplateTableName => 'CT_ET_TEMPLATES.CSDB_DEBT_DAILY'
|
||||
);
|
||||
@@ -0,0 +1,57 @@
|
||||
-- ====================================================================
|
||||
-- Seed Data for DEVO Replica Management Tables
|
||||
-- ====================================================================
|
||||
-- Purpose: Initial configuration data for MOPDB and RAR replication management
|
||||
-- Source: MARS-770 install_package_MarsGeneralRelease_MARS770_tables.sql
|
||||
-- ====================================================================
|
||||
|
||||
-- Initial MOPDB replica management configuration
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_CEPH';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'MPEC' AND TABLE_NAME = 'T_MPEC';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'REFERENCE' AND TABLE_NAME = 'T_CAPITAL_KEY';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'CT_MOPDB' AND TABLE_NAME = 'MOPDB_METADATA_INVENTORY';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'REFERENCE' AND TABLE_NAME = 'T_CSDB_RATING_ACTION';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'REFERENCE' AND TABLE_NAME = 'T_CURRENCY';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'CLSLNK_SNPSHT_DT' WHERE OWNER = 'RIAD' AND TABLE_NAME = 'T_CLSLNK_PSTNZ_HIST';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'TOP' AND TABLE_NAME = 'T_AGGREGATED_ALLOTMENT';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'ELA' AND TABLE_NAME = 'T_ELA_INFO';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS_ORIGINATOR';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS_ADD_GUARANTOR';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS_IAB';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS_SERVICER';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS_LSP';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS_IRSP';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS_FXSC';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_COLLATERAL';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'REFERENCE' AND TABLE_NAME = 'T_COUNTRY';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_SNAPSHOT_DATE';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'TOP' AND TABLE_NAME = 'T_ALLOTMENT';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'TOP' AND TABLE_NAME = 'T_ALLOTMENT_MODIFICATIONS';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'TOP' AND TABLE_NAME = 'T_ANNOUNCEMENT';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'TOP' AND TABLE_NAME = 'T_FBL_ITEM';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'TOP' AND TABLE_NAME = 'T_FULLBID_ARRAY_COMPILED';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'REF_DATE' WHERE OWNER = 'LM' AND TABLE_NAME = 'T_STANDING_FACILITIES';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'REFERENCE_DATE' WHERE OWNER = 'LM' AND TABLE_NAME = 'T_CURRENT_ACCOUNTS';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'REF_DATE' WHERE OWNER = 'LM' AND TABLE_NAME = 'T_BALANCE_SHEET';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'REFERENCE_DATE' WHERE OWNER = 'LM' AND TABLE_NAME = 'T_FORECAST';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'ADJUSTMENT_DATE' WHERE OWNER = 'LM' AND TABLE_NAME = 'T_FC_ADH_ADJUSTMENTS';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'LM' AND TABLE_NAME = 'T_FC_CSM_ADJUSTMENTS';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'LM' AND TABLE_NAME = 'T_FC_QRE_ADJUSTMENTS';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_COLLATERAL_ALL_SOURCES';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_ALL_ASSETS';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'TIME_PERIOD' WHERE OWNER = 'SDW' AND TABLE_NAME = 'T_EXCHANGE_RATES';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'OVERWRITE', PARTITION_COLUMN = 'ROWID' WHERE OWNER = 'TOP' AND TABLE_NAME = 'T_ALLOTMENT_MODIFICATIONS_AGGREGATED';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'T_INTRADAY_CREDIT';
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB SET SAVE_MODE = 'APPEND', PARTITION_COLUMN = 'SNAPSHOT_DATE' WHERE OWNER = 'C2D' AND TABLE_NAME = 'MV_PUBLIC_ELIGIBLE_MARKETABLE_ASSETS';
|
||||
COMMIT;
|
||||
|
||||
-- Initial RAR replica management configuration
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_RAR
|
||||
SET SAVE_MODE = 'OVERWRITE' , PARTITION_COLUMN = 'ROWID';
|
||||
COMMIT;
|
||||
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_RAR SET SAVE_MODE = 'APPEND' , PARTITION_COLUMN = 'A_SNAPSHOT_DATE' WHERE TABLE_NAME = 'NH_HF_PRICE' AND OWNER = 'CORR_RAR' ;
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_RAR SET SAVE_MODE = 'APPEND' , PARTITION_COLUMN = 'A_INSERTION_DATE' WHERE TABLE_NAME = 'NH_PRICE' AND OWNER = 'CORR_RAR' ;
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_RAR SET SAVE_MODE = 'APPEND' , PARTITION_COLUMN = 'A_INSERTION_DATE' WHERE TABLE_NAME = 'NH_POSITION' AND OWNER = 'CORR_RAR' ;
|
||||
UPDATE CT_MRDS.A_DEVO_REPLICA_MGMT_RAR SET SAVE_MODE = 'APPEND' , PARTITION_COLUMN = 'A_INSERTION_DATE' WHERE TABLE_NAME = 'NH_PERFORMANCE' AND OWNER = 'CORR_RAR' ;
|
||||
COMMIT;
|
||||
@@ -0,0 +1,9 @@
|
||||
-- ====================================================================
|
||||
-- A_SOURCE_FILE_CONFIG_KEY_SEQ Sequence
|
||||
-- ====================================================================
|
||||
-- Purpose: Generate primary keys for A_SOURCE_FILE_CONFIG table
|
||||
-- ====================================================================
|
||||
|
||||
CREATE SEQUENCE CT_MRDS.A_SOURCE_FILE_CONFIG_KEY_SEQ START WITH 1 INCREMENT BY 1;
|
||||
|
||||
GRANT SELECT ON CT_MRDS.A_SOURCE_FILE_CONFIG_KEY_SEQ TO MRDS_LOADER_ROLE;
|
||||
@@ -0,0 +1,9 @@
|
||||
-- ====================================================================
|
||||
-- A_SOURCE_FILE_RECEIVED_KEY_SEQ Sequence
|
||||
-- ====================================================================
|
||||
-- Purpose: Generate primary keys for A_SOURCE_FILE_RECEIVED table
|
||||
-- ====================================================================
|
||||
|
||||
CREATE SEQUENCE CT_MRDS.A_SOURCE_FILE_RECEIVED_KEY_SEQ START WITH 1 INCREMENT BY 1;
|
||||
|
||||
GRANT SELECT ON CT_MRDS.A_SOURCE_FILE_RECEIVED_KEY_SEQ TO MRDS_LOADER_ROLE;
|
||||
@@ -0,0 +1,9 @@
|
||||
-- ====================================================================
|
||||
-- A_TABLE_STAT_KEY_SEQ Sequence
|
||||
-- ====================================================================
|
||||
-- Purpose: Generate primary keys for A_TABLE_STAT table
|
||||
-- ====================================================================
|
||||
|
||||
CREATE SEQUENCE CT_MRDS.A_TABLE_STAT_KEY_SEQ START WITH 1 INCREMENT BY 1;
|
||||
|
||||
GRANT SELECT ON CT_MRDS.A_TABLE_STAT_KEY_SEQ TO MRDS_LOADER_ROLE;
|
||||
@@ -0,0 +1,9 @@
|
||||
-- ====================================================================
|
||||
-- A_TASK_HISTORY_KEY_SEQ Sequence
|
||||
-- ====================================================================
|
||||
-- Purpose: Generate primary keys for A_TASK_HISTORY table
|
||||
-- ====================================================================
|
||||
|
||||
CREATE SEQUENCE CT_MRDS.A_TASK_HISTORY_KEY_SEQ START WITH 1 INCREMENT BY 1;
|
||||
|
||||
GRANT SELECT ON CT_MRDS.A_TASK_HISTORY_KEY_SEQ TO MRDS_LOADER;
|
||||
@@ -0,0 +1,9 @@
|
||||
-- ====================================================================
|
||||
-- A_TASK_HISTORY_SOURCE_KEY_SEQ Sequence
|
||||
-- ====================================================================
|
||||
-- Purpose: Generate primary keys for A_TASK_HISTORY_SOURCE table
|
||||
-- ====================================================================
|
||||
|
||||
CREATE SEQUENCE CT_MRDS.A_TASK_HISTORY_SOURCE_KEY_SEQ START WITH 1 INCREMENT BY 1;
|
||||
|
||||
GRANT SELECT ON CT_MRDS.A_TASK_HISTORY_SOURCE_KEY_SEQ TO MRDS_LOADER;
|
||||
@@ -0,0 +1,9 @@
|
||||
-- ====================================================================
|
||||
-- A_TASK_HISTORY_TARGET_KEY_SEQ Sequence
|
||||
-- ====================================================================
|
||||
-- Purpose: Generate primary keys for A_TASK_HISTORY_TARGET table
|
||||
-- ====================================================================
|
||||
|
||||
CREATE SEQUENCE CT_MRDS.A_TASK_HISTORY_TARGET_KEY_SEQ START WITH 1 INCREMENT BY 1;
|
||||
|
||||
GRANT SELECT ON CT_MRDS.A_TASK_HISTORY_TARGET_KEY_SEQ TO MRDS_LOADER;
|
||||
@@ -0,0 +1,9 @@
|
||||
-- ====================================================================
|
||||
-- A_WORKFLOW_HISTORY_KEY_SEQ Sequence
|
||||
-- ====================================================================
|
||||
-- Purpose: Generate primary keys for A_WORKFLOW_HISTORY table
|
||||
-- ====================================================================
|
||||
|
||||
CREATE SEQUENCE CT_MRDS.A_WORKFLOW_HISTORY_KEY_SEQ START WITH 1 INCREMENT BY 1;
|
||||
|
||||
GRANT SELECT ON CT_MRDS.A_WORKFLOW_HISTORY_KEY_SEQ TO MRDS_LOADER;
|
||||
@@ -0,0 +1,18 @@
|
||||
-- ====================================================================
|
||||
-- A_CASPER_FILEVAULT Table Definition
|
||||
-- ====================================================================
|
||||
-- Purpose: File vault tracking for CASPER workflow operations
|
||||
-- Source: MARS-770 install_package_MarsGeneralRelease_MARS770_tables.sql
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_CASPER_FILEVAULT" (
|
||||
"A_WORKFLOW_HISTORY_KEY" NUMBER(28,0),
|
||||
"WLA_RUN_ID" NUMBER(28,0),
|
||||
"WORKFLOW_NAME" CHAR(16 BYTE),
|
||||
"FILENAME" VARCHAR2(250 CHAR),
|
||||
"STATUS" VARCHAR2(30 CHAR),
|
||||
"FILESIZE" NUMBER(28,0),
|
||||
"FILE_ID" NUMBER(28,0),
|
||||
"IS_TEST" VARCHAR2(5 CHAR),
|
||||
"REFERENCE_TIME" TIMESTAMP (6)
|
||||
);
|
||||
@@ -0,0 +1,20 @@
|
||||
-- ====================================================================
|
||||
-- A_COLUMN_DATE_FORMAT Table
|
||||
-- ====================================================================
|
||||
-- Purpose: Store column-specific date format configurations
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE CT_MRDS.A_COLUMN_DATE_FORMAT (
|
||||
A_SOURCE_FILE_CONFIG_KEY NUMBER(38,0) NOT NULL ENABLE,
|
||||
COLUMN_NAME VARCHAR2(200) NOT NULL,
|
||||
DATE_FORMAT VARCHAR2(200) NOT NULL,
|
||||
CONSTRAINT A_COLUMN_DATE_FORMAT_PK PRIMARY KEY (A_SOURCE_FILE_CONFIG_KEY, COLUMN_NAME),
|
||||
CONSTRAINT ACDF_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)
|
||||
) TABLESPACE "DATA";
|
||||
|
||||
-- Primary key index (matching constraint definition)
|
||||
CREATE UNIQUE INDEX "CT_MRDS"."A_COLUMN_DATE_FORMAT_PK"
|
||||
ON "CT_MRDS"."A_COLUMN_DATE_FORMAT" ("A_SOURCE_FILE_CONFIG_KEY", "COLUMN_NAME")
|
||||
TABLESPACE "DATA";
|
||||
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON CT_MRDS.A_COLUMN_DATE_FORMAT TO MRDS_LOADER_ROLE;
|
||||
@@ -0,0 +1,23 @@
|
||||
-- ====================================================================
|
||||
-- A_DEVO_METADATA_INVENTORY Table Definition
|
||||
-- ====================================================================
|
||||
-- Purpose: Metadata inventory for DEVO data sources and column information
|
||||
-- Source: new_EXP.sql export from production database
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_DEVO_METADATA_INVENTORY" (
|
||||
"A_VALID_FROM" DATE,
|
||||
"A_VALID_TO" DATE,
|
||||
"OWNER" VARCHAR2(128 BYTE),
|
||||
"TABLE_NAME" VARCHAR2(128 BYTE),
|
||||
"COLUMN_NAME" VARCHAR2(128 BYTE),
|
||||
"DATA_TYPE" VARCHAR2(128 BYTE),
|
||||
"CHAR_LENGTH" NUMBER,
|
||||
"DATA_PRECISION" NUMBER,
|
||||
"DATA_SCALE" NUMBER,
|
||||
"COLUMN_ID" NUMBER,
|
||||
"DATA_DESCRIPTION" VARCHAR2(4000 BYTE),
|
||||
"LIST_OF_SOURCES" VARCHAR2(20 BYTE),
|
||||
"RAR3_TYPE_OF_ACCESS" CHAR(2 BYTE),
|
||||
"SERVICE_NAME" CHAR(5 BYTE)
|
||||
) TABLESPACE "DATA";
|
||||
@@ -0,0 +1,23 @@
|
||||
-- ====================================================================
|
||||
-- A_DEVO_REPLICA_MGMT_LOG Table Definition
|
||||
-- ====================================================================
|
||||
-- Purpose: Audit log table for replica management operations
|
||||
-- Source: new_EXP.sql export from production database
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_DEVO_REPLICA_MGMT_LOG" (
|
||||
"OWNER" VARCHAR2(50 BYTE),
|
||||
"TABLE_NAME" VARCHAR2(50 BYTE),
|
||||
"TABLE_ALIAS" VARCHAR2(50 BYTE),
|
||||
"LAST_RUN_ID" VARCHAR2(200 BYTE),
|
||||
"LAST_START_TIME" DATE,
|
||||
"LAST_END_TIME" DATE,
|
||||
"LAST_STATUS" VARCHAR2(200 BYTE),
|
||||
"SAVE_MODE" VARCHAR2(50 BYTE),
|
||||
"PARTITION_COLUMN" VARCHAR2(50 BYTE),
|
||||
"MAX_THREADS" NUMBER(3,0),
|
||||
"LAST_PROCESSED_KEY" NUMBER(28,10),
|
||||
"ACTION" VARCHAR2(30 BYTE),
|
||||
"LOG_DATE" DATE,
|
||||
"LOG_SOURCE" VARCHAR2(30 BYTE)
|
||||
) TABLESPACE "DATA";
|
||||
@@ -0,0 +1,20 @@
|
||||
-- ====================================================================
|
||||
-- A_DEVO_REPLICA_MGMT_MOPDB Table Definition
|
||||
-- ====================================================================
|
||||
-- Purpose: MOPDB replication management configuration table
|
||||
-- Source: MARS-770 install_package_MarsGeneralRelease_MARS770_tables.sql
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_DEVO_REPLICA_MGMT_MOPDB" AS
|
||||
SELECT OWNER,
|
||||
TABLE_NAME,
|
||||
TABLE_ALIAS,
|
||||
CAST(NULL AS VARCHAR2(200)) AS LAST_RUN_ID,
|
||||
CAST(NULL AS DATE) AS LAST_START_TIME,
|
||||
CAST(NULL AS DATE) AS LAST_END_TIME,
|
||||
CAST(NULL AS VARCHAR2(200)) AS LAST_STATUS,
|
||||
SAVE_MODE,
|
||||
BUCKET_COLUMN AS PARTITION_COLUMN,
|
||||
NUMBER_OF_BUCKETS AS MAX_THREADS,
|
||||
CAST(NULL AS NUMBER(28,10)) AS LAST_PROCESSED_KEY
|
||||
FROM CT_MOPDB.MOPDB_ON_DISC_REPLICA_MGMT;
|
||||
@@ -0,0 +1,20 @@
|
||||
-- ====================================================================
|
||||
-- A_DEVO_REPLICA_MGMT_RAR Table Definition
|
||||
-- ====================================================================
|
||||
-- Purpose: RAR replication management configuration table
|
||||
-- Source: MARS-770 install_package_MarsGeneralRelease_MARS770_tables.sql
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_DEVO_REPLICA_MGMT_RAR" AS
|
||||
SELECT OWNER,
|
||||
TABLE_NAME,
|
||||
TABLE_ALIAS,
|
||||
CAST(NULL AS VARCHAR2(200)) AS LAST_RUN_ID,
|
||||
CAST(NULL AS DATE) AS LAST_START_TIME,
|
||||
CAST(NULL AS DATE) AS LAST_END_TIME,
|
||||
CAST(NULL AS VARCHAR2(200)) AS LAST_STATUS,
|
||||
SAVE_MODE,
|
||||
BUCKET_COLUMN AS PARTITION_COLUMN,
|
||||
NUMBER_OF_BUCKETS AS MAX_THREADS,
|
||||
CAST(NULL AS NUMBER(28,10)) AS LAST_PROCESSED_KEY
|
||||
FROM CT_REF.RAR_ON_DISC_REPLICA_MGMT;
|
||||
@@ -0,0 +1,20 @@
|
||||
-- ====================================================================
|
||||
-- A_DEVO_REPLICA_MGMT_RQSD Table Definition
|
||||
-- ====================================================================
|
||||
-- Purpose: RQSD replica management configuration table
|
||||
-- Source: new_EXP.sql export from production database
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_DEVO_REPLICA_MGMT_RQSD" (
|
||||
"OWNER" VARCHAR2(50 BYTE),
|
||||
"TABLE_NAME" VARCHAR2(50 BYTE),
|
||||
"TABLE_ALIAS" VARCHAR2(50 BYTE),
|
||||
"LAST_RUN_ID" VARCHAR2(200 BYTE),
|
||||
"LAST_START_TIME" DATE,
|
||||
"LAST_END_TIME" DATE,
|
||||
"LAST_STATUS" VARCHAR2(200 BYTE),
|
||||
"SAVE_MODE" VARCHAR2(50 BYTE),
|
||||
"PARTITION_COLUMN" VARCHAR2(50 BYTE),
|
||||
"MAX_THREADS" NUMBER(3,0),
|
||||
"LAST_PROCESSED_KEY" NUMBER(28,10)
|
||||
) TABLESPACE "DATA";
|
||||
@@ -0,0 +1,14 @@
|
||||
-- ====================================================================
|
||||
-- A_DEVO_SOURCES_IGAM Table Definition
|
||||
-- ====================================================================
|
||||
-- Purpose: IGAM sources configuration for DEVO environments
|
||||
-- Source: new_EXP.sql export from production database
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE "CT_MRDS"."A_DEVO_SOURCES_IGAM" (
|
||||
"ENVIRONMENT" VARCHAR2(100 BYTE),
|
||||
"MRDS_SOURCE" VARCHAR2(30 BYTE),
|
||||
"MRDS_SUBSOURCE_ID" VARCHAR2(30 BYTE),
|
||||
"MRDS_ENTITLEMENT" VARCHAR2(100 BYTE),
|
||||
"SERVICE_NAME" VARCHAR2(5 BYTE)
|
||||
) TABLESPACE "DATA";
|
||||
@@ -0,0 +1,13 @@
|
||||
-- ====================================================================
|
||||
-- A_FILE_MANAGER_CONFIG Table
|
||||
-- ====================================================================
|
||||
-- Purpose: Store environment configuration variables for file manager
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE CT_MRDS.A_FILE_MANAGER_CONFIG (
|
||||
ENVIRONMENT_ID VARCHAR2(100),
|
||||
CONFIG_VARIABLE VARCHAR2(200),
|
||||
CONFIG_VARIABLE_VALUE VARCHAR2(200),
|
||||
CONFIG_VARIABLE_COMMENT VARCHAR2(600),
|
||||
PRIMARY KEY (ENVIRONMENT_ID, CONFIG_VARIABLE)
|
||||
) TABLESPACE "DATA";
|
||||
@@ -0,0 +1,44 @@
|
||||
-- ====================================================================
|
||||
-- A_PACKAGE_VERSION_TRACKING Table
|
||||
-- ====================================================================
|
||||
-- Purpose: Track package versions, source code hashes, and deployment history
|
||||
-- This table enables automatic detection of package changes even when
|
||||
-- version numbers are not updated by developers
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE CT_MRDS.A_PACKAGE_VERSION_TRACKING (
|
||||
A_PACKAGE_VERSION_TRACKING_KEY NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||
PACKAGE_OWNER VARCHAR2(128) NOT NULL,
|
||||
PACKAGE_NAME VARCHAR2(128) NOT NULL,
|
||||
PACKAGE_TYPE VARCHAR2(20) NOT NULL CHECK (PACKAGE_TYPE IN ('SPEC', 'BODY', 'BOTH')),
|
||||
PACKAGE_VERSION VARCHAR2(10),
|
||||
PACKAGE_BUILD_DATE VARCHAR2(20),
|
||||
PACKAGE_AUTHOR VARCHAR2(100),
|
||||
SOURCE_CODE_HASH_SPEC VARCHAR2(64), -- SHA256 hash of specification source
|
||||
SOURCE_CODE_HASH_BODY VARCHAR2(64), -- SHA256 hash of body source
|
||||
LINE_COUNT_SPEC NUMBER,
|
||||
LINE_COUNT_BODY NUMBER,
|
||||
DETECTED_CHANGE_WITHOUT_VERSION CHAR(1) DEFAULT 'N' CHECK (DETECTED_CHANGE_WITHOUT_VERSION IN ('Y', 'N')),
|
||||
CHANGE_DETECTION_MESSAGE VARCHAR2(4000),
|
||||
TRACKING_DATE TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,
|
||||
TRACKED_BY_USER VARCHAR2(128) DEFAULT USER NOT NULL,
|
||||
TRACKED_BY_MODULE VARCHAR2(64) DEFAULT SYS_CONTEXT('USERENV','MODULE'),
|
||||
CONSTRAINT UK_PKG_VERSION_TRACK UNIQUE (PACKAGE_OWNER, PACKAGE_NAME, TRACKING_DATE)
|
||||
) TABLESPACE "DATA";
|
||||
|
||||
-- Comments
|
||||
COMMENT ON TABLE CT_MRDS.A_PACKAGE_VERSION_TRACKING IS 'Tracks package version history and source code hashes for change detection';
|
||||
COMMENT ON COLUMN CT_MRDS.A_PACKAGE_VERSION_TRACKING.SOURCE_CODE_HASH_SPEC IS 'SHA256 hash of package specification source code';
|
||||
COMMENT ON COLUMN CT_MRDS.A_PACKAGE_VERSION_TRACKING.SOURCE_CODE_HASH_BODY IS 'SHA256 hash of package body source code';
|
||||
COMMENT ON COLUMN CT_MRDS.A_PACKAGE_VERSION_TRACKING.DETECTED_CHANGE_WITHOUT_VERSION IS 'Y if source hash changed but version did not';
|
||||
COMMENT ON COLUMN CT_MRDS.A_PACKAGE_VERSION_TRACKING.CHANGE_DETECTION_MESSAGE IS 'Details about detected changes without version update';
|
||||
|
||||
-- Grant access to other schemas
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON CT_MRDS.A_PACKAGE_VERSION_TRACKING TO MRDS_LOADER;
|
||||
|
||||
-- Performance indexes for package version tracking
|
||||
-- Index for quick lookups by package name and owner
|
||||
CREATE INDEX IDX_PKG_TRACK_NAME ON CT_MRDS.A_PACKAGE_VERSION_TRACKING(PACKAGE_OWNER, PACKAGE_NAME);
|
||||
|
||||
-- Index for date-based queries
|
||||
CREATE INDEX IDX_PKG_TRACK_DATE ON CT_MRDS.A_PACKAGE_VERSION_TRACKING(TRACKING_DATE);
|
||||
@@ -0,0 +1,22 @@
|
||||
DROP TABLE CT_MRDS.A_PROCESS_LOG;
|
||||
CREATE TABLE CT_MRDS.A_PROCESS_LOG (
|
||||
a_process_log_key NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||
guid VARCHAR2(32),
|
||||
Username VARCHAR2(128),
|
||||
Osuser VARCHAR2(128),
|
||||
Machine VARCHAR2(64),
|
||||
Module VARCHAR2(64),
|
||||
process_name VARCHAR2(200),
|
||||
procedure_name VARCHAR2(200),
|
||||
procedure_parameters VARCHAR2(20000),
|
||||
log_level VARCHAR2(10), -- DEBUG, INFO, WARNING, ERROR
|
||||
log_message VARCHAR2(20000),
|
||||
log_timestamp TIMESTAMP DEFAULT SYSTIMESTAMP
|
||||
)
|
||||
PARTITION BY RANGE (log_timestamp)
|
||||
INTERVAL (NUMTODSINTERVAL(1,'DAY'))
|
||||
(
|
||||
PARTITION p_init VALUES LESS THAN (TIMESTAMP '2025-01-01 00:00:00')
|
||||
);
|
||||
|
||||
/
|
||||
@@ -0,0 +1,18 @@
|
||||
-- ====================================================================
|
||||
-- A_SOURCE Table
|
||||
-- ====================================================================
|
||||
-- Purpose: Store source system definitions
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE CT_MRDS.A_SOURCE (
|
||||
A_SOURCE_KEY VARCHAR2(30),
|
||||
SOURCE_NAME VARCHAR2(200),
|
||||
CONSTRAINT A_SOURCE_PK PRIMARY KEY (A_SOURCE_KEY)
|
||||
) TABLESPACE "DATA";
|
||||
|
||||
-- Primary key index (from production export)
|
||||
CREATE UNIQUE INDEX "CT_MRDS"."A_SOURCE_PK"
|
||||
ON "CT_MRDS"."A_SOURCE" ("A_SOURCE_KEY")
|
||||
TABLESPACE "DATA";
|
||||
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON CT_MRDS.A_SOURCE TO MRDS_LOADER_ROLE;
|
||||
@@ -0,0 +1,45 @@
|
||||
-- ====================================================================
|
||||
-- A_SOURCE_FILE_CONFIG Table
|
||||
-- ====================================================================
|
||||
-- Purpose: Store source file configuration and processing rules
|
||||
-- MARS-1049: Added ENCODING column for CSV character set support
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE CT_MRDS.A_SOURCE_FILE_CONFIG (
|
||||
A_SOURCE_FILE_CONFIG_KEY NUMBER(38,0) NOT NULL ENABLE,
|
||||
A_SOURCE_KEY VARCHAR2(30) NOT NULL ENABLE,
|
||||
SOURCE_FILE_TYPE VARCHAR2(200), -- Can be 'INPUT' or 'CONTAINER' or 'LOAD_CONFIG'
|
||||
SOURCE_FILE_ID VARCHAR2(200),
|
||||
SOURCE_FILE_DESC VARCHAR2(2000),
|
||||
SOURCE_FILE_NAME_PATTERN VARCHAR2(200),
|
||||
TABLE_ID VARCHAR2(200),
|
||||
TEMPLATE_TABLE_NAME VARCHAR2(200),
|
||||
CONTAINER_FILE_KEY NUMBER(38,0),
|
||||
DAYS_FOR_ARCHIVE_THRESHOLD NUMBER(4,0),
|
||||
FILES_COUNT_OVER_ARCHIVE_THRESHOLD NUMBER(38,0),
|
||||
BYTES_SUM_OVER_ARCHIVE_THRESHOLD NUMBER(38,0),
|
||||
ODS_SCHEMA_NAME VARCHAR2(100),
|
||||
ROWS_COUNT_OVER_ARCHIVE_THRESHOLD NUMBER(38,0),
|
||||
HOURS_TO_EXPIRE_STATISTICS NUMBER(38,3),
|
||||
ENCODING VARCHAR2(50) DEFAULT 'UTF8',
|
||||
CONSTRAINT A_SOURCE_FILE_CONFIG_PK PRIMARY KEY (A_SOURCE_FILE_CONFIG_KEY),
|
||||
CONSTRAINT SOURCE_FILE_TYPE_CHK CHECK (SOURCE_FILE_TYPE IN ('INPUT', 'CONTAINER', 'LOAD_CONFIG')),
|
||||
CONSTRAINT ASFC_A_SOURCE_KEY_FK FOREIGN KEY(A_SOURCE_KEY) REFERENCES CT_MRDS.A_SOURCE(A_SOURCE_KEY),
|
||||
CONSTRAINT ASFC_CONTAINER_FILE_KEY_FK FOREIGN KEY(CONTAINER_FILE_KEY) REFERENCES CT_MRDS.A_SOURCE_FILE_CONFIG(A_SOURCE_FILE_CONFIG_KEY),
|
||||
CONSTRAINT A_SOURCE_FILE_CONFIG_UQ1 UNIQUE(SOURCE_FILE_TYPE, SOURCE_FILE_ID, TABLE_ID)
|
||||
) TABLESPACE "DATA";
|
||||
|
||||
-- Primary key index (from production export)
|
||||
CREATE UNIQUE INDEX "CT_MRDS"."A_SOURCE_FILE_CONFIG_PK"
|
||||
ON "CT_MRDS"."A_SOURCE_FILE_CONFIG" ("A_SOURCE_FILE_CONFIG_KEY")
|
||||
TABLESPACE "DATA";
|
||||
|
||||
-- Unique constraint index (from production export)
|
||||
CREATE UNIQUE INDEX "CT_MRDS"."A_SOURCE_FILE_CONFIG_UQ1"
|
||||
ON "CT_MRDS"."A_SOURCE_FILE_CONFIG" ("SOURCE_FILE_TYPE", "SOURCE_FILE_ID", "TABLE_ID")
|
||||
TABLESPACE "DATA";
|
||||
|
||||
-- Column comments
|
||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.ENCODING IS 'Oracle character set name for CSV files (e.g., UTF8, WE8MSWIN1252, EE8ISO8859P2). Added in MARS-1049';
|
||||
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON CT_MRDS.A_SOURCE_FILE_CONFIG TO MRDS_LOADER_ROLE;
|
||||
@@ -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;
|
||||
@@ -0,0 +1,25 @@
|
||||
-- ====================================================================
|
||||
-- A_TABLE_STAT Table
|
||||
-- ====================================================================
|
||||
-- Purpose: Store current table statistics and archival thresholds
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE CT_MRDS.A_TABLE_STAT (
|
||||
A_TABLE_STAT_KEY NUMBER(38,0) PRIMARY KEY,
|
||||
A_SOURCE_FILE_CONFIG_KEY NUMBER(38,0) NOT NULL,
|
||||
TABLE_NAME VARCHAR2(200) NOT NULL,
|
||||
FILE_COUNT NUMBER(38,0),
|
||||
OVER_ARCH_THRESOLD_FILE_COUNT NUMBER(38,0),
|
||||
ROW_COUNT NUMBER(38,0),
|
||||
OVER_ARCH_THRESOLD_ROW_COUNT NUMBER(38,0),
|
||||
SIZE NUMBER(38,0),
|
||||
OVER_ARCH_THRESOLD_SIZE NUMBER(38,0),
|
||||
ARCH_THRESHOLD_DAYS NUMBER(4,0),
|
||||
CREATED TIMESTAMP(6) DEFAULT SYSTIMESTAMP,
|
||||
CONSTRAINT A_TABLE_STAT_UK1 UNIQUE(A_SOURCE_FILE_CONFIG_KEY)
|
||||
) TABLESPACE "DATA";
|
||||
|
||||
-- Unique constraint index (from production export)
|
||||
CREATE UNIQUE INDEX "CT_MRDS"."A_TABLE_STAT_UK1"
|
||||
ON "CT_MRDS"."A_TABLE_STAT" ("A_SOURCE_FILE_CONFIG_KEY")
|
||||
TABLESPACE "DATA";
|
||||
@@ -0,0 +1,19 @@
|
||||
-- ====================================================================
|
||||
-- A_TABLE_STAT_HIST Table
|
||||
-- ====================================================================
|
||||
-- Purpose: Store historical table statistics for trend analysis
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE CT_MRDS.A_TABLE_STAT_HIST (
|
||||
A_TABLE_STAT_HIST_KEY NUMBER(38,0) PRIMARY KEY,
|
||||
A_SOURCE_FILE_CONFIG_KEY NUMBER(38,0) NOT NULL,
|
||||
TABLE_NAME VARCHAR2(200) NOT NULL,
|
||||
FILE_COUNT NUMBER(38,0),
|
||||
OVER_ARCH_THRESOLD_FILE_COUNT NUMBER(38,0),
|
||||
ROW_COUNT NUMBER(38,0),
|
||||
OVER_ARCH_THRESOLD_ROW_COUNT NUMBER(38,0),
|
||||
SIZE NUMBER(38,0),
|
||||
OVER_ARCH_THRESOLD_SIZE NUMBER(38,0),
|
||||
ARCH_THRESHOLD_DAYS NUMBER(4,0),
|
||||
CREATED TIMESTAMP(6) DEFAULT SYSTIMESTAMP
|
||||
) TABLESPACE "DATA";
|
||||
@@ -0,0 +1,32 @@
|
||||
-- ====================================================================
|
||||
-- A_TASK_HISTORY Table
|
||||
-- ====================================================================
|
||||
-- Purpose: Log of subprocesses being part of the DWH flows
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE CT_MRDS.A_TASK_HISTORY (
|
||||
A_TASK_HISTORY_KEY NUMBER(38,0) NOT NULL ENABLE,
|
||||
A_WORKFLOW_HISTORY_KEY NUMBER(38,0),
|
||||
TASK_RUN_ID VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP",
|
||||
TASK_NAME VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP",
|
||||
TASK_START TIMESTAMP(6),
|
||||
TASK_END TIMESTAMP(6),
|
||||
TASK_STATUS VARCHAR2(200) COLLATE "USING_NLS_COMP"
|
||||
) TABLESPACE "DATA";
|
||||
|
||||
-- Comments
|
||||
COMMENT ON TABLE CT_MRDS.A_TASK_HISTORY IS 'Log of subprocesses being part of the DWH flows';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY.A_TASK_HISTORY_KEY IS 'Surrogate key for logged subprocesses';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY.A_WORKFLOW_HISTORY_KEY IS 'Technical key to identify a load operation. Generated with Oracle sequence "CT_MRDS.SA_TASK_HISTORY_KEY_SEQ"';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY.TASK_NAME IS 'Mapping name of the logged subprocess';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY.TASK_START IS 'Start time of the subprocess';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY.TASK_END IS 'End time of the subprocess';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY.TASK_STATUS IS 'Indicates that the subprocess completed successfully. Allowed values are ''RUNNING'',''FAILED'' and ''SUCCESS''.';
|
||||
|
||||
-- Grants
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON CT_MRDS.A_TASK_HISTORY TO MRDS_LOADER;
|
||||
|
||||
-- Bitmap index for task history queries
|
||||
CREATE BITMAP INDEX CT_MRDS.A_TASK_HISTORY_IDX1
|
||||
ON CT_MRDS.A_TASK_HISTORY (A_WORKFLOW_HISTORY_KEY)
|
||||
TABLESPACE "DATA";
|
||||
@@ -0,0 +1,19 @@
|
||||
-- ====================================================================
|
||||
-- A_TASK_HISTORY_SOURCE Table
|
||||
-- ====================================================================
|
||||
-- Purpose: Track source data statistics for task history
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE CT_MRDS.A_TASK_HISTORY_SOURCE (
|
||||
A_TASK_HISTORY_SOURCE_KEY NUMBER(38,0) NOT NULL ENABLE,
|
||||
A_TASK_HISTORY_KEY NUMBER(38,0),
|
||||
A_WORKFLOW_HISTORY_SOURCE_KEY NUMBER(38,0),
|
||||
SOURCE_NAME VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP",
|
||||
ROW_COUNT NUMBER(38,0)
|
||||
) TABLESPACE "DATA";
|
||||
|
||||
-- Comments
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_SOURCE.A_TASK_HISTORY_SOURCE_KEY IS 'Technical primary key';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_SOURCE.A_TASK_HISTORY_KEY IS 'Foreign key referencing the subprocess delivering to the target';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_SOURCE.SOURCE_NAME IS 'Name of the DWH target table written in the load process';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_SOURCE.ROW_COUNT IS 'Number of rows read from the source during the load process';
|
||||
@@ -0,0 +1,22 @@
|
||||
-- ====================================================================
|
||||
-- A_TASK_HISTORY_TARGET Table
|
||||
-- ====================================================================
|
||||
-- Purpose: Track target data statistics for task history
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE CT_MRDS.A_TASK_HISTORY_TARGET (
|
||||
A_TASK_HISTORY_TARGET_KEY NUMBER(38,0) NOT NULL ENABLE,
|
||||
A_TASK_HISTORY_KEY NUMBER(38,0),
|
||||
TARGET_NAME VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP",
|
||||
ROW_COUNT_APPLIED NUMBER(38,0),
|
||||
ROW_COUNT_REJECTED NUMBER(38,0),
|
||||
LOAD_STATUS CHAR(1 CHAR) COLLATE "USING_NLS_COMP"
|
||||
) TABLESPACE "DATA";
|
||||
|
||||
-- Comments
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_TARGET.A_TASK_HISTORY_TARGET_KEY IS 'Technical primary key';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_TARGET.A_TASK_HISTORY_KEY IS 'Foreign key referencing the subprocess delivering to the target';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_TARGET.TARGET_NAME IS 'Name of the DWH target table written in the load process';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_TARGET.ROW_COUNT_APPLIED IS 'Number of rows succesfully applied (written to) the DWH target table during the load process';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_TARGET.ROW_COUNT_REJECTED IS 'Number of rows rejected (NOT written to) the DWH target table during the load process';
|
||||
COMMENT ON COLUMN CT_MRDS.A_TASK_HISTORY_TARGET.LOAD_STATUS IS 'Allowed values are RUNNING, SUCCESS and FAILED.';
|
||||
@@ -0,0 +1,32 @@
|
||||
-- ====================================================================
|
||||
-- A_WORKFLOW_HISTORY Table
|
||||
-- ====================================================================
|
||||
-- Purpose: Load history table for the Data Warehouse (DWH)
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE CT_MRDS.A_WORKFLOW_HISTORY (
|
||||
A_WORKFLOW_HISTORY_KEY NUMBER(38,0) NOT NULL ENABLE,
|
||||
ORCHESTRATION_RUN_ID VARCHAR2(300),
|
||||
WORKFLOW_NAME VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP",
|
||||
WORKFLOW_START TIMESTAMP(6),
|
||||
WORKFLOW_END TIMESTAMP(6),
|
||||
WORKFLOW_STATUS VARCHAR2(200),
|
||||
DBT_INVOCATION_ID VARCHAR2(200)
|
||||
) TABLESPACE "DATA";
|
||||
|
||||
-- Comments
|
||||
COMMENT ON TABLE CT_MRDS.A_WORKFLOW_HISTORY IS 'Load history table for the Data Warehouse (DWH)';
|
||||
COMMENT ON COLUMN CT_MRDS.A_WORKFLOW_HISTORY.A_WORKFLOW_HISTORY_KEY IS 'Technical key to identify a load operation. Generated with Oracle sequence "CT_MRDS.SEQ_WORKFLOW_HISTORY"';
|
||||
COMMENT ON COLUMN CT_MRDS.A_WORKFLOW_HISTORY.ORCHESTRATION_RUN_ID IS 'Run_id of the workflow';
|
||||
COMMENT ON COLUMN CT_MRDS.A_WORKFLOW_HISTORY.WORKFLOW_NAME IS 'The name of the workflow, this is always w_DWH_RAR_LOAD';
|
||||
COMMENT ON COLUMN CT_MRDS.A_WORKFLOW_HISTORY.WORKFLOW_START IS 'Start time of the Informatica workflow';
|
||||
COMMENT ON COLUMN CT_MRDS.A_WORKFLOW_HISTORY.WORKFLOW_END IS 'End time of the Informatica workflow';
|
||||
COMMENT ON COLUMN CT_MRDS.A_WORKFLOW_HISTORY.WORKFLOW_STATUS IS 'Overall status of the workflow, either RUNNING|SUCCESS|ERROR';
|
||||
|
||||
-- Grants
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON CT_MRDS.A_WORKFLOW_HISTORY TO MRDS_LOADER;
|
||||
|
||||
-- Bitmap index for workflow history queries
|
||||
CREATE BITMAP INDEX CT_MRDS.A_WORKFLOW_HISTORY_IDX1
|
||||
ON CT_MRDS.A_WORKFLOW_HISTORY (A_WORKFLOW_HISTORY_KEY, WORKFLOW_NAME, WORKFLOW_START)
|
||||
TABLESPACE "DATA";
|
||||
@@ -0,0 +1,18 @@
|
||||
-- ====================================================================
|
||||
-- A_WORKFLOW_HISTORY_PROPERTY Table
|
||||
-- ====================================================================
|
||||
-- Purpose: Store workflow history properties
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY (
|
||||
A_WORKFLOW_HISTORY_KEY NUMBER,
|
||||
SERVICE_NAME VARCHAR2(200),
|
||||
PROPERTY VARCHAR2(200),
|
||||
VALUE VARCHAR2(200),
|
||||
CONSTRAINT A_WORKFLOW_HISTORY_FK FOREIGN KEY (A_WORKFLOW_HISTORY_KEY, SERVICE_NAME)
|
||||
REFERENCES CT_MRDS.A_WORKFLOW_HISTORY (A_WORKFLOW_HISTORY_KEY, SERVICE_NAME)
|
||||
) TABLESPACE "DATA";
|
||||
|
||||
-- Index for performance on workflow history property queries
|
||||
CREATE INDEX CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY_IDX1
|
||||
ON CT_MRDS.A_WORKFLOW_HISTORY_PROPERTY(A_WORKFLOW_HISTORY_KEY, SERVICE_NAME);
|
||||
@@ -0,0 +1,25 @@
|
||||
-- ====================================================================
|
||||
-- ERR_LOG Table Definition
|
||||
-- ====================================================================
|
||||
-- Purpose: Error logging table for workflow and mapping errors
|
||||
-- Source: MARS-770 install_package_MarsGeneralRelease_MARS770_tables.sql
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE "CT_MRDS"."ERR_LOG"
|
||||
("ERR_LOG_KEY" NUMBER(*,0),
|
||||
"A_WORKFLOW_HISTORY_KEY" NUMBER(38,0),
|
||||
"ERR_MESSAGE_FK" NUMBER,
|
||||
"ERR_SEVERITY_FK" NUMBER,
|
||||
"ERR_WORKFLOW_RUN_ID" CHAR(17 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_WORKFLOW_NAME" CHAR(18 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_MAPPING_NAME" CHAR(74 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_LOCATION" CHAR(74 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_SOURCE" CHAR(22 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_KEY_BUSINESS" CHAR(6 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_KEY_BUSINESS_VALUE" CHAR(14 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_KEY_TECHNICAL" CHAR(22 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_KEY_TECHNICAL_VALUE" VARCHAR2(40 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_DESCRIPTION" CHAR(94 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"ERR_MESSAGE" VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP",
|
||||
"INDEP_SUBPROCESS_FK" NUMBER(38,0)
|
||||
);
|
||||
@@ -0,0 +1,35 @@
|
||||
-- ====================================================================
|
||||
-- TRG_A_DEVO_REPLICA_MGMT_MOPDB Trigger Definition
|
||||
-- ====================================================================
|
||||
-- Purpose: Audit trigger for A_DEVO_REPLICA_MGMT_MOPDB operations
|
||||
-- Source: new_EXP.sql export from production database
|
||||
-- ====================================================================
|
||||
|
||||
CREATE OR REPLACE EDITIONABLE TRIGGER "CT_MRDS"."TRG_A_DEVO_REPLICA_MGMT_MOPDB"
|
||||
AFTER INSERT OR UPDATE OR DELETE
|
||||
ON CT_MRDS.A_DEVO_REPLICA_MGMT_MOPDB
|
||||
FOR EACH ROW
|
||||
DECLARE
|
||||
vAction VARCHAR2(100);
|
||||
BEGIN
|
||||
IF INSERTING THEN
|
||||
vAction := 'INSERT';
|
||||
ELSIF UPDATING THEN
|
||||
vAction := 'UPDATE';
|
||||
ELSIF DELETING THEN
|
||||
vAction := 'DELETE';
|
||||
END IF;
|
||||
INSERT INTO
|
||||
CT_MRDS.A_DEVO_REPLICA_MGMT_LOG (OWNER, TABLE_NAME, TABLE_ALIAS,
|
||||
LAST_RUN_ID, LAST_START_TIME, LAST_END_TIME,
|
||||
LAST_STATUS, SAVE_MODE, PARTITION_COLUMN,
|
||||
MAX_THREADS, LAST_PROCESSED_KEY, ACTION,
|
||||
LOG_DATE, LOG_SOURCE)
|
||||
VALUES (:NEW.OWNER, :NEW.TABLE_NAME, :NEW.TABLE_ALIAS,
|
||||
:NEW.LAST_RUN_ID, :NEW.LAST_START_TIME, :NEW.LAST_END_TIME,
|
||||
:NEW.LAST_STATUS, :NEW.SAVE_MODE, :NEW.PARTITION_COLUMN,
|
||||
:NEW.MAX_THREADS, :NEW.LAST_PROCESSED_KEY, vAction,
|
||||
SYSDATE, 'MOPDB');
|
||||
END;
|
||||
|
||||
/
|
||||
@@ -0,0 +1,35 @@
|
||||
-- ====================================================================
|
||||
-- A_DEVO_REPLICA_MGMT_RAR_TRG Trigger Definition
|
||||
-- ====================================================================
|
||||
-- Purpose: Audit trigger for A_DEVO_REPLICA_MGMT_RAR operations
|
||||
-- Source: new_EXP.sql export from production database
|
||||
-- ====================================================================
|
||||
|
||||
CREATE OR REPLACE EDITIONABLE TRIGGER "CT_MRDS"."A_DEVO_REPLICA_MGMT_RAR_TRG"
|
||||
AFTER INSERT OR UPDATE OR DELETE
|
||||
ON CT_MRDS.A_DEVO_REPLICA_MGMT_RAR
|
||||
FOR EACH ROW
|
||||
DECLARE
|
||||
vAction VARCHAR2(100);
|
||||
BEGIN
|
||||
IF INSERTING THEN
|
||||
vAction := 'INSERT';
|
||||
ELSIF UPDATING THEN
|
||||
vAction := 'UPDATE';
|
||||
ELSIF DELETING THEN
|
||||
vAction := 'DELETE';
|
||||
END IF;
|
||||
INSERT INTO
|
||||
CT_MRDS.A_DEVO_REPLICA_MGMT_LOG (OWNER, TABLE_NAME, TABLE_ALIAS,
|
||||
LAST_RUN_ID, LAST_START_TIME, LAST_END_TIME,
|
||||
LAST_STATUS, SAVE_MODE, PARTITION_COLUMN,
|
||||
MAX_THREADS, LAST_PROCESSED_KEY, ACTION,
|
||||
LOG_DATE, LOG_SOURCE)
|
||||
VALUES (:NEW.OWNER, :NEW.TABLE_NAME, :NEW.TABLE_ALIAS,
|
||||
:NEW.LAST_RUN_ID, :NEW.LAST_START_TIME, :NEW.LAST_END_TIME,
|
||||
:NEW.LAST_STATUS, :NEW.SAVE_MODE, :NEW.PARTITION_COLUMN,
|
||||
:NEW.MAX_THREADS, :NEW.LAST_PROCESSED_KEY, vAction,
|
||||
SYSDATE, 'RAR');
|
||||
END;
|
||||
|
||||
/
|
||||
@@ -0,0 +1,40 @@
|
||||
-- ====================================================================
|
||||
-- TRG_A_WORKFLOW_HISTORY Trigger Definition
|
||||
-- ====================================================================
|
||||
-- Purpose: Trigger to insert workflow completion data to CT_ODS.A_LOAD_HISTORY
|
||||
-- Source: new_EXP.sql export from production database
|
||||
-- ====================================================================
|
||||
|
||||
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.workflow_name IN ('w_ODS_LM_STANDING_FACILITIES', 'w_ODS_CSDB_DEBT', 'w_ODS_CSDB_DEBT_DAILY', 'w_ODS_CSDB_RATINGS_FULL') AND :new.service_name = 'ODS' THEN
|
||||
IF :new.workflow_successful <> :old.workflow_successful AND :new.workflow_successful = 'Y' THEN
|
||||
IF :new.workflow_name = 'w_ODS_LM_STANDING_FACILITIES' THEN
|
||||
v_workflow_name := 'w_ODS_LM_STANDING_FACILITY';
|
||||
ELSE
|
||||
v_workflow_name := :new.workflow_name;
|
||||
END IF;
|
||||
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,16 @@
|
||||
CREATE OR REPLACE TRIGGER CT_MRDS.TRG_BIU_CHCK_TEMPLATE_TABLE_NAME
|
||||
BEFORE INSERT OR UPDATE ON "CT_MRDS"."A_COLUMN_DATE_FORMAT"
|
||||
FOR EACH ROW
|
||||
DECLARE
|
||||
vCount NUMBER;
|
||||
BEGIN
|
||||
SELECT COUNT(*)
|
||||
INTO vCount
|
||||
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
WHERE TEMPLATE_TABLE_NAME = :NEW.TEMPLATE_TABLE_NAME;
|
||||
|
||||
IF vCount = 0 THEN
|
||||
RAISE_APPLICATION_ERROR(-20001, 'TEMPLATE_TABLE_NAME = '''||:NEW.TEMPLATE_TABLE_NAME||''' not exists in A_SOURCE_FILE_CONFIG.TEMPLATE_TABLE_NAME ');
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
@@ -0,0 +1,53 @@
|
||||
CREATE OR REPLACE TRIGGER CT_MRDS.TRG_BI_A_SOURCE_FILE_CONFIG_CHECK
|
||||
BEFORE INSERT ON CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
FOR EACH ROW
|
||||
DECLARE
|
||||
-- NO_CONTAINER_FOR_INPUT EXCEPTION;
|
||||
WRONG_CONTAINER_FOR_INPUT EXCEPTION;
|
||||
CONTAINER_ALREADY_EXISTS EXCEPTION;
|
||||
vCount PLS_INTEGER;
|
||||
vContainerFileKey CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY%TYPE;
|
||||
BEGIN
|
||||
|
||||
--Check if there is CONTAINER entity in A_SOURCE_FILE_CONFIG table
|
||||
IF (:NEW.SOURCE_FILE_TYPE = 'INPUT' AND :NEW.CONTAINER_FILE_KEY IS NULL) THEN
|
||||
:NEW.CONTAINER_FILE_KEY := CT_MRDS.FILE_MANAGER.GET_CONTAINER_SOURCE_FILE_CONFIG_KEY(:NEW.SOURCE_FILE_ID);
|
||||
-- IF :NEW.CONTAINER_FILE_KEY is null THEN
|
||||
-- RAISE NO_CONTAINER_FOR_INPUT;
|
||||
-- END IF;
|
||||
|
||||
-- Check if provided CONTAINER_FILE_KEY is the one which exists in the A_SOURCE_FILE_CONFIG table
|
||||
ELSIF (:NEW.SOURCE_FILE_TYPE = 'INPUT' AND :NEW.CONTAINER_FILE_KEY IS NOT NULL) THEN
|
||||
vContainerFileKey := CT_MRDS.FILE_MANAGER.GET_CONTAINER_SOURCE_FILE_CONFIG_KEY(:NEW.SOURCE_FILE_ID);
|
||||
IF :NEW.CONTAINER_FILE_KEY <> vContainerFileKey THEN
|
||||
RAISE WRONG_CONTAINER_FOR_INPUT;
|
||||
END IF;
|
||||
|
||||
-- Check if there is already a CONTAINER for provided SOURCE_FILE_ID
|
||||
ELSIF (:NEW.SOURCE_FILE_TYPE = 'CONTAINER') THEN
|
||||
SELECT count(*)
|
||||
INTO vCount
|
||||
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
WHERE :NEW.SOURCE_FILE_TYPE = 'CONTAINER'
|
||||
AND SOURCE_FILE_ID = :NEW.SOURCE_FILE_ID;
|
||||
|
||||
IF vCount > 0 THEN
|
||||
RAISE CONTAINER_ALREADY_EXISTS;
|
||||
END IF;
|
||||
END IF;
|
||||
SELECT CT_MRDS.A_SOURCE_FILE_CONFIG_KEY_SEQ.NEXTVAL INTO :NEW.A_SOURCE_FILE_CONFIG_KEY FROM DUAL;
|
||||
|
||||
EXCEPTION
|
||||
-- WHEN NO_CONTAINER_FOR_INPUT THEN
|
||||
-- RAISE_APPLICATION_ERROR(-20011, 'Error while adding entity where SOURCE_FILE_TYPE = ''INPUT'''
|
||||
-- ||CHR(13)||CHR(10)||'There is no A_SOURCE_FILE_CONFIG entity where SOURCE_FILE_ID = '''||:NEW.SOURCE_FILE_ID||''' AND SOURCE_FILE_TYPE = ''CONTAINER'''
|
||||
-- ||CHR(13)||CHR(10)||'Add ''CONTAINER'' config entity before ''INPUT'' one');
|
||||
WHEN WRONG_CONTAINER_FOR_INPUT THEN
|
||||
RAISE_APPLICATION_ERROR(-20012, 'Provided CONTAINER_FILE_KEY='||:NEW.CONTAINER_FILE_KEY||' is wrong'
|
||||
||CHR(13)||CHR(10)||'There is A_SOURCE_FILE_CONFIG entity where SOURCE_FILE_ID = '''||:NEW.SOURCE_FILE_ID||''' AND SOURCE_FILE_TYPE = ''CONTAINER'''
|
||||
||CHR(13)||CHR(10)||'Existing CONTAINER_FILE_KEY='||vContainerFileKey);
|
||||
WHEN CONTAINER_ALREADY_EXISTS THEN
|
||||
RAISE_APPLICATION_ERROR(-20013, 'Such CONTAINER already exists!'
|
||||
||CHR(13)||CHR(10)||'There is A_SOURCE_FILE_CONFIG entity where SOURCE_FILE_ID = '''||:NEW.SOURCE_FILE_ID||''' AND SOURCE_FILE_TYPE = ''CONTAINER''');
|
||||
END;
|
||||
/
|
||||
@@ -0,0 +1,22 @@
|
||||
-- ====================================================================
|
||||
-- Oracle Object Types for File Management
|
||||
-- ====================================================================
|
||||
-- Purpose: Define object types for filename handling in file management system
|
||||
-- ====================================================================
|
||||
|
||||
-- Drop existing types if they exist
|
||||
DROP TYPE CT_MRDS.T_FILENAMES;
|
||||
DROP TYPE CT_MRDS.T_FILENAME;
|
||||
|
||||
-- Create filename object type
|
||||
CREATE OR REPLACE TYPE CT_MRDS.T_FILENAME AS OBJECT (
|
||||
FILENAME VARCHAR2(200),
|
||||
PATHNAME VARCHAR2(800),
|
||||
YEAR VARCHAR2(4),
|
||||
MONTH VARCHAR2(2)
|
||||
);
|
||||
/
|
||||
|
||||
-- Create collection of filename objects
|
||||
CREATE TYPE CT_MRDS.T_FILENAMES IS TABLE OF T_FILENAME;
|
||||
/
|
||||
@@ -0,0 +1,29 @@
|
||||
-- ====================================================================
|
||||
-- A_DWH_LOAD_HISTORY View Definition
|
||||
-- ====================================================================
|
||||
-- Purpose: View for DWH (RAR) load history with workflow and task tracking
|
||||
-- Source: MARS-770 install_package_MarsGeneralRelease_MARS770_views.sql
|
||||
-- ====================================================================
|
||||
|
||||
CREATE OR REPLACE FORCE EDITIONABLE VIEW "CT_MRDS"."A_DWH_LOAD_HISTORY"
|
||||
("A_WORKFLOW_HISTORY_KEY", "A_WORKFLOW_HISTORY_SOURCE_KEY", "A_TASK_HISTORY_KEY",
|
||||
"TASK_NAME", "TASK_START", "TASK_END", "WORKFLOW_SUCCESSFUL")
|
||||
DEFAULT COLLATION "USING_NLS_COMP" AS
|
||||
SELECT DISTINCT wh.a_workflow_history_key,
|
||||
ths.a_workflow_history_source_key,
|
||||
th.a_task_history_key,
|
||||
th.task_name,
|
||||
th.task_start,
|
||||
th.task_end,
|
||||
wh.workflow_successful
|
||||
FROM CT_MRDS.A_WORKFLOW_HISTORY wh
|
||||
JOIN CT_MRDS.A_TASK_HISTORY th
|
||||
ON wh.a_workflow_history_key = th.a_workflow_history_key
|
||||
AND wh.service_name = th.service_name
|
||||
JOIN CT_MRDS.A_TASK_HISTORY_SOURCE ths
|
||||
ON th.a_task_history_key = ths.a_task_history_key
|
||||
AND th.service_name = ths.service_name
|
||||
WHERE wh.service_name = 'RAR'
|
||||
AND wh.workflow_successful = 'Y'
|
||||
AND LOWER(th.task_name) NOT LIKE '%_sq'
|
||||
AND ths.a_workflow_history_source_key IS NOT NULL;
|
||||
@@ -0,0 +1,29 @@
|
||||
-- ====================================================================
|
||||
-- A_MOPDB_LOAD_HISTORY View Definition
|
||||
-- ====================================================================
|
||||
-- Purpose: View for MOPDB load history with workflow and task tracking
|
||||
-- Source: MARS-770 install_package_MarsGeneralRelease_MARS770_views.sql
|
||||
-- ====================================================================
|
||||
|
||||
CREATE OR REPLACE FORCE EDITIONABLE VIEW "CT_MRDS"."A_MOPDB_LOAD_HISTORY"
|
||||
("A_WORKFLOW_HISTORY_KEY", "A_WORKFLOW_HISTORY_SOURCE_KEY", "A_TASK_HISTORY_KEY",
|
||||
"TASK_NAME", "TASK_START", "TASK_END", "WORKFLOW_SUCCESSFUL")
|
||||
DEFAULT COLLATION "USING_NLS_COMP" AS
|
||||
SELECT DISTINCT wh.a_workflow_history_key,
|
||||
ths.a_workflow_history_source_key,
|
||||
th.a_task_history_key,
|
||||
th.task_name,
|
||||
th.task_start,
|
||||
th.task_end,
|
||||
wh.workflow_successful
|
||||
FROM CT_MRDS.A_WORKFLOW_HISTORY wh
|
||||
JOIN CT_MRDS.A_TASK_HISTORY th
|
||||
ON wh.a_workflow_history_key = th.a_workflow_history_key
|
||||
AND wh.service_name = th.service_name
|
||||
JOIN CT_MRDS.A_TASK_HISTORY_SOURCE ths
|
||||
ON th.a_task_history_key = ths.a_task_history_key
|
||||
AND th.service_name = ths.service_name
|
||||
WHERE wh.service_name = 'MOPDB'
|
||||
AND wh.workflow_successful = 'Y'
|
||||
AND LOWER(th.task_name) NOT LIKE '%_sq'
|
||||
AND ths.a_workflow_history_source_key IS NOT NULL;
|
||||
@@ -0,0 +1,17 @@
|
||||
create or replace view CT_MRDS.VW_A_PROCESS_LOG as
|
||||
select * from (
|
||||
select
|
||||
l.a_process_log_key
|
||||
,l.guid
|
||||
,l.process_name
|
||||
,l.procedure_name
|
||||
,l.log_level
|
||||
,l.log_message
|
||||
,l.log_timestamp
|
||||
,lead(log_message) over (partition by l.process_name, l.procedure_name, guid order by l.a_process_log_key) as next_log_message
|
||||
,lead(log_timestamp) over (partition by l.process_name, l.procedure_name, guid order by l.a_process_log_key) as next_log_timestamp
|
||||
from CT_MRDS.a_process_log l
|
||||
) where 1=1
|
||||
and log_message='Start'
|
||||
order by log_timestamp
|
||||
;
|
||||
@@ -0,0 +1,16 @@
|
||||
create or replace view CT_MRDS.VW_FILE_RECONCILIATION as
|
||||
select
|
||||
case
|
||||
when c.bytes is null then 'RECEIVED_MISSING_ON_CLOUD'
|
||||
when r.bytes is null then 'NOT_RECEIVED'
|
||||
when r.bytes is not null and c.bytes is not null then 'RECEIVED'
|
||||
else 'UNKNOWN'
|
||||
end as status
|
||||
,c.object_name as cloud_file
|
||||
,r.*
|
||||
from DBMS_CLOUD.LIST_OBJECTS('OCI$RESOURCE_PRINCIPAL', CT_MRDS.FILE_MANAGER.GET_INBOX_BUCKET_URI()) c
|
||||
full join a_source_file_received r
|
||||
on c.bytes = r.bytes
|
||||
and c.checksum = r.checksum
|
||||
and c.created = r.created
|
||||
;
|
||||
@@ -0,0 +1,15 @@
|
||||
create or replace view CT_MRDS.VW_FILE_RECONCILIATION_SUMMARY as
|
||||
select
|
||||
all_statuses.status
|
||||
,nvl(recon_stats.cnt, 0) as number_of_files
|
||||
from (
|
||||
select 'RECEIVED_MISSING_ON_CLOUD' as status from dual
|
||||
union all select 'NOT_RECEIVED' from dual
|
||||
union all select 'RECEIVED' from dual
|
||||
union all select 'UNKNOWN' from dual
|
||||
) all_statuses
|
||||
left join (select status, count(*) as cnt from CT_MRDS.VW_FILE_RECONCILIATION group by status
|
||||
) recon_stats
|
||||
on all_statuses.status = recon_stats.status
|
||||
order by 1
|
||||
;
|
||||
@@ -0,0 +1,22 @@
|
||||
ALTER TABLE CT_ODS.A_LOAD_HISTORY RENAME COLUMN A_ETL_LOAD_SET_KEY TO A_WORKFLOW_HISTORY_KEY;
|
||||
|
||||
create or replace TRIGGER "CT_ODS"."AUTOKEY_A_LOAD_HISTORY"
|
||||
BEFORE INSERT
|
||||
ON "CT_ODS"."A_LOAD_HISTORY"
|
||||
FOR EACH ROW
|
||||
|
||||
DECLARE
|
||||
e_more_than_28_digits EXCEPTION;
|
||||
|
||||
BEGIN
|
||||
IF :NEW.A_WORKFLOW_HISTORY_KEY IS NULL THEN
|
||||
:NEW.A_WORKFLOW_HISTORY_KEY := AUTOKEY_A_LOAD_HISTORY.NEXTVAL;
|
||||
ELSE
|
||||
-- Informatica PowerCenter cannot handle more than 28 significant places
|
||||
-- so raise exception if more were given manually
|
||||
IF :NEW.A_WORKFLOW_HISTORY_KEY > 9999999999999999999999999999 THEN
|
||||
RAISE e_more_than_28_digits;
|
||||
END IF;
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE OU_TMS.ACMCURRENCYFLOW RENAME COLUMN A_ETL_LOAD_SET_FK TO A_WORKFLOW_HISTORY_KEY;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE OU_TMS.ACMENTRYSTATELEDGERGROUP RENAME COLUMN A_ETL_LOAD_SET_FK TO A_WORKFLOW_HISTORY_KEY;
|
||||
DROP TABLE TMS.T_ACMENTRYSTATELEDGERGROUP;
|
||||
@@ -0,0 +1,28 @@
|
||||
--
|
||||
-- Properly set up C2D UC Dissem
|
||||
--
|
||||
|
||||
-- 1. Create Template table CT_TEMPLTATE_TABLES.C2D_A_UC_DISSEM_METADATA_LOADS
|
||||
|
||||
CREATE TABLE CT_ET_TEMPLATES.C2D_A_UC_DISSEM_METADATA_LOADS
|
||||
AS SELECT * FROM OU_C2D.A_UC_DISSEM_METADATA_LOADS WHERE 1=2;
|
||||
|
||||
-- 2. Create external tables
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('C2D_A_UC_DISSEM_METADATA_LOADS_INBOX','CT_ET_TEMPLATES.C2D_A_UC_DISSEM_METADATA_LOADS','INBOX/C2D/UC_DISSEM/A_UC_DISSEM_METADATA_LOADS');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('C2D_A_UC_DISSEM_METADATA_LOADS_ODS','CT_ET_TEMPLATES.C2D_A_UC_DISSEM_METADATA_LOADS','ODS/C2D/UC_DISSEM/A_UC_DISSEM_METADATA_LOADS');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('C2D_A_UC_DISSEM_METADATA_LOADS_ARCHIVE','CT_ET_TEMPLATES.C2D_A_UC_DISSEM_METADATA_LOADS','ARCHIVE/C2D/A_UC_DISSEM_METADATA_LOADS');
|
||||
|
||||
-- 3. Export table OU_C2D.A_UC_DISSEM_METADATA_LOADS
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.EXPORT_TABLE_DATA_BY_DATE('OU_C2D','A_UC_DISSEM_METADATA_LOADS','A_ETL_LOAD_SET_FK','mrds_inbox_tst','ARCHIVE/C2D/A_UC_DISSEM_METADATA_LOADS');
|
||||
|
||||
-- 4. Rename table to legacy table
|
||||
|
||||
ALTER TABLE OU_C2D.A_UC_DISSEM_METADATA_LOADS RENAME TO A_UC_DISSEM_METADATA_LOADS_LEGACY;
|
||||
|
||||
-- 5. Create OU view on top of ODS table
|
||||
|
||||
GRANT SELECT ON ods.C2D_A_UC_DISSEM_METADATA_LOADS_ODS TO OU_C2D;
|
||||
create or replace view OU_C2D.A_UC_DISSEM_METADATA_LOADS AS SELECT * from ods.C2D_A_UC_DISSEM_METADATA_LOADS_ODS;
|
||||
show errors
|
||||
@@ -0,0 +1,28 @@
|
||||
--
|
||||
-- Properly set up C2D UC Dissem
|
||||
--
|
||||
|
||||
-- 1. Create Template table CT_TEMPLTATE_TABLES.C2D_UC_MA_DISSEM
|
||||
|
||||
CREATE TABLE CT_ET_TEMPLATES.C2D_UC_MA_DISSEM
|
||||
AS SELECT * FROM OU_C2D.UC_MA_DISSEM WHERE 1=2;
|
||||
|
||||
-- 2. Create external tables
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('C2D_UC_MA_DISSEM_INBOX','CT_ET_TEMPLATES.C2D_UC_MA_DISSEM','INBOX/C2D/UC_DISSEM/UC_MA_DISSEM');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('C2D_UC_MA_DISSEM_ODS','CT_ET_TEMPLATES.C2D_UC_MA_DISSEM','ODS/C2D/UC_MA_DISSEM');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('C2D_UC_MA_DISSEM_ARCHIVE','CT_ET_TEMPLATES.C2D_UC_MA_DISSEM','ARCHIVE/C2D/UC_MA_DISSEM');
|
||||
|
||||
-- 3. Export table OU_C2D.UC_MA_DISSEM
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.EXPORT_TABLE_DATA_BY_DATE('OU_C2D','UC_MA_DISSEM','A_ETL_LOAD_SET_FK','mrds_inbox_tst','ARCHIVE/C2D/UC_MA_DISSEM');
|
||||
|
||||
-- 4. Rename table to legacy table
|
||||
|
||||
ALTER TABLE OU_C2D.UC_MA_DISSEM RENAME TO UC_MA_DISSEM_LEGACY;
|
||||
|
||||
-- 5. Create OU view on top of ODS table
|
||||
|
||||
GRANT SELECT ON ods.C2D_UC_MA_DISSEM_ODS TO OU_C2D;
|
||||
create or replace view OU_C2D.UC_MA_DISSEM AS SELECT * from ods.C2D_UC_MA_DISSEM_ODS;
|
||||
show errors
|
||||
@@ -0,0 +1,28 @@
|
||||
--
|
||||
-- Properly set up C2D UC Dissem
|
||||
--
|
||||
|
||||
-- 1. Create Template table CT_TEMPLTATE_TABLES.C2D_UC_NMA_DISSEM
|
||||
|
||||
CREATE TABLE CT_ET_TEMPLATES.C2D_UC_NMA_DISSEM
|
||||
AS SELECT * FROM OU_C2D.UC_NMA_DISSEM WHERE 1=2;
|
||||
|
||||
-- 2. Create external tables
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('C2D_UC_NMA_DISSEM_INBOX','CT_ET_TEMPLATES.C2D_UC_NMA_DISSEM','INBOX/C2D/UC_DISSEM/UC_NMA_DISSEM');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('C2D_UC_NMA_DISSEM_ODS','CT_ET_TEMPLATES.C2D_UC_NMA_DISSEM','ODS/C2D/UC_NMA_DISSEM');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('C2D_UC_NMA_DISSEM_ARCHIVE','CT_ET_TEMPLATES.C2D_UC_NMA_DISSEM','ARCHIVE/C2D/UC_NMA_DISSEM');
|
||||
|
||||
-- 3. Export table OU_C2D.UC_NMA_DISSEM
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.EXPORT_TABLE_DATA_BY_DATE('OU_C2D','UC_NMA_DISSEM','A_ETL_LOAD_SET_FK','mrds_inbox_tst','ARCHIVE/C2D/UC_NMA_DISSEM');
|
||||
|
||||
-- 4. Rename table to legacy table
|
||||
|
||||
ALTER TABLE OU_C2D.UC_NMA_DISSEM RENAME TO UC_NMA_DISSEM_LEGACY;
|
||||
|
||||
-- 5. Create OU view on top of ODS table
|
||||
|
||||
GRANT SELECT ON ods.C2D_UC_NMA_DISSEM_ODS TO OU_C2D;
|
||||
create or replace view OU_C2D.UC_NMA_DISSEM AS SELECT * from ods.C2D_UC_NMA_DISSEM_ODS;
|
||||
show errors
|
||||
@@ -0,0 +1,174 @@
|
||||
--
|
||||
-- Properly set up CSDB DEVO Instrument Ratings
|
||||
--
|
||||
|
||||
-- 1. Create Template table CT_TEMPLTATE_TABLES.CSDB_DEBT_DAILY
|
||||
|
||||
drop table "CT_ET_TEMPLATES"."CSDB_DEBT_DAILY";
|
||||
CREATE TABLE "CT_ET_TEMPLATES"."CSDB_DEBT_DAILY" (
|
||||
"A_KEY" NUMBER(38, 0)
|
||||
NOT NULL ENABLE,
|
||||
"A_WORKFLOW_HISTORY_KEY" NUMBER(38, 0)
|
||||
NOT NULL ENABLE,
|
||||
"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),
|
||||
"PLACEHOLDER32" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||
"PLACEHOLDER33" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||
"PLACEHOLDER34" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||
"PLACEHOLDER35" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||
"PLACEHOLDER36" VARCHAR2(4000 CHAR) COLLATE "USING_NLS_COMP",
|
||||
"PLACEHOLDER37" 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 IMMEDIATE
|
||||
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255 COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
|
||||
STORAGE ( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT
|
||||
FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT )
|
||||
TABLESPACE "DATA";
|
||||
|
||||
|
||||
-- 2. Create external tables
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('CSDB_DEBT_DAILY_INBOX','CT_ET_TEMPLATES.CSDB_DEBT_DAILY','INBOX/CSDB/DEBT_DAILY/DEBT_DAILY');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('CSDB_DEBT_DAILY_ODS','CT_ET_TEMPLATES.CSDB_DEBT_DAILY','ODS/CSDB/DEBT_DAILY');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('CSDB_DEBT_DAILY_ARCHIVE','CT_ET_TEMPLATES.CSDB_DEBT_DAILY','ARCHIVE/CSDB/DEBT_DAILY');
|
||||
|
||||
-- 3. Export table OU_CSDB.DEBT_DAILY
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.EXPORT_TABLE_DATA_BY_DATE('OU_CSDB','DEBT_DAILY','A_WORKFLOW_HISTORY_KEY','mrds_inbox_tst','ARCHIVE/CSDB/DEBT_DAILY');
|
||||
|
||||
-- 4. Rename table to legacy table
|
||||
|
||||
ALTER TABLE OU_CSDB.DEBT_DAILY RENAME TO DEBT_DAILY_LEGACY;
|
||||
|
||||
-- 5. Create OU view on top of ODS table
|
||||
|
||||
GRANT SELECT ON ods.CSDB_DEBT_DAILY_ODS TO OU_CSDB;
|
||||
create or replace view OU_CSDB.RATINGS_DEBT_DAILY AS SELECT * from ods.CSDB_DEBT_DAILY_ODS;
|
||||
show errors
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('CT_ET_TEMPLATES.DEBT_DAILY','NEWUPDATED','DD/MM/YYYY');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('CT_ET_TEMPLATES.DEBT_DAILY','IDLOADDATE_DIM','DD/MM/YYYY');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('CT_ET_TEMPLATES.DEBT_DAILY','IDISSUEDATE','DD/MM/YYYY');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('CT_ET_TEMPLATES.DEBT_DAILY','COUPONDATE','DD/MM/YYYY');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('CT_ET_TEMPLATES.DEBT_DAILY','IDMATURITYDATE','DD/MM/YYYY');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('CT_ET_TEMPLATES.DEBT_DAILY','PUBLICATIONPRICEDATE','DD/MM/YYYY');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('CT_ET_TEMPLATES.DEBT_DAILY','ACCRUALSTARTDATE','DD/MM/YYYY');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('CT_ET_TEMPLATES.DEBT_DAILY','SEC_STATUS_DATE','DD/MM/YYYY');
|
||||
@@ -0,0 +1,41 @@
|
||||
--
|
||||
-- Properly set up CSDB DEVO Instrument Ratings
|
||||
--
|
||||
|
||||
-- 1. Create Template table CT_TEMPLTATE_TABLES.CSDB_RT_INSTRUMENT_RATING
|
||||
|
||||
CREATE TABLE CT_ET_TEMPLATES.CSDB_RT_INSTRUMENT_RATING
|
||||
AS SELECT * FROM OU_CSDB.RATINGS_RT_INSTRUMENT_RATING WHERE 1=2;
|
||||
|
||||
-- 2. Create external tables
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('CSDB_RT_INSTRUMENT_RATING_INBOX','CT_ET_TEMPLATES.CSDB_RT_INSTRUMENT_RATING','INBOX/CSDB/RT_INSTRUMENT_RATING/RT_INSTRUMENT_RATING');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('CSDB_RT_INSTRUMENT_RATING_ODS','CT_ET_TEMPLATES.CSDB_RT_INSTRUMENT_RATING','ODS/CSDB/RT_INSTRUMENT_RATING');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('CSDB_RT_INSTRUMENT_RATING_ARCHIVE','CT_ET_TEMPLATES.CSDB_RT_INSTRUMENT_RATING','ARCHIVE/CSDB/RT_INSTRUMENT_RATING');
|
||||
|
||||
-- 3. Export table OU_CSDB.RT_INSTRUMENT_RATING
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.EXPORT_TABLE_DATA_BY_DATE('OU_CSDB','RT_INSTRUMENT_RATING','A_ETL_LOAD_SET_FK','mrds_inbox_tst','ARCHIVE/CSDB/RT_INSTRUMENT_RATING');
|
||||
|
||||
-- 4. Rename table to legacy table
|
||||
|
||||
ALTER TABLE OU_CSDB.RATINGS_RT_INSTRUMENT_RATING RENAME TO RATINGS_RT_INSTR_RATING_LEGACY;
|
||||
|
||||
-- 5. Create OU view on top of ODS table
|
||||
|
||||
GRANT SELECT ON ods.CSDB_RT_INSTRUMENT_RATING_ODS TO OU_CSDB;
|
||||
create or replace view OU_CSDB.RATINGS_RT_INSTRUMENT_RATING AS SELECT * from ods.CSDB_RT_INSTRUMENT_RATING_ODS;
|
||||
show errors
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('RT_INSTRUMENT_RATING','RT_INSTRUMENT_RATING','CORRECTFROM','YYYY-MM-DD HH24:MI:SS');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('RT_INSTRUMENT_RATING','RT_INSTRUMENT_RATING','VALIDUNTIL','YYYY-MM-DD HH24:MI:SS');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('RT_INSTRUMENT_RATING','RT_INSTRUMENT_RATING','TEC_EXECUTION_DATE','YYYY-MM-DD HH24:MI:SS');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('RT_INSTRUMENT_RATING','RT_INSTRUMENT_RATING','TEC_INGESTION_DATE','YYYY-MM-DD HH24:MI:SS');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('RT_INSTRUMENT_RATING','RT_INSTRUMENT_RATING','VALIDFROM','YYYY-MM-DD HH24:MI:SS');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('RT_INSTRUMENT_RATING','RT_INSTRUMENT_RATING','BATCH_LAST_UPDATED_DATE','YYYY-MM-DD HH24:MI:SS');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('RT_INSTRUMENT_RATING','RT_INSTRUMENT_RATING','CORRECTUNTIL','YYYY-MM-DD HH24:MI:SS');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('RT_INSTRUMENT_RATING','RT_INSTRUMENT_RATING','OUTLOOK_DATE','YYYY-MM-DD HH24:MI:SS');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('RT_INSTRUMENT_RATING','RT_INSTRUMENT_RATING','RATING_ACTION_DATE','YYYY-MM-DD HH24:MI:SS');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('RT_INSTRUMENT_RATING','RT_INSTRUMENT_RATING','RATING_DATE','YYYY-MM-DD HH24:MI:SS');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('RT_INSTRUMENT_RATING','RT_INSTRUMENT_RATING','TEC_BUSINESS_DATE','YYYY-MM-DD HH24:MI:SS');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('RT_INSTRUMENT_RATING','RT_INSTRUMENT_RATING','BATCH_FIRST_CREATED_DATE','YYYY-MM-DD HH24:MI:SS');
|
||||
EXEC CT_MRDS.FILE_MANAGER.ADD_COLUMN_DATE_FORMAT('RT_INSTRUMENT_RATING','RT_INSTRUMENT_RATING','WATCHLIST_DATE','YYYY-MM-DD HH24:MI:SS');
|
||||
@@ -0,0 +1,29 @@
|
||||
--
|
||||
-- Properly set up LM Standing Facilities
|
||||
--
|
||||
|
||||
-- 1. Create Template table CT_TEMPLTATE_TABLES.LM_STANDING_FACILITIES
|
||||
|
||||
CREATE TABLE CT_ET_TEMPLATES.LM_STANDING_FACILITIES
|
||||
AS SELECT * FROM OU_LM.STANDING_FACILITIES WHERE 1=2;
|
||||
|
||||
-- 2. Create external tables
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('LM_STANDING_FACILITIES_INBOX','CT_ET_TEMPLATES.LM_STANDING_FACILITIES','INBOX/LM/STANDING_FACILITIES/STANDING_FACILITIES');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('LM_STANDING_FACILITIES_ODS','CT_ET_TEMPLATES.LM_STANDING_FACILITIES','ODS/LM/STANDING_FACILITIES');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('LM_STANDING_FACILITIES_ARCHIVE','CT_ET_TEMPLATES.LM_STANDING_FACILITIES','ARCHIVE/LM/STANDING_FACILITIES');
|
||||
|
||||
-- 3. Export table OU_LM.STANDING_FACILITIES to ARCHIVE
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.EXPORT_TABLE_DATA_BY_DATE('OU_LM','STANDING_FACILITIES','A_WORKFLOW_HISTORY_KEY','mrds_inbox_tst','ARCHIVE/LM/STANDING_FACILITIES');
|
||||
|
||||
-- 4. Rename OU_LM.STANDING_FACILITIES to OU_LM.STANDING_FACILITIES_LEGACY
|
||||
|
||||
ALTER TABLE OU_LM.STANDING_FACILITIES RENAME TO STANDING_FACILITIES_LEGACY;
|
||||
|
||||
-- 5. Create view OU_LM.STANDING_FACILITIES on top of ODS.LM_STANDING_FACILITIES_INBOX
|
||||
|
||||
REVOKE SELECT ON ods.lm_standing_facilities_inbox from OU_LM;
|
||||
GRANT SELECT ON ods.lm_standing_facilities_ods TO OU_LM;
|
||||
create or replace view OU_LM.STANDING_FACILITIES as select * from ods.lm_standing_facilities_ods;
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
--
|
||||
-- Properly set up LM Standing Facilities Header
|
||||
--
|
||||
|
||||
-- 1. Create Template table CT_TEMPLTATE_TABLES.LM_STANDING_FACILITIES
|
||||
|
||||
CREATE TABLE CT_ET_TEMPLATES.LM_STANDING_FACILITIES_HEADER
|
||||
AS SELECT * FROM OU_LM.STANDING_FACILITIES_HEADER WHERE 1=2;
|
||||
|
||||
-- 2. Create external tables
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('LM_STANDING_FACILITIES_HEADER_INBOX','CT_ET_TEMPLATES.LM_STANDING_FACILITIES_HEADER','INBOX/LM/STANDING_FACILITIES/STANDING_FACILITIES_HEADER');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('LM_STANDING_FACILITIES_HEADER_ODS','CT_ET_TEMPLATES.LM_STANDING_FACILITIES_HEADER','ODS/LM/STANDING_FACILITIES_HEADER');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('LM_STANDING_FACILITIES_HEADER_ARCHIVE','CT_ET_TEMPLATES.LM_STANDING_FACILITIES_HEADER','ARCHIVE/LM/STANDING_FACILITIES_HEADER');
|
||||
|
||||
-- 3. Export table OU_LM.STANDING_FACILITIES to ARCHIVE
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.EXPORT_TABLE_DATA_BY_DATE('OU_LM','STANDING_FACILITIES_HEADER','A_WORKFLOW_HISTORY_KEY','mrds_inbox_tst','ARCHIVE/LM/STANDING_FACILITIES_HEADER');
|
||||
|
||||
-- 4. Rename OU_LM.STANDING_FACILITIES to OU_LM.STANDING_FACILITIES_LEGACY
|
||||
|
||||
ALTER TABLE OU_LM.STANDING_FACILITIES_HEADER RENAME TO STANDING_FACILITIES_HEADER_LEGACY;
|
||||
|
||||
-- 5. Create view OU_LM.STANDING_FACILITIES on top of ODS.LM_STANDING_FACILITIES_INBOX
|
||||
|
||||
GRANT SELECT ON ods.lm_standing_facilities_header_ods TO OU_LM;
|
||||
create or replace view OU_LM.STANDING_FACILITIES_HEADER AS SELECT * from ods.LM_STANDING_FACILITIES_HEADER_ods;
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
--
|
||||
-- Properly set up MDP Standing Facilities
|
||||
--
|
||||
|
||||
-- 1. Create Template table CT_TEMPLTATE_TABLES.MDP_BBG_EQUITY_OT
|
||||
|
||||
CREATE TABLE CT_ET_TEMPLATES.MDP_BBG_EQUITY_OT
|
||||
AS SELECT * FROM OU_MDP.BBG_EQUITY_OT WHERE 1=2;
|
||||
|
||||
-- 2. Create external tables
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('MDP_BBG_EQUITY_OT_INBOX','CT_ET_TEMPLATES.MDP_BBG_EQUITY_OT','INBOX/MDP/BBG_EQUITY_OT/BBG_EQUITY_OT');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('MDP_BBG_EQUITY_OT_ODS','CT_ET_TEMPLATES.MDP_BBG_EQUITY_OT','ODS/MDP/BBG_EQUITY_OT');
|
||||
EXEC CT_MRDS.FILE_MANAGER.CREATE_EXTERNAL_TABLE('MDP_BBG_EQUITY_OT_ARCHIVE','CT_ET_TEMPLATES.MDP_BBG_EQUITY_OT','ARCHIVE/MDP/BBG_EQUITY_OT');
|
||||
|
||||
-- 3. Export table OU_MDP.BBG_EQUITY_OT to ARCHIVE
|
||||
|
||||
EXEC CT_MRDS.FILE_MANAGER.EXPORT_TABLE_DATA_BY_DATE('OU_MDP','BBG_EQUITY_OT','A_WORKFLOW_HISTORY_KEY','mrds_inbox_tst','ARCHIVE/MDP/BBG_EQUITY_OT');
|
||||
|
||||
-- 4. Rename OU_MDP.BBG_EQUITY_OT to OU_MDP.BBG_EQUITY_OT_LEGACY
|
||||
|
||||
ALTER TABLE OU_MDP.BBG_EQUITY_OT RENAME TO BBG_EQUITY_OT_LEGACY;
|
||||
|
||||
-- 5. Create view OU_MDP.BBG_EQUITY_OT on top of ODS.MDP_BBG_EQUITY_OT_INBOX
|
||||
|
||||
REVOKE SELECT ON ods.lm_standing_facilities_inbox from OU_MDP;
|
||||
GRANT SELECT ON ods.lm_standing_facilities_ods TO OU_MDP;
|
||||
create or replace view OU_MDP.BBG_EQUITY_OT as select * from ods.lm_standing_facilities_ods;
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE OU_TMS.ACMENTRYSTATELEDGERGROUP RENAME COLUMN A_ETL_LOAD_SET_FK TO A_WORKFLOW_HISTORY_KEY;
|
||||
DROP TABLE TMS.T_ACMENTRYSTATELEDGERGROUP;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE OU_TMS.ACTIVITYLOGDUE RENAME COLUMN A_ETL_LOAD_SET_FK TO A_WORKFLOW_HISTORY_KEY;
|
||||
DROP TABLE TMS.T_ACTIVITYLOGDUE;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE OU_TMS.ACTIVITY_LOG RENAME COLUMN A_ETL_LOAD_SET_FK TO A_WORKFLOW_HISTORY_KEY;
|
||||
DROP TABLE TMS.T_ACTIVITY_LOG;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE OU_TMS.BALANCE RENAME COLUMN A_ETL_LOAD_SET_FK TO A_WORKFLOW_HISTORY_KEY;
|
||||
DROP TABLE TMS.T_BALANCE;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE OU_TMS.BLACKOUT_LOG RENAME COLUMN A_ETL_LOAD_SET_FK TO A_WORKFLOW_HISTORY_KEY;
|
||||
DROP TABLE TMS.T_BLACKOUT_LOG;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE OU_TMS.BRANCH RENAME COLUMN A_ETL_LOAD_SET_FK TO A_WORKFLOW_HISTORY_KEY;
|
||||
DROP TABLE TMS.T_BRANCH;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE OU_TMS.CALENDAR RENAME COLUMN A_ETL_LOAD_SET_FK TO A_WORKFLOW_HISTORY_KEY;
|
||||
DROP TABLE TMS.T_CALENDAR;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE OU_TMS.CASHFLOW RENAME COLUMN A_ETL_LOAD_SET_FK TO A_WORKFLOW_HISTORY_KEY;
|
||||
DROP TABLE TMS.T_CASHFLOW;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE OU_TMS.CLIENT RENAME COLUMN A_ETL_LOAD_SET_FK TO A_WORKFLOW_HISTORY_KEY;
|
||||
DROP TABLE TMS.T_CLIENT;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE OU_TMS.CUSTODYBALANCE RENAME COLUMN A_ETL_LOAD_SET_FK TO A_WORKFLOW_HISTORY_KEY;
|
||||
DROP TABLE TMS.T_CUSTODYBALANCE;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE OU_TMS.ECBINSTRUMENTBONDCASHFLOW RENAME COLUMN A_ETL_LOAD_SET_FK TO A_WORKFLOW_HISTORY_KEY;
|
||||
DROP TABLE TMS.T_ECBINSTRUMENTBONDCASHFLOW;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE OU_TMS.EFFECTIVEROLEPROFILE RENAME COLUMN A_ETL_LOAD_SET_FK TO A_WORKFLOW_HISTORY_KEY;
|
||||
DROP TABLE TMS.T_EFFECTIVEROLEPROFILE;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE OU_TMS.FINMESSAGELOG RENAME COLUMN A_ETL_LOAD_SET_FK TO A_WORKFLOW_HISTORY_KEY;
|
||||
DROP TABLE TMS.T_FINMESSAGELOG;
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user