Summary Table
| Categories |
Total Count |
| PII |
0 |
| URL |
0 |
| DNS |
0 |
| EKL |
0 |
| IP |
0 |
| PORT |
0 |
| VsID |
0 |
| CF |
0 |
| AI |
0 |
| VPD |
0 |
| PL |
0 |
| Other |
0 |
File Content
DROP PACKAGE BODY ADR.ADR_UTIL;
CREATE OR REPLACE PACKAGE BODY ADR.adr_util
AS
CURSOR adr_seq IS select owner, object_name
from dba_objects
where owner in ('ADR', 'PSD', 'PSIM')
and object_type = 'SEQUENCE'
order by owner, object_name;
CURSOR adr_trig IS select owner, object_name
from dba_objects
where owner in ('ADR', 'PSD', 'PSIM')
and object_type = 'TRIGGER'
order by owner, object_name;
obj varchar2(50);
/***************************************************************************
*
* NAME
* ADR_PIN_SEQ
*
* DESCRIPTION
* ADR_PIN_SEQ marks all ADR, PSIM and PSD sequences as objects to be
* kept in the shared pool memory.
*
*/
PROCEDURE ADR_PIN_SEQ IS
BEGIN
FOR fnd_seq IN adr_seq LOOP
obj := fnd_seq.owner ||'.'|| fnd_seq.object_name;
DBMS_SHARED_POOL.KEEP(obj,'Q');
END LOOP;
END ADR_PIN_SEQ;
/***************************************************************************
*
* NAME
* ADR_UNPIN_SEQ
*
* DESCRIPTION
* ADR_UNPIN_SEQ marks all ADR, PSIM and PSD sequences as objects to be
* not kept in the shared pool memory.
*
*/
PROCEDURE ADR_UNPIN_SEQ IS
BEGIN
FOR fnd_seq IN adr_seq LOOP
obj := fnd_seq.owner ||'.'|| fnd_seq.object_name;
DBMS_SHARED_POOL.UNKEEP(obj,'Q');
END LOOP;
END ADR_UNPIN_SEQ;
/***************************************************************************
*
* NAME
* ADR_PIN_TRIGGERS
*
* DESCRIPTION
* ADR_PIN_TRIGGERS marks all ADR, PSIM and PSD triggers as objects
* to be kept in the shared pool memory.
*
*/
PROCEDURE ADR_PIN_TRIGGERS IS
BEGIN
FOR fnd_trig IN adr_trig LOOP
obj := fnd_trig.owner ||'.'|| fnd_trig.object_name;
DBMS_SHARED_POOL.KEEP(obj,'R');
END LOOP;
END ADR_PIN_TRIGGERS;
/***************************************************************************
*
* NAME
* ADR_UNPIN_TRIGGERS
*
* DESCRIPTION
* ADR_UNPIN_TRIGGERS marks all ADR, PSIM and PSD triggers as objects
* to be not kept in the shared pool memory.
*
*/
PROCEDURE ADR_UNPIN_TRIGGERS IS
BEGIN
FOR fnd_trig IN adr_trig LOOP
obj := fnd_trig.owner ||'.'|| fnd_trig.object_name;
DBMS_SHARED_POOL.UNKEEP(obj,'R');
END LOOP;
END ADR_UNPIN_TRIGGERS;
END adr_util;
/
CREATE OR REPLACE PUBLIC SYNONYM ADR_UTIL FOR ADR.ADR_UTIL;
GRANT EXECUTE ON ADR.ADR_UTIL TO AACDBA;
DROP PACKAGE BODY ADR.CCN_SRV_LOAD_PKG;
CREATE OR REPLACE PACKAGE BODY ADR.CCN_SRV_LOAD_PKG
AS
-- ******************************************************
-- Purpose: This package is to mainly use for various ADR maintenance tasks
--
-- Version Date Who Description
-- ======= ========== ============ =======================================
-- 1.1 04/01/2019 Richard Do 966880: Added 2 new SP, 3 new columns and modified view
-- 1.2 04/19/2019 Richard Do 966880: Added logics to improve performance by process a partition at a time
-- 1.3 04/26/2019 Richard Do 966880: Added logic to include address.address_phone_number when temp phone number IS NULL
-- Modified procedure LOAD_VCELIGIBILITY_STG to rollup VCE by VCESTATUSTYPE_ID
-- 1.4 05/02/2019 Richard Do 966880: Added logic to build dynamic view for person of SP LOAD_SELECTED_PERSON_STG
-- processed a partition by a partition
-- Temp tables used
-- CCN_SERVLOG_STG
-- VCELIGIBILITY_STG
-- ENRDETERM_STG
-- CCN_PERSON_SELECTED_STG
-- CCN_ADDRESS_STG
-- CCN_ADDRESS_H_STG
-- CCN_ADDRESS_H_STG
-- CCN_PREFERED_FACILITY_H_STG
-- CCN_EMAIL_STG
-- CCN_GEOCODE_TRANSMIT_STG
-- CCN_PHONE_STG
-- CCN_SERVICE_LOG_LOAD_VW
-- CCN_PERSON_VCE_VW
CC_ADDRESSTYPE_ID_RESI CONSTANT NUMBER := 1807412;
CC_ADDRESSTYPE_ID_TEMP CONSTANT NUMBER := 1449005;
CC_ADDRESSTYPE_ID_PERM CONSTANT NUMBER := 1449012;
CC_WI CONSTANT VARCHAR2(15):= 'CCN966880'; -- 1.0 under WI 591034
lc_continue_proc BOOLEAN:= TRUE;
C_PERSONSEL CONSTANT VARCHAR2(80) := 'CCN_PERSON_SELECTED_STG';
C_CCNADDRESS CONSTANT VARCHAR2(80) := 'CCN_ADDRESS_STG';
C_ENROLDETERM CONSTANT VARCHAR2(80) := 'ENRDETERM_STG';
C_VCELIGIBILTY_H CONSTANT VARCHAR2(80) := 'CCN_VCELIGIBILITY_H_STG';
C_PERSONTRAITS CONSTANT VARCHAR2(80) := 'PERSON_TRAITS';
TYPE VARCHAR2_TAB_T IS TABLE OF VARCHAR2(120) INDEX BY BINARY_INTEGER;
PERSONSEL_TAB VARCHAR2_TAB_T;
CCNADDRESS_TAB VARCHAR2_TAB_T;
VCELIGIBILITYSTG_H_TAB VARCHAR2_TAB_T;
ENRDETERMSTG_TAB VARCHAR2_TAB_T;
PERSONTRAIT_TAB VARCHAR2_TAB_T;
gc_service_log_seq_id NUMBER;
gc_contractor_id NUMBER;
VC_log_step VARCHAR2(500);
gc_interation NUMBER:= 0;
VC_error_msg VARCHAR2(5000);
VN_elapsed_time NUMBER := 0;
VC_unit VARCHAR2(5);
VN_start_time VARCHAR2(60);
gc_record_create_by VARCHAR2(50) := CC_WI;
VN_grand_total_count NUMBER:= 0;
time_a INTEGER;
time_b INTEGER;
--gc_job_sucess NUMBER := 1; -- 0=FAIL, 1=SUCESS
PROCEDURE BULK_EXCEPTIONS (p_row_count IN NUMBER, p_log_step IN VARCHAR2);
/***************************************************************************
*
* NAME
* PURGE_STG_TABLE
*
* DESCRIPTION
* PURGE_STG_TABLE is to purage all staging tables prior loading
*
***************************************************************************/
PROCEDURE PURGE_STG_TABLE
AS
VN_count_tmp NUMBER := 0;
BEGIN
gc_sp_name := 'PURGE_STG_TABLE';
time_a := DBMS_UTILITY.get_time;
adr.sf_timer.start_timer;
EXECUTE IMMEDIATE 'TRUNCATE TABLE CCN_TPHONE_STG';
EXECUTE IMMEDIATE 'TRUNCATE TABLE CCN_SERVLOG_STG';
EXECUTE IMMEDIATE 'TRUNCATE TABLE VCELIGIBILITY_STG';
EXECUTE IMMEDIATE 'TRUNCATE TABLE CCN_VCELIGIBILITY_H_STG';
EXECUTE IMMEDIATE 'TRUNCATE TABLE ENRDETERM_STG';
EXECUTE IMMEDIATE 'TRUNCATE TABLE CCN_PERSON_SELECTED_STG';
EXECUTE IMMEDIATE 'TRUNCATE TABLE CCN_ADDRESS_STG';
EXECUTE IMMEDIATE 'TRUNCATE TABLE CCN_ADDRESS_H_STG';
EXECUTE IMMEDIATE 'TRUNCATE TABLE CCN_PREFERED_FACILITY_H_STG';
EXECUTE IMMEDIATE 'TRUNCATE TABLE CCN_EMAIL_STG';
EXECUTE IMMEDIATE 'TRUNCATE TABLE CCN_GEOCODE_TRANSMIT_STG';
EXECUTE IMMEDIATE 'TRUNCATE TABLE CCN_PHONE_STG';
SELECT COUNT(1) INTO VN_count_tmp
FROM all_indexes
WHERE index_name = 'CCN_PERSELSTG_PERSONID'
AND owner = 'ADR';
IF VN_count_tmp > 0 THEN
EXECUTE IMMEDIATE 'DROP INDEX CCN_PERSELSTG_PERSONID';
END IF;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => '*****INFORMATION - PKG '||CC_MODULE_NAME|| ' INITIATED...',
PC_job_log_message => gc_sp_name||' - PURGED STAGE TABLES',
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END PURGE_STG_TABLE;
/***************************************************************************
*
* NAME
* SET_BULK_LOAD_LIMIT
*
* DESCRIPTION
* Set SET_BULK_LOAD_LIMIT
*
***************************************************************************/
PROCEDURE SET_BULK_LOAD_LIMIT (p_bulk_load_lim IN NUMBER)
AS
BEGIN
gc_bulk_limit:= p_bulk_load_lim;
END SET_BULK_LOAD_LIMIT;
/***************************************************************************
*
* NAME
* SET_DOP
*
* DESCRIPTION
* Set SET_DOP used for parallelism
*
***************************************************************************/
PROCEDURE SET_DOP (p_parallel_dop IN NUMBER)
AS
BEGIN
gc_parallel_dop:= p_parallel_dop;
END SET_DOP;
FUNCTION elapsed_time RETURN NUMBER
IS
VN_end_time PLS_INTEGER := DBMS_UTILITY.get_cpu_time;
BEGIN
RETURN (MOD (VN_end_time - VN_start_time + POWER (2, 32) , POWER (2, 32) ));
END;
/***************************************************************************
*
* NAME
* ALTER_SESSION_SETTINGS
*
* DESCRIPTION
* Set session parallel
*
***************************************************************************/
PROCEDURE ALTER_SESSION_SETTINGS (p_dop NUMBER) IS
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET ddl_lock_timeout = 1800';
EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL DDL PARALLEL '|| p_dop;
EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL DML PARALLEL ' || p_dop;
EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL QUERY PARALLEL '||p_dop;
EXECUTE IMMEDIATE 'ALTER SESSION SET DB_FILE_MULTIBLOCK_READ_COUNT = 128';
EXECUTE IMMEDIATE 'ALTER SESSION SET PARALLEL_FORCE_LOCAL=TRUE';
END ALTER_SESSION_SETTINGS;
/***************************************************************************
*
* NAME
* INITIALIZE_COLLECTION
*
* DESCRIPTION
* INITIALIZE_COLLECTION is to initialize the collections
*
***************************************************************************/
PROCEDURE INITIALIZE_COLLECTION AS
BEGIN
ccn_stage_rowcount_rec.rowcount_person := 0;
ccn_stage_rowcount_rec.rowcount_addr := 0;
ccn_stage_rowcount_rec.rowcount_addr_h := 0;
ccn_stage_rowcount_rec.rowcount_prefac := 0;
ccn_stage_rowcount_rec.rowcount_email := 0;
ccn_stage_rowcount_rec.rowcount_phone := 0;
ccn_stage_rowcount_rec.rowcount_geotrans:= 0;
NULL;
END INITIALIZE_COLLECTION;
/***************************************************************************
*
* NAME
* BULK_EXCEPTIONS
*
* DESCRIPTION
* BULK_EXCEPTIONS is to display collections errors of bulk exceptions
*
***************************************************************************/
PROCEDURE BULK_EXCEPTIONS (p_row_count IN NUMBER,
p_log_step IN VARCHAR2) AS
VN_EXCEPTION_CNT NUMBER := 0;
BEGIN
VN_EXCEPTION_CNT := SQL%BULK_EXCEPTIONS.COUNT;
FOR I IN 1 .. VN_EXCEPTION_CNT LOOP
VC_error_msg :=
'ERROR BULK: ' || p_log_step||' ERROR# '||I||' INTERATION# '||SQL%BULK_EXCEPTIONS(I).ERROR_INDEX ||
' ERR MSG: " ' || SQLERRM(-SQL%BULK_EXCEPTIONS(I).ERROR_CODE);
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'BULK ERROR EXCEPTION-TORAL ROWS FAILED: '||VN_EXCEPTION_CNT,
PC_job_log_message => VC_error_msg,
PC_text1 => 'Rows Added: '||p_row_count|| ' - Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
NULL;
END BULK_EXCEPTIONS;
/***************************************************************************
*
* NAME
* INITIALIZE_TAB_PARTITION_ARRAY
*
* DESCRIPTION
* INITIALIZE_TAB_PARTITION_ARRAY is to display collections errors of bulk exceptions
*
***************************************************************************/
PROCEDURE INITIALIZE_TAB_PARTITION_ARRAY AS
VC_sql_statement VARCHAR2(800);
BEGIN
-- Load partition names of CCN_PERSON_SELECTED_STG table
VC_sql_statement := 'SELECT partition_name ' ||CHR(10)||--PERSONSEL_TAB
' FROM all_tab_partitions '||CHR(10)||
'WHERE table_name = :1'||CHR(10)||
'ORDER BY partition_position';
EXECUTE IMMEDIATE VC_sql_statement BULK COLLECT INTO PERSONSEL_TAB USING C_PERSONSEL;
-- Load partition names of CCN_ADDRESS_STG table
EXECUTE IMMEDIATE VC_sql_statement BULK COLLECT INTO CCNADDRESS_TAB USING C_CCNADDRESS;
-- Load partition names of ENRDETERMSTG STAGING TAB table
EXECUTE IMMEDIATE VC_sql_statement BULK COLLECT INTO ENRDETERMSTG_TAB USING C_ENROLDETERM;
-- Load partition names of VCELIGIBILITY STAGING TAB table
EXECUTE IMMEDIATE VC_sql_statement BULK COLLECT INTO VCELIGIBILITYSTG_H_TAB USING C_VCELIGIBILTY_H;
-- Load partition names of PERSONTRAITE STAGING TAB table
EXECUTE IMMEDIATE VC_sql_statement BULK COLLECT INTO PERSONTRAIT_TAB USING C_PERSONTRAITS;
END INITIALIZE_TAB_PARTITION_ARRAY;
/********************************************************************************************
*
* NAME
* BUILD_PERSON_VCE_VW is to load data into staging table LOAD_CCNSERVLOG_STG
*
* DESCRIPTION
* This view is dynamically build based a partition by a partition to avoid temp space
* ran out
*
***************************************************************************/
PROCEDURE BUILD_PERSON_VCE_VW(p_part_number IN NUMBER) AS
ln_tmp NUMBER:= 0;
lv_columns_stmnt VARCHAR2(1000);
lv_select_stmnt VARCHAR2(2000);
lv_from_stmnt VARCHAR2(1000);
lv_vw_stmnt VARCHAR2(6000);
BEGIN
lv_columns_stmnt :=
'CREATE OR REPLACE VIEW ADR.CCN_PERSON_VCE_VW '||CHR(10)||
'(PERSON_ID, DATE_OF_BIRTH, DATE_OF_BIRTH_TXT, DEATH_DATE_TXT, FIRST_NAME, MIDDLE_NAME , LAST_NAME, SUFFIX, '||CHR(10)||
'GENDER_CODE,ssn, edipi, VCELIGIBILITY_H_ID, VCELIGBTY_RECORD_MODIFIED_DATE, VCE , PRIORITY_GROUP, PRIORITY_GROUP_EFFECT_DATE_TXT) AS ';
lv_select_stmnt :=
'SELECT /*+ use_hash (per vc t e) parallel(vc, 2) parallel(s, 2) parallel(t, 2) */ per.PERSON_ID, '||CHR(10)||
'CASE WHEN NVL(LENGTH(T.DATE_OF_BIRTH),1) = 8 '||CHR(10)||
' THEN TO_DATE(T.DATE_OF_BIRTH,''YYYYMMDD'') '||CHR(10)||
'ELSE NULL ' ||CHR(10)||
'END DATE_OF_BIRTH, ' ||CHR(10)||
't.DATE_OF_BIRTH DATE_OF_BIRTH_TXT, per.DEATH_DATE_TXT, ' ||CHR(10)||
't.FIRST_NAME, t.MIDDLE_NAME, t.LAST_NAME, t.SUFFIX, t.GENDER_CODE, t.ssn, t.edipi, '||CHR(10)||
'vc.VCELIGIBILITY_H_ID, vc.RECORD_MODIFIED_DATE VCELIGBTY_RECORD_MODIFIED_DATE, vc.VCE, '||CHR(10)||
'e.PRIORITY_GROUP, e.PRIORITY_GROUP_EFFECT_DATE_TXT';
lv_from_stmnt :=
' FROM PERSON per '||CHR(10)||
-- 'INNER JOIN ADR.PERSON_TRAITS PARTITION ('||PERSONTRAIT_TAB(p_part_number)||') t ON t.VPID_VALUE = per.VPID_VALUE '||CHR(10)||
'INNER JOIN ADR.PERSON_TRAITS t ON t.VPID_VALUE = per.VPID_VALUE '||CHR(10)||
'INNER JOIN ADR.CCN_VCELIGIBILITY_H_STG PARTITION ('||VCELIGIBILITYSTG_H_TAB(p_part_number)||') vc ON PER.PERSON_ID = vc.PERSON_ID'||CHR(10)||
'INNER JOIN ADR.ENRDETERM_STG PARTITION ('||ENRDETERMSTG_TAB(p_part_number)||') e ON vc.PERSON_ID = e.PERSON_ID';
lv_vw_stmnt := lv_columns_stmnt ||CHR(10)||
lv_select_stmnt ||CHR(10)||
lv_from_stmnt;
EXECUTE IMMEDIATE (lv_vw_stmnt);
EXCEPTION
WHEN OTHERS THEN
-- gc_job_sucess := 0;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'VIEW ORA ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => lv_select_stmnt ||CHR(10)|| lv_from_stmnt,
PD_date1 => SYSDATE
);
RAISE;
END BUILD_PERSON_VCE_VW;
/********************************************************************************************
*
* NAME
* BUILD_SERVICELOG_VW is to load data into staging table LOAD_CCNSERVLOG_STG
*
* DESCRIPTION
* This view is to dynamically built based on a partition by a partition
*
***************************************************************************/
PROCEDURE BUILD_SERVICELOG_VW(p_part_number IN NUMBER) AS
ln_tmp NUMBER:= 0;
lv_columns_stmnt VARCHAR2(2000);
lv_select_stmnt VARCHAR2(2000);
lv_from_stmnt VARCHAR2(2000);
lv_vw_stmnt VARCHAR2(7000);
BEGIN
lv_columns_stmnt :=
'CREATE OR REPLACE VIEW ADR.CCN_SERVICE_LOG_LOAD_VW '||CHR(10)||
'( SERVICE_LOG_STAT_ID, PERSON_ID, FIRST_NAME, LAST_NAME, MID_NAME,'||CHR(10)||
'SUFFIX,DATE_OF_BIRTH, DATE_OF_BIRTH_TXT, DATE_OF_DEATH, BIRTH_SEX, ssn, edipi, MAILING_ADDRESS_H_ID,'||CHR(10)||
'EMAIL, VCELIGIBILITY_H_ID, HPHONE_NUM, CPHONE_NUM, TPHONE_NUM, VISN_GEO, RESI_ADDRESS_H_ID,'||CHR(10)||
'PREFERRED_FACILITY_H_ID, GEOCODE_STATION_H_ID, ADDR_RECORD_MODIFIED_DATE, VCELIGBTY_RECORD_MODIFIED_DATE,'||CHR(10)||
'SVL_RECORD_MODIFIED_DATE, VCE, PRIORITY_GROUP, PRIORITY_GROUP_EFFECT_DATE_TXT) AS';
--DBMS_OUTPUT.PUT(lv_columns_stmnt);
lv_select_stmnt := lv_select_stmnt ||CHR(10)||
'SELECT /*+ use_hash (per addr prf addrh prf sl) */ '||CHR(10)||
'(CASE WHEN sl.CCN_SERVICE_LOG_ID IS NULL THEN 0 '||CHR(10)||
' WHEN sl.CCN_SERVICE_LOG_ID IS NOT NULL THEN CCN_SERVICE_LOG_ID END) service_log_stat_id ,';
lv_select_stmnt := lv_select_stmnt ||CHR(10)||
'per.person_id, per.first_name, per.last_name, per.middle_name, per.suffix,'||CHR(10)||
'per.date_of_birth, per.date_of_birth_txt, per.death_date_txt, per.gender_code, per.ssn,per.edipi,addrh.mailing_address_h_id,'||CHR(10)||
'em.email_address, per.VCELIGIBILITY_H_ID, ph.hphone_num, ph.cphone_num, NVL(NVL(ph.tphone_num, addr.address_phone_number), tp.address_phone_number),'||CHR(10)||
'geot.visn_geo, addrh.resi_address_h_id, prf.preferred_facility_h_id, geot.GEOCODE_STATION_H_ID,'||CHR(10)||
'addr.addr_record_modified_date, per.vceligbty_record_modified_date, sl.max_record_modified_date svl_record_modified_date,'||CHR(10)||
'per.VCE, per.PRIORITY_GROUP, per.PRIORITY_GROUP_EFFECT_DATE_TXT ';
lv_from_stmnt:=
' FROM ADR.CCN_PERSON_SELECTED_STG PARTITION ('||PERSONSEL_TAB(p_part_number)||') per'||CHR(10)||
' INNER JOIN adr.CCN_ADDRESS_STG PARTITION ('||CCNADDRESS_TAB(p_part_number)||') addr'||CHR(10)||
' ON per.person_id = addr.person_id '||CHR(10)||
' LEFT OUTER JOIN ADR.CCN_ADDRESS_H_STG addrh'||CHR(10)||
' ON addrh.person_id = per.person_id '||CHR(10)||
' LEFT OUTER JOIN ADR.CCN_PREFERED_FACILITY_H_STG prf ON prf.person_id = per.person_id '||CHR(10)||
' LEFT OUTER JOIN ADR.CCN_EMAIL_STG em ON em.person_id = per.person_id '||CHR(10)||
' LEFT OUTER JOIN ADR.CCN_GEOCODE_TRANSMIT_STG geot ON geot.person_id = per.person_id '||CHR(10)||
' LEFT OUTER JOIN ADR.CCN_PHONE_STG ph ON ph.person_id = per.person_id '||CHR(10)||
' LEFT OUTER JOIN ADR.CCN_TPHONE_STG tp ON tp.person_id = per.person_id'||CHR(10)||
' LEFT OUTER JOIN ADR.CCN_SERVLOG_STG sl ON sl.person_id ||'''' = per.person_id ';
lv_vw_stmnt := lv_columns_stmnt ||CHR(10)||
lv_select_stmnt ||CHR(10)||
lv_from_stmnt;
EXECUTE IMMEDIATE (lv_vw_stmnt);
EXCEPTION
WHEN OTHERS THEN
-- gc_job_sucess := 0;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'SERVICELOG_VW: ORA ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => lv_select_stmnt ||CHR(10)|| lv_from_stmnt,
PD_date1 => SYSDATE
);
RAISE;
END BUILD_SERVICELOG_VW;
/********************************************************************************************
*
* NAME
* LOAD_CCNSERVLOG_STG is to load data into staging table LOAD_CCNSERVLOG_STG
*
* DESCRIPTION
* This temp talbe is later to check any changes for rows already existed in the ccn_service_log
* in the ccn_service_log. If yes, then they will be updated
*
***************************************************************************/
PROCEDURE LOAD_CCNSERVLOG_STG AS
VN_total_count NUMBER := 0;
VN_count_tmp NUMBER := 0;
VN_EXCEPTION_CNT NUMBER := 0;
CURSOR CCNServiceLog_C IS
SELECT person_id, ccn_service_log_id, record_modified_date max_record_modified_date
FROM (
SELECT person_id, ccn_service_log_id, record_modified_date,
row_number() over (partition by person_id order by record_modified_date desc,ccn_service_log_id desc) rn
FROM CCN_SERVICE_LOG
WHERE TRANSMISSION_TYPE_ID = 1
AND TRANSMISSION_STTYPE_ID = 2000590
)
WHERE rn = 1;
TYPE CCNServiceLog_TABLE IS TABLE OF CCNServiceLog_C%ROWTYPE;
T_CCNServiceLog_TAB CCNServiceLog_TABLE;
dml_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(dml_errors, -24381);
BEGIN
gc_sp_name := 'LOAD_CCNSERVLOG_STG';
VN_start_time := TO_CHAR(SYSDATE,'MM/DD/YY HH24:MI:SS');
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name ||' @'||VN_start_time);
VC_log_step := 'BULK '||gc_sp_name||' BEGINS';
adr.sf_timer.start_timer;
-- ========================================================
--
-- Begin Bulk Collect Fetch
--
-- ========================================================
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Started.',
PC_job_log_message => 'Started '||VN_start_time,
pc_text1 => 'PARMS: - BULK LIMIT: '|| gc_bulk_limit||' - DOP: '||gc_parallel_dop,
PD_date1 => SYSDATE
);
VN_total_count := 0;
gc_interation := 0;
DBMS_APPLICATION_INFO.set_action(gc_sp_name);
OPEN CCNServiceLog_C;
LOOP
FETCH CCNServiceLog_C BULK COLLECT INTO T_CCNServiceLog_TAB LIMIT gc_bulk_limit;
EXIT WHEN T_CCNServiceLog_TAB.COUNT = 0;
gc_interation := gc_interation + 1;
VC_log_step := 'ITER# '||gc_interation;
DBMS_APPLICATION_INFO.set_action(gc_sp_name||' - It#: '||gc_interation);
FORALL indx IN T_CCNServiceLog_TAB.FIRST.. T_CCNServiceLog_TAB.LAST SAVE EXCEPTIONS
INSERT /*+ APPEND */ INTO ADR.CCN_SERVLOG_STG
(person_id, ccn_service_log_id, max_record_modified_date)
VALUES (T_CCNServiceLog_TAB(indx).person_id,
T_CCNServiceLog_TAB(indx).ccn_service_log_id,
T_CCNServiceLog_TAB(indx).max_record_modified_date);
VN_total_count := VN_total_count + SQL%ROWCOUNT;
COMMIT;
END LOOP;
CLOSE CCNServiceLog_C;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Completed.',
PC_job_log_message => 'Rows Added: '||VN_total_count||adr.sf_timer.elapsed_message ('-'),
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
EXCEPTION
WHEN dml_errors THEN
VN_EXCEPTION_CNT := SQL%BULK_EXCEPTIONS.COUNT;
FOR I IN 1 .. VN_EXCEPTION_CNT LOOP
VC_error_msg :=
'ERROR BULK: ' || VC_log_step||' ERROR# '||I||' INTER# '||SQL%BULK_EXCEPTIONS(I).ERROR_INDEX ||
' PERSON ID: ' || T_CCNServiceLog_TAB(I).person_id ||
' Error Msg: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXCEPTION - ROWS FAILED: '||VN_EXCEPTION_CNT,
PC_job_log_message => VC_error_msg,
PC_text1 => 'Rows Added: '||VN_total_count|| ' - Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'Added: '||VN_total_count|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOAD_CCNSERVLOG_STG;
/***************************************************************************
*
* NAME
* LOAD_VCELIGIBILITY_STG is to load data into staging table VCELIGIBILITY_STG
*
* DESCRIPTION
* Set session parallel
*
***************************************************************************/
PROCEDURE LOAD_VCELIGIBILITY_STG AS
VN_total_count NUMBER := 0;
VN_count_tmp NUMBER := 0;
VN_EXCEPTION_CNT NUMBER := 0;
CURSOR VCEligibility_C IS
WITH VCESTATS AS
(SELECT t1.person_id, t1.VCESTATUSTYPE_ID, t1.VCELIGIBILITY_ID, record_modified_date, t2.code
FROM vceligibility t1, vcestatustype t2
WHERE t1.VCESTATUSTYPE_ID = t2.VCESTATUSTYPE_ID
AND t2.VCESTATUSTYPE_ID != 2000579),
VCE_AGGREGATE AS
(SELECT person_id
,LISTAGG(code||'|'||to_char(record_modified_date, 'YYYYMMDD'), ',')
WITHIN GROUP (ORDER BY person_id) vce
FROM VCESTATS v
GROUP BY person_id)
SELECT va.person_id, v.vcestatustype_id, v.vceligibility_id, va.vce
FROM VCESTATS v, VCE_AGGREGATE va
WHERE v.person_id = va.person_id;
TYPE t_VCEligibility_table IS TABLE OF VCEligibility_C%ROWTYPE;
t_VCEligibility_tab t_VCEligibility_table;
dml_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(dml_errors, -24381);
BEGIN
gc_sp_name := 'LOAD_VCELIGIBILITY_STG';
VN_start_time := TO_CHAR(SYSDATE,'MM/DD/YY HH24:MI:SS');
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name ||' @'||VN_start_time);
VC_log_step := 'BULK '||gc_sp_name||' BEGINS';
adr.sf_timer.start_timer;
-- ========================================================
--
-- Begin Bulk Collect Fetch
--
-- ========================================================
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Started.',
PC_job_log_message => 'Started '||VN_start_time,
pc_text1 => 'PARMS: - BULK LIMIT: '|| gc_bulk_limit||' - DOP: '||gc_parallel_dop,
PD_date1 => SYSDATE
);
VN_total_count := 0;
gc_interation := 0;
DBMS_APPLICATION_INFO.set_action(gc_sp_name);
OPEN VCEligibility_C;
LOOP
FETCH VCEligibility_C BULK COLLECT INTO t_VCEligibility_tab LIMIT gc_bulk_limit;
EXIT WHEN t_VCEligibility_tab.COUNT = 0;
gc_interation := gc_interation + 1;
VC_log_step := 'Iter# '||gc_interation;
DBMS_APPLICATION_INFO.set_action(gc_sp_name||' - It#: '||gc_interation);
FORALL indx IN t_VCEligibility_tab.FIRST.. t_VCEligibility_tab.LAST SAVE EXCEPTIONS
INSERT /*+ APPEND */ INTO ADR.VCELIGIBILITY_STG
(person_id,
VCESTATUSTYPE_ID,
VCELIGIBILITY_ID,
VCE)
VALUES (t_VCEligibility_tab(indx).person_id,
t_VCEligibility_tab(indx).VCESTATUSTYPE_ID,
t_VCEligibility_tab(indx).VCELIGIBILITY_ID,
t_VCEligibility_tab(indx).VCE);
VN_total_count := VN_total_count + SQL%ROWCOUNT;
COMMIT;
END LOOP;
CLOSE VCEligibility_C;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Completed.',
PC_job_log_message => 'Rows Added: '||VN_total_count||adr.sf_timer.elapsed_message ('-'),
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
EXCEPTION
WHEN dml_errors THEN
VN_EXCEPTION_CNT := SQL%BULK_EXCEPTIONS.COUNT;
FOR I IN 1 .. VN_EXCEPTION_CNT LOOP
VC_error_msg :=
'ERROR BULK: ' || VC_log_step||' ERROR# '||I||' INTER# '||SQL%BULK_EXCEPTIONS(I).ERROR_INDEX ||
' PERSON ID: ' || t_VCEligibility_tab(I).person_id ||':'||t_VCEligibility_tab(I).VCELIGIBILITY_ID||
' Error Msg: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXCEPTION - ROWS FAILED: '||VN_EXCEPTION_CNT,
PC_job_log_message => VC_error_msg,
PC_text1 => 'Rows Added: '||VN_total_count|| ' - Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
RAISE;
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'Added: '||VN_total_count|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
RAISE;
END LOAD_VCELIGIBILITY_STG;
/***************************************************************************
*
* NAME
* LOAD_VCELIGIBILITY_H_STG is to load data into staging table VCELIGIBILITY_STG
*
* DESCRIPTION
* This staging table is to l
*
***************************************************************************/
PROCEDURE LOAD_VCELIGIBILITY_H_STG AS
VN_total_count NUMBER := 0;
VN_count_tmp NUMBER := 0;
VN_EXCEPTION_CNT NUMBER := 0;
CURSOR VCEligibility_H_C IS
SELECT PERSON_ID,
VCELIGIBILITY_H_ID,
VCE,
RECORD_MODIFIED_DATE
FROM (SELECT /*+ parallel(vc, 2) parallel(vch, 2) use_hash (vc vch) */
vc.PERSON_ID,
vc.VCE,
vch.VCELIGIBILITY_H_ID,
vch.VCESTATUSTYPE_ID,
vch.RECORD_MODIFIED_DATE,
MAX (vch.VCELIGIBILITY_H_ID) OVER (PARTITION BY vch.PERSON_ID) MAX_VCELIGIBILITY_H_ID
FROM ADR.VCELIGIBILITY_STG vc
INNER JOIN VCELIGIBILITY_H vch
ON vch.VCELIGIBILITY_ID = VC.VCELIGIBILITY_ID
AND VC.VCESTATUSTYPE_ID = vch.VCESTATUSTYPE_ID
AND VC.VCESTATUSTYPE_ID != 2000579)
WHERE VCELIGIBILITY_H_ID = MAX_VCELIGIBILITY_H_ID;
TYPE t_VCEligibility_H_table IS TABLE OF VCEligibility_H_C%ROWTYPE;
t_VCEligibility_H_tab t_VCEligibility_H_table;
dml_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(dml_errors, -24381);
BEGIN
gc_sp_name := 'LOAD_VCELIGIBILITY_H_STG';
VN_start_time := TO_CHAR(SYSDATE,'MM/DD/YY HH24:MI:SS');
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name ||' @'||VN_start_time);
VC_log_step := 'BULK '||gc_sp_name||' BEGINS';
adr.sf_timer.start_timer;
-- ========================================================
--
-- Begin Bulk Collect Fetch
--
-- ========================================================
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Started.',
PC_job_log_message => 'Started '||VN_start_time,
pc_text1 => 'PARMS: - BULK LIMIT: '|| gc_bulk_limit||' - DOP: '||gc_parallel_dop,
PD_date1 => SYSDATE
);
VN_total_count := 0;
gc_interation := 0;
DBMS_APPLICATION_INFO.set_action(gc_sp_name);
OPEN VCEligibility_H_C;
LOOP
FETCH VCEligibility_H_C BULK COLLECT INTO t_VCEligibility_H_tab LIMIT gc_bulk_limit;
EXIT WHEN t_VCEligibility_H_tab.COUNT = 0;
gc_interation := gc_interation + 1;
VC_log_step := 'Iter# '||gc_interation;
DBMS_APPLICATION_INFO.set_action(gc_sp_name||' - It#: '||gc_interation);
FORALL indx IN t_VCEligibility_H_tab.FIRST.. t_VCEligibility_H_tab.LAST SAVE EXCEPTIONS
INSERT /*+ APPEND */ INTO ADR.CCN_VCELIGIBILITY_H_STG
(person_id,
VCELIGIBILITY_H_ID,
VCE,
RECORD_MODIFIED_DATE)
VALUES (t_VCEligibility_H_tab(indx).person_id,
t_VCEligibility_H_tab(indx).VCELIGIBILITY_H_ID,
t_VCEligibility_H_tab(indx).VCE,
t_VCEligibility_H_tab(indx).RECORD_MODIFIED_DATE);
VN_total_count := VN_total_count + SQL%ROWCOUNT;
COMMIT;
END LOOP;
CLOSE VCEligibility_H_C;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Completed.',
PC_job_log_message => 'Rows Added: '||VN_total_count||adr.sf_timer.elapsed_message ('-'),
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
EXCEPTION
WHEN dml_errors THEN
VN_EXCEPTION_CNT := SQL%BULK_EXCEPTIONS.COUNT;
FOR I IN 1 .. VN_EXCEPTION_CNT LOOP
VC_error_msg :=
'ERROR BULK: ' || VC_log_step||' ERROR# '||I||' INTER# '||SQL%BULK_EXCEPTIONS(I).ERROR_INDEX ||
' PERSON ID: ' || t_VCEligibility_H_tab(I).person_id ||':'||t_VCEligibility_H_tab(I).VCELIGIBILITY_H_ID||
' Error Msg: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXCEPTION - ROWS FAILED: '||VN_EXCEPTION_CNT,
PC_job_log_message => VC_error_msg,
PC_text1 => 'Rows Added: '||VN_total_count|| ' - Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'Added: '||VN_total_count|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOAD_VCELIGIBILITY_H_STG;
/***************************************************************************
*
* NAME
* LOAD_TPHONE_STG is to load data into staging table ENRDETERM_STG
*
* DESCRIPTION
* This SP is to retrieve temp phone from phone table. If NULL then
* get address.address_phone_number
*
***************************************************************************/
PROCEDURE LOAD_TPHONE_STG IS
VN_total_count NUMBER := 0;
VN_count_tmp NUMBER := 0;
VN_EXCEPTION_CNT NUMBER := 0;
CURSOR TempPhone_C IS
WITH MISSING_TPHONE AS
((SELECT person_id FROM CCN_PERSON_SELECTED_STG
MINUS
SELECT person_id FROM CCN_PHONE_STG WHERE tphone_num IS NOT NULL)
MINUS
SELECT person_id FROM CCN_ADDRESS_STG
WHERE STD_ADDRESSTYPE_ID = CC_ADDRESSTYPE_ID_TEMP --1449005
)
SELECT /*+ leading(t a) use_hash (a t) */ a.person_id, a.address_phone_number
FROM address a, MISSING_TPHONE t
WHERE a.person_id = t.person_id
AND a.STD_ADDRESSTYPE_ID = CC_ADDRESSTYPE_ID_TEMP --1449005
AND a.address_phone_number IS NOT NULL;
TYPE t_tempphone_table IS TABLE OF TempPhone_C%ROWTYPE;
t_tempphone_tab t_tempphone_table;
dml_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(dml_errors, -24381);
BEGIN
gc_sp_name := 'LOAD_TEMP_PHONE_STG';
VN_start_time := TO_CHAR(SYSDATE,'MM/DD/YY HH24:MI:SS');
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name ||' @'||VN_start_time);
VC_log_step := 'BULK '||gc_sp_name||' BEGINS';
adr.sf_timer.start_timer;
-- ========================================================
--
-- Begin Bulk Collect Fetch
--
-- ========================================================
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Started.',
PC_job_log_message => 'Started '||VN_start_time,
pc_text1 => 'PARMS: - BULK LIMIT: '|| gc_bulk_limit||' - DOP: '||gc_parallel_dop,
PD_date1 => SYSDATE
);
VN_total_count := 0;
gc_interation := 0;
DBMS_APPLICATION_INFO.set_action(gc_sp_name);
OPEN TempPhone_C;
LOOP
FETCH TempPhone_C BULK COLLECT INTO t_tempphone_tab LIMIT gc_bulk_limit;
EXIT WHEN t_tempphone_tab.COUNT = 0;
gc_interation := gc_interation + 1;
VC_log_step := 'Iter# '||gc_interation;
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name||' - It#: '||gc_interation);
FORALL indx IN t_tempphone_tab.FIRST.. t_tempphone_tab.LAST SAVE EXCEPTIONS
INSERT /*+ APPEND */ INTO ADR.CCN_TPHONE_STG
(person_id,
ADDRESS_PHONE_NUMBER)
VALUES (t_tempphone_tab(indx).person_id,
t_tempphone_tab(indx).ADDRESS_PHONE_NUMBER);
VN_total_count := VN_total_count + SQL%ROWCOUNT;
COMMIT;
END LOOP;
CLOSE TempPhone_C;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Completed.',
PC_job_log_message => 'Rows Added: '||VN_total_count||adr.sf_timer.elapsed_message ('-'),
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
EXCEPTION
WHEN dml_errors THEN
VN_EXCEPTION_CNT := SQL%BULK_EXCEPTIONS.COUNT;
FOR I IN 1 .. VN_EXCEPTION_CNT LOOP
VC_error_msg :=
'ERROR BULK: ' || VC_log_step||' ERROR# '||I||' INTER# '||SQL%BULK_EXCEPTIONS(I).ERROR_INDEX ||
' PERSON ID: ' || t_tempphone_tab(I).person_id ||':'||t_tempphone_tab(I).ADDRESS_PHONE_NUMBER||
' Error Msg: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXCEPTION - ROWS FAILED: '||VN_EXCEPTION_CNT,
PC_job_log_message => VC_error_msg,
PC_text1 => 'Rows Added: '||VN_total_count|| ' - Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'Added: '||VN_total_count|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOAD_TPHONE_STG;
/***************************************************************************
*
* NAME
* LOAD_ENROLLMENTDTERM_STG is to load data into staging table ENRDETERM_STG
*
* DESCRIPTION
* Set session parallel
*
***************************************************************************/
PROCEDURE LOAD_ENROLLMENTDTERM_STG IS
VN_total_count NUMBER := 0;
VN_count_tmp NUMBER := 0;
VN_EXCEPTION_CNT NUMBER := 0;
CURSOR EnrollmentDeterm_C IS
SELECT /*+ use_hash(en el x2) */ en.PERSON_ID,
x2.code VCESTATUSTYPE_ID,
TO_CHAR(NVL(en.change_effective_date, en.record_modified_date), 'YYYYMMDD') priority_group_effect_date_txt
FROM enrollment_determination en,
eligibility_determination el,
eeusr.priority_group_type x2
WHERE el.enrollment_determination_id = en.enrollment_determination_id
AND el.primary_secondary_or_other = 'P'
AND en.PRIORITY_GROUP_TYPE_ID = x2.id (+);
TYPE t_EnrollmentDeterm_table IS TABLE OF EnrollmentDeterm_C%ROWTYPE;
t_EnrollmentDeterm_tab t_EnrollmentDeterm_table;
dml_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(dml_errors, -24381);
BEGIN
gc_sp_name := 'LOAD_ENROLLMENTDTERM_STG';
VN_start_time := TO_CHAR(SYSDATE,'MM/DD/YY HH24:MI:SS');
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name ||' @'||VN_start_time);
VC_log_step := 'BULK '||gc_sp_name||' BEGINS';
adr.sf_timer.start_timer;
-- ========================================================
--
-- Begin Bulk Collect Fetch
--
-- ========================================================
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Started.',
PC_job_log_message => 'Started '||VN_start_time,
pc_text1 => 'PARMS: - BULK LIMIT: '|| gc_bulk_limit||' - DOP: '||gc_parallel_dop,
PD_date1 => SYSDATE
);
VN_total_count := 0;
gc_interation := 0;
DBMS_APPLICATION_INFO.set_action(gc_sp_name);
OPEN EnrollmentDeterm_C;
LOOP
FETCH EnrollmentDeterm_C BULK COLLECT INTO t_EnrollmentDeterm_tab LIMIT gc_bulk_limit;
EXIT WHEN t_EnrollmentDeterm_tab.COUNT = 0;
gc_interation := gc_interation + 1;
VC_log_step := 'Iter# '||gc_interation;
DBMS_APPLICATION_INFO.set_action(gc_sp_name||' - It#: '||gc_interation);
FORALL indx IN t_EnrollmentDeterm_tab.FIRST.. t_EnrollmentDeterm_tab.LAST SAVE EXCEPTIONS
INSERT /*+ APPEND */ INTO ADR.ENRDETERM_STG
(person_id,
PRIORITY_GROUP,
priority_group_effect_date_txt)
VALUES (t_EnrollmentDeterm_tab(indx).person_id,
t_EnrollmentDeterm_tab(indx).VCESTATUSTYPE_ID,
t_EnrollmentDeterm_tab(indx).priority_group_effect_date_txt);
VN_total_count := VN_total_count + SQL%ROWCOUNT;
COMMIT;
END LOOP;
CLOSE EnrollmentDeterm_C;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Completed.',
PC_job_log_message => 'Rows Added: '||VN_total_count||adr.sf_timer.elapsed_message ('-'),
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
EXCEPTION
WHEN dml_errors THEN
VN_EXCEPTION_CNT := SQL%BULK_EXCEPTIONS.COUNT;
FOR I IN 1 .. VN_EXCEPTION_CNT LOOP
VC_error_msg :=
'ERROR BULK: ' || VC_log_step||' ERROR# '||I||' INTER# '||SQL%BULK_EXCEPTIONS(I).ERROR_INDEX ||
' PERSON ID: ' || t_EnrollmentDeterm_tab(I).person_id ||':'||t_EnrollmentDeterm_tab(I).VCESTATUSTYPE_ID||
' Error Msg: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXCEPTION - ROWS FAILED: '||VN_EXCEPTION_CNT,
PC_job_log_message => VC_error_msg,
PC_text1 => 'Rows Added: '||VN_total_count|| ' - Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'Added: '||VN_total_count|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
RAISE;
END LOAD_ENROLLMENTDTERM_STG;
/***************************************************************************
*
* NAME
* PRECHECK_PROC
*
* DESCRIPTION
* PRECHECK_procedure is to determine wether or not the job should be run
*
***************************************************************************/
PROCEDURE PRECHECK_PROC(p_ready_run_status OUT BOOLEAN) IS
l_run_status VARCHAR2(20) := 'ABORT';
contractor_tmp_count NUMBER := 0;
BEGIN
gc_sp_name := 'PRECHECK_PROC';
SELECT
CASE
WHEN contractor_id_processed < contractor_id_not_processed THEN 'READY'
WHEN contractor_id_processed >= contractor_id_not_processed THEN
CASE NVL(status,'STARTED')
WHEN 'STARTED' THEN 'READY'
WHEN 'COMPLETED' THEN 'ABORT'
END
END AS process_status, contractor_id_not_processed
INTO l_run_status, gc_contractor_id
FROM
(SELECT max_contractor_id contractor_id_processed, status
FROM ADR.CCN_DATALOAD_LOG_STG s2
WHERE s2.record_created_date = (
SELECT MAX(record_created_date)
FROM ADR.CCN_DATALOAD_LOG_STG)) s,
(SELECT MAX(ccn_contractor_id) contractor_id_not_processed FROM ccn_contractor);
IF l_run_status = 'READY' THEN
SELECT count(1) INTO contractor_tmp_count
FROM CCN_DATALOAD_LOG_STG
WHERE max_contractor_id = gc_contractor_id;
p_ready_run_status := TRUE;
IF contractor_tmp_count = 0 THEN
gc_service_log_seq_id := ADR.CCN_DATALOAD_LOG_STG_S.NEXTVAL;
INSERT INTO ADR.CCN_DATALOAD_LOG_STG
(CCN_DATALOAD_LOG_STG_ID, MAX_CONTRACTOR_ID, RECORD_CREATED_DATE, STATUS)
VALUES (gc_service_log_seq_id, gc_contractor_id, SYSDATE, 'STARTED');
COMMIT;
END IF;
INITIALIZE_COLLECTION;
ELSE
p_ready_run_status := FALSE;
END IF;
EXCEPTION
WHEN OTHERS THEN
p_ready_run_status := FALSE;
RAISE_APPLICATION_ERROR (-20148, 'FAILED - ' ||gc_sp_name||': '|| SUBSTR(SQLCODE,1,60)||' - ' ||SUBSTR(SQLERRM,1,254));
END PRECHECK_PROC;
/***************************************************************************
*
* NAME
* POSTCHECK_PROC
*
* DESCRIPTION
* POSTCHECK_PROC is to log statistics
*
***************************************************************************/
PROCEDURE POSTCHECK_PROC IS
p_job_status VARCHAR2(20);
BEGIN
p_job_status := 'COMPLETED';
UPDATE ADR.CCN_DATALOAD_LOG_STG s
SET status = p_job_status,
rowcount_person = ccn_stage_rowcount_rec.rowcount_person,
rowcount_addr = ccn_stage_rowcount_rec.rowcount_addr,
rowcount_addr_h = ccn_stage_rowcount_rec.rowcount_addr_h,
rowcount_prefac = ccn_stage_rowcount_rec.rowcount_prefac ,
rowcount_email = ccn_stage_rowcount_rec.rowcount_email,
rowcount_phone = ccn_stage_rowcount_rec.rowcount_phone ,
rowcount_geotrans = ccn_stage_rowcount_rec.rowcount_geotrans,
ELAPSE_TIME = VN_elapsed_time
WHERE CCN_DATALOAD_LOG_STG_ID= (SELECT CCN_DATALOAD_LOG_STG_ID
FROM CCN_DATALOAD_LOG_STG
WHERE CCN_DATALOAD_LOG_STG_ID =
(SELECT MAX(CCN_DATALOAD_LOG_STG_ID)
FROM CCN_DATALOAD_LOG_STG
WHERE max_contractor_id =gc_contractor_id)
);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR (-20139, 'POSTCHECK_PROC: FAILED - '|| SUBSTR(SQLCODE,1,60)||' - ' ||SUBSTR(SQLERRM,1,254));
END POSTCHECK_PROC;
/***************************************************************************
*
* NAME
* LOAD_SELECTED_PERSON_STG
*
* DESCRIPTION
* This staging is to load data from person, person_traits, vceligiblity
*
***************************************************************************/
PROCEDURE LOAD_SELECTED_PERSON_STG IS
VN_total_count NUMBER := 0;
VN_count_tmp NUMBER := 0;
VN_total_part_count NUMBER := 0;
VN_grand_total NUMBER := 0;
VN_EXCEPTION_CNT NUMBER := 0;
CURSOR SelectedPerson_C IS
SELECT PERSON_ID,
DATE_OF_BIRTH,
DATE_OF_BIRTH_TXT,
DEATH_DATE_TXT,
FIRST_NAME,
MIDDLE_NAME ,
LAST_NAME,
SUFFIX,
GENDER_CODE,
ssn, edipi,
VCELIGIBILITY_H_ID,
VCELIGBTY_RECORD_MODIFIED_DATE,
VCE ,
PRIORITY_GROUP,
PRIORITY_GROUP_EFFECT_DATE_TXT
FROM ADR.CCN_PERSON_VCE_VW;
TYPE t_SelectedPerson_table IS TABLE OF SelectedPerson_C%ROWTYPE;
t_SelectedPerson_tab t_SelectedPerson_table;
dml_errors EXCEPTION;
no_row_found_vw EXCEPTION;
PRAGMA EXCEPTION_INIT(dml_errors, -24381);
BEGIN
LOAD_VCELIGIBILITY_STG;
LOAD_VCELIGIBILITY_H_STG;
LOAD_ENROLLMENTDTERM_STG;
gc_sp_name := 'LOAD_SELECTED_PERSON_STG';
VN_start_time := TO_CHAR(SYSDATE,'MM/DD/YY HH24:MI:SS');
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name ||' @'||VN_start_time);
VC_log_step := 'BULK '||gc_sp_name||' BEGINS';
adr.sf_timer.start_timer;
-- ========================================================
--
-- Begin Bulk Collect Fetch
--
-- ========================================================
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Started.',
PC_job_log_message => 'Started '||VN_start_time,
pc_text1 => 'PARMS: - BULK LIMIT: '|| gc_bulk_limit||' - DOP: '||gc_parallel_dop,
PD_date1 => SYSDATE
);
--
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name);
FOR I IN 1..10 -- 10 PARTITIONS: process is looping a partition by a partition
LOOP
VN_total_count := 0;
gc_interation := 0;
VN_total_part_count := 0;
-- Build a dynamic view based on a each partition
BUILD_PERSON_VCE_VW(I);
OPEN SelectedPerson_C;
LOOP
FETCH SelectedPerson_C BULK COLLECT INTO t_SelectedPerson_tab LIMIT gc_bulk_limit;
EXIT WHEN t_SelectedPerson_tab.COUNT = 0;
gc_interation := gc_interation + 1;
VC_log_step := 'Part# '||I||' - ITER# '||gc_interation;
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name||' Part# '||I||'-ITER#: '||gc_interation);
FORALL indx IN t_SelectedPerson_tab.FIRST.. t_SelectedPerson_tab.LAST SAVE EXCEPTIONS
INSERT /*+ APPEND */ INTO ADR.CCN_PERSON_SELECTED_STG
(person_id,
date_of_birth,
date_of_birth_txt,
death_date_txt,
first_name,
middle_name,
last_name,
suffix,
gender_code,
ssn, edipi,
VCELIGIBILITY_H_ID,
vceligbty_record_modified_date,
vce,
priority_group,
priority_group_effect_date_txt)
VALUES (t_SelectedPerson_tab(indx).person_id,
t_SelectedPerson_tab(indx).date_of_birth,
t_SelectedPerson_tab(indx).date_of_birth_txt,
t_SelectedPerson_tab(indx).death_date_txt,
t_SelectedPerson_tab(indx).first_name,
t_SelectedPerson_tab(indx).middle_name,
t_SelectedPerson_tab(indx).last_name,
t_SelectedPerson_tab(indx).suffix,
t_SelectedPerson_tab(indx).gender_code,
t_SelectedPerson_tab(indx).ssn,
t_SelectedPerson_tab(indx).edipi,
t_SelectedPerson_tab(indx).VCELIGIBILITY_H_ID,
t_SelectedPerson_tab(indx).vceligbty_record_modified_date,
t_SelectedPerson_tab(indx).vce ,
t_SelectedPerson_tab(indx).priority_group ,
t_SelectedPerson_tab(indx).priority_group_effect_date_txt);
VN_total_count := VN_total_count + SQL%ROWCOUNT;
COMMIT;
-- Initialize array
FOR indx IN 1.. t_SelectedPerson_tab.COUNT LOOP
t_SelectedPerson_tab(indx).person_id := NULL;
t_SelectedPerson_tab(indx).date_of_birth := NULL;
t_SelectedPerson_tab(indx).date_of_birth_txt:= NULL;
t_SelectedPerson_tab(indx).death_date_txt := NULL;
t_SelectedPerson_tab(indx).first_name := NULL;
t_SelectedPerson_tab(indx).middle_name := NULL;
t_SelectedPerson_tab(indx).last_name := NULL;
t_SelectedPerson_tab(indx).suffix := NULL;
t_SelectedPerson_tab(indx).gender_code := NULL;
t_SelectedPerson_tab(indx).ssn := NULL;
t_SelectedPerson_tab(indx).edipi := NULL;
t_SelectedPerson_tab(indx).VCELIGIBILITY_H_ID := NULL;
t_SelectedPerson_tab(indx).vceligbty_record_modified_date := NULL;
t_SelectedPerson_tab(indx).vce := NULL;
t_SelectedPerson_tab(indx).priority_group := NULL;
t_SelectedPerson_tab(indx).priority_group_effect_date_txt:= NULL;
END LOOP;
END LOOP;
VN_total_part_count := VN_total_part_count + VN_total_count;
VN_grand_total := VN_grand_total + VN_total_part_count;
CLOSE SelectedPerson_C;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - PARTITION# '||I,
PC_job_log_message => 'Rows Added: '||VN_total_part_count||adr.sf_timer.elapsed_message ('-'),
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
ccn_stage_rowcount_rec.rowcount_person := VN_total_part_count;
-- If there is no record found from the main view then stop the job
IF VN_grand_total = 0 THEN
RAISE no_row_found_vw;
END IF;
SELECT COUNT(1) INTO VN_count_tmp
FROM all_indexes
WHERE index_name = 'CCN_PERSELSTG_PERSONID'
AND owner = 'ADR';
IF VN_count_tmp = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX ADR.CCN_PERSELSTG_PERSONID ON ADR.CCN_PERSON_SELECTED_STG (PERSON_ID) ' ||CHR(10)||
' TABLESPACE M_INDEX_01 ' ||CHR(10)||
' NOLOGGING ' ||CHR(10)||
' PARALLEL ( DEGREE 2 INSTANCES DEFAULT ) ';
END IF;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Completed.',
PC_job_log_message => 'Total Rows: '||VN_grand_total||adr.sf_timer.elapsed_message ('-'),
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
EXCEPTION
WHEN dml_errors THEN
VN_EXCEPTION_CNT := SQL%BULK_EXCEPTIONS.COUNT;
--gc_job_sucess := 0;
FOR I IN 1 .. VN_EXCEPTION_CNT LOOP
VC_error_msg :=
'ERROR BULK: ' || VC_log_step||' ERROR# '||I||' INTER# '||SQL%BULK_EXCEPTIONS(I).ERROR_INDEX ||
' PERSON ID: ' || t_SelectedPerson_tab(I).person_id ||':'||t_SelectedPerson_tab(I).date_of_birth||
' Error Msg: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXCEPTION - ROWS FAILED: '||VN_EXCEPTION_CNT,
PC_job_log_message => VC_error_msg,
PC_text1 => 'Rows Added: '||VN_grand_total|| ' - Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
RAISE;
WHEN no_row_found_vw THEN
lc_continue_proc := FALSE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'LOAD_SELECTED_PERSON_STG:NO ROW FOUND',
PC_job_log_message =>VC_log_step||' - '||SUBSTR(SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'NO ROW FOUND IN CCN_PERSON_VCE_VW '|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
WHEN OTHERS THEN
-- gc_job_sucess := 0;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'LOAD_SELECTED_PERSON_STG:ERROR EXCEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'Added: '||VN_grand_total|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
RAISE;
END LOAD_SELECTED_PERSON_STG;
/***************************************************************************
*
* NAME
* LOAD_ADDR_STG
*
* DESCRIPTION
* This procedure is to load address info into LOAD_ADDR_STG staging
*
***************************************************************************/
PROCEDURE LOAD_ADDR_STG IS
VN_total_count NUMBER := 0;
VN_EXCEPTION_CNT NUMBER:= 0;
CURSOR LoadAddressStage_C IS
SELECT addr2.PERSON_ID, addr2.STD_ADDRESSTYPE_ID, addr2.address_id MAILING_ADDRESS_ID,
addr2.record_modified_date ADDR_RECORD_MODIFIED_DATE,
addr2.address_phone_number
FROM (
SELECT ROW_NUMBER () OVER (PARTITION BY addr.person_id ORDER BY (
CASE addr.STD_ADDRESSTYPE_ID
WHEN 1449005 THEN 3
WHEN 1449012 THEN 2
WHEN 1807412 THEN 1
ELSE NULL
END) DESC, addr.address_id desc) RN,
addr.person_id, addr.address_id, addr.STD_ADDRESSTYPE_ID, addr.record_modified_date, addr.address_phone_number
FROM ADDRESS addr
INNER JOIN adr.CCN_PERSON_SELECTED_STG pss --SelectedPERSON per
ON addr.PERSON_ID = pss.PERSON_ID
WHERE ( ( ( LENGTH (TRIM(SUBSTR ( NVL(addr.ADDRESS_END_DATE_TXT,' '), 0, 8))) = 8
OR addr.ADDRESS_END_DATE_TXT IS NULL)
AND ( LENGTH (TRIM(SUBSTR ( NVL(addr.ADDRESS_START_DATE_TXT,' '), 0, 8))) = 8
OR addr.ADDRESS_START_DATE_TXT IS NULL)
AND ( addr.STD_ADDRESSTYPE_ID = CC_ADDRESSTYPE_ID_TEMP
AND ( addr.ADDRESS_START_DATE_TXT IS NULL
OR
TRUNC(SYSDATE) >= TO_DATE ( SUBSTR ( NVL(addr.ADDRESS_START_DATE_TXT,'19000101'), 0, 8), 'YYYYMMDD')
)
AND ( (addr.ADDRESS_END_DATE_TXT IS NULL)
OR (TRUNC(SYSDATE) <= TO_DATE ( SUBSTR ( NVL(addr.ADDRESS_END_DATE_TXT,TO_CHAR(SYSDATE + 1,'YYYYMMDD')), 0, 8), 'YYYYMMDD')))))
--
OR addr.STD_ADDRESSTYPE_ID IN (CC_ADDRESSTYPE_ID_RESI, CC_ADDRESSTYPE_ID_PERM))
) addr2
WHERE rn =1;
TYPE t_CCNAdress_table IS TABLE OF LoadAddressStage_C%ROWTYPE;
t_CCNAdress_tab t_CCNAdress_table;
dml_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(dml_errors, -24381);
BEGIN
gc_sp_name := 'LOAD_ADDR_STG';
VN_start_time := TO_CHAR(SYSDATE,'MM/DD/YY HH24:MI:SS');
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name ||' @'||VN_start_time);
VC_log_step := 'BULK '||gc_sp_name||' BEGINS';
adr.sf_timer.start_timer;
-- ========================================================
--
-- Begin Bulk Collect Fetch
--
-- ========================================================
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Started.',
PC_job_log_message => 'Started '||VN_start_time,
pc_text1 => 'PARMS: - BULK LIMIT: '|| gc_bulk_limit||' - DOP: '||gc_parallel_dop,
PD_date1 => SYSDATE
);
VN_total_count := 0;
gc_interation := 0;
DBMS_APPLICATION_INFO.set_action('LOAD_ADDR');
OPEN LoadAddressStage_C;
LOOP
FETCH LoadAddressStage_C BULK COLLECT INTO t_CCNAdress_tab LIMIT gc_bulk_limit;
EXIT WHEN t_CCNAdress_tab.COUNT = 0;
gc_interation := gc_interation + 1;
VC_log_step := 'Iter# '||gc_interation;
DBMS_APPLICATION_INFO.set_action('LOAD_ADDR: It#: '||gc_interation);
FORALL indx IN t_CCNAdress_tab.FIRST.. t_CCNAdress_tab.LAST SAVE EXCEPTIONS
INSERT /*+ APPEND */ INTO ADR.CCN_ADDRESS_STG
(PERSON_ID,
STD_ADDRESSTYPE_ID,
MAILING_ADDRESS_ID,
ADDR_RECORD_MODIFIED_DATE,
ADDRESS_PHONE_NUMBER)
VALUES (t_CCNAdress_tab(indx).PERSON_ID,
t_CCNAdress_tab(indx).STD_ADDRESSTYPE_ID,
t_CCNAdress_tab(indx).MAILING_ADDRESS_ID,
t_CCNAdress_tab(indx).ADDR_RECORD_MODIFIED_DATE,
t_CCNAdress_tab(indx).ADDRESS_PHONE_NUMBER);
VN_total_count := VN_total_count + SQL%ROWCOUNT;
COMMIT;
END LOOP;
CLOSE LoadAddressStage_C;
ccn_stage_rowcount_rec.rowcount_addr := VN_total_count;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Completed.',
PC_job_log_message => 'Rows Added: '||VN_total_count||adr.sf_timer.elapsed_message (' '),
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
EXCEPTION
WHEN dml_errors THEN
VN_EXCEPTION_CNT := SQL%BULK_EXCEPTIONS.COUNT;
FOR I IN 1 .. VN_EXCEPTION_CNT LOOP
VC_error_msg :=
'ERROR BULK: ' || VC_log_step||' ERROR# '||I||' INTER# '||SQL%BULK_EXCEPTIONS(I).ERROR_INDEX ||
' PERSON ID: ' || t_CCNAdress_tab(I).person_id ||':'||t_CCNAdress_tab(I).STD_ADDRESSTYPE_ID||
' Error Msg: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXCEPTION - ROWS FAILED: '||VN_EXCEPTION_CNT,
PC_job_log_message => VC_error_msg,
PC_text1 => 'Rows Added: '||VN_total_count|| ' - Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'Added: '||VN_total_count|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOAD_ADDR_STG;
/***************************************************************************
*
* NAME
* LOAD_ADDR_H_STG
*
* DESCRIPTION
* This procedure is to load address info into LOAD_ADDR_H_STG staging
*
***************************************************************************/
PROCEDURE LOAD_ADDR_H_STG IS
-- VN_rowcnt_fetched NUMBER := 0;
VN_total_count NUMBER := 0;
VN_EXCEPTION_CNT NUMBER:= 0;
CURSOR LoadAddress_H_Stage_C IS
SELECT *
FROM (
WITH addr_stg AS
(SELECT person_id, mailing_address_id--, std_addresstype_id
FROM ADR.CCN_ADDRESS_STG),
AH1 AS
( SELECT AH.PERSON_ID, ah.STD_ADDRESSTYPE_ID, AH.ADDRESS_H_ID, ah.ADDRESS_ID
FROM ADDRESS_H AH
where ah.STD_ADDRESSTYPE_ID IN (CC_ADDRESSTYPE_ID_RESI, CC_ADDRESSTYPE_ID_TEMP, CC_ADDRESSTYPE_ID_PERM) --1807412=RES, 1449005=TEMPORARY, 1449012=PERMANENT
-- AND ah.person_id in (171,185,186,2229,5444)
),
AH_RESI AS
( SELECT *
FROM (
SELECT ah1.person_id, ah1.STD_ADDRESSTYPE_ID, AH1.ADDRESS_H_ID, ah1.ADDRESS_ID ,
MAX(AH1.ADDRESS_H_ID) OVER (PARTITION BY AH1.PERSON_ID, AH1.STD_ADDRESSTYPE_ID) MAX_ADDRESS_H_ID
FROM AH1--, addr_stg s
WHERE ah1.STD_ADDRESSTYPE_ID = CC_ADDRESSTYPE_ID_RESI
) WHERE ADDRESS_H_ID = MAX_ADDRESS_H_ID
),
AH_TMP_PERM AS
( SELECT *
FROM ( SELECT AH1.PERSON_ID, ah1.STD_ADDRESSTYPE_ID, AH1.ADDRESS_H_ID, ah1.ADDRESS_ID ,
MAX(AH1.ADDRESS_H_ID) OVER (PARTITION BY AH1.PERSON_ID, AH1.STD_ADDRESSTYPE_ID, AH1.ADDRESS_ID) MAX_ADDRESS_H_ID
FROM AH1
WHERE STD_ADDRESSTYPE_ID IN (CC_ADDRESSTYPE_ID_TEMP, CC_ADDRESSTYPE_ID_PERM)
) WHERE ADDRESS_H_ID = MAX_ADDRESS_H_ID
)
SELECT /*+ use_hash (p r a) */ p.person_id, p.address_h_id mailing_address_h_id, r.address_h_id resi_address_h_id
FROM addr_stg a, AH_TMP_PERM p, AH_RESI r
WHERE a.person_id = p.person_id
AND a.mailing_address_id = p.address_id
AND p.person_id = r.person_id(+)
);
TYPE t_CCNAdressH_table IS TABLE OF LoadAddress_H_Stage_C%ROWTYPE;
t_CCNAdressH_tab t_CCNAdressH_table;
dml_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(dml_errors, -24381);
BEGIN
gc_sp_name := 'LOAD_ADDR_H_STG';
VN_start_time := TO_CHAR(SYSDATE,'MM/DD/YY HH24:MI:SS');
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name ||' @'||VN_start_time);
VC_log_step := 'BULK '||gc_sp_name||' BEGINS';
adr.sf_timer.start_timer;
-- ========================================================
--
-- Begin Bulk Collect Fetch
--
-- ========================================================
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Started.',
PC_job_log_message => 'Time: '||VN_start_time,
pc_text1 => 'PARMS: - BULK LIMIT: '|| gc_bulk_limit||' - DOP: '||gc_parallel_dop,
PD_date1 => SYSDATE
);
VN_total_count := 0;
gc_interation := 0;
DBMS_APPLICATION_INFO.set_action('LOAD_ADDR_H');
OPEN LoadAddress_H_Stage_C;
LOOP
FETCH LoadAddress_H_Stage_C BULK COLLECT INTO t_CCNAdressH_tab LIMIT gc_bulk_limit;
EXIT WHEN t_CCNAdressH_tab.COUNT = 0;
gc_interation := gc_interation + 1;
VC_log_step := 'Iter# '||gc_interation;
DBMS_APPLICATION_INFO.set_action('LOAD_ADDR_H: It#: '||gc_interation);
FORALL indx IN t_CCNAdressH_tab.FIRST.. t_CCNAdressH_tab.LAST SAVE EXCEPTIONS
INSERT /*+ APPEND */ INTO ADR.CCN_ADDRESS_H_STG
(PERSON_ID,
mailing_address_h_id,
RESI_ADDRESS_H_ID)
VALUES (t_CCNAdressH_tab(indx).PERSON_ID,
t_CCNAdressH_tab(indx).mailing_address_h_id,
t_CCNAdressH_tab(indx).resi_address_h_id);
VN_total_count := VN_total_count + SQL%ROWCOUNT;
COMMIT;
END LOOP;
CLOSE LoadAddress_H_Stage_C;
ccn_stage_rowcount_rec.rowcount_addr_h := VN_total_count;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Completed.',
PC_job_log_message => 'Rows Added: '||VN_total_count||adr.sf_timer.elapsed_message (' '),
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
EXCEPTION
WHEN dml_errors THEN
VN_EXCEPTION_CNT := SQL%BULK_EXCEPTIONS.COUNT;
FOR I IN 1 .. VN_EXCEPTION_CNT LOOP
VC_error_msg :=
'ERROR BULK: ' || VC_log_step||' ERROR# '||I||' INTER# '||SQL%BULK_EXCEPTIONS(I).ERROR_INDEX ||
' PERSON ID: ' || t_CCNAdressH_tab(I).person_id ||':'||t_CCNAdressH_tab(I).resi_address_h_id||
' Error Msg: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXCEPTION - ROWS FAILED: '||VN_EXCEPTION_CNT,
PC_job_log_message => VC_error_msg,
PC_text1 => 'Rows Added: '||VN_total_count|| ' - Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
RAISE;
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'Added: '||VN_total_count|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
RAISE;
END LOAD_ADDR_H_STG;
/***************************************************************************
*
* NAME
* LOAD_PREFERED_FACILITY_H_STG
*
* DESCRIPTION
* This procedure is to load address info into LOAD_PREFERED_FACILITY_H_STG staging
*
***************************************************************************/
PROCEDURE LOAD_PREFERED_FACILITY_H_STG IS
VN_total_count NUMBER := 0;
VN_EXCEPTION_CNT NUMBER:= 0;
CURSOR LoadreferredFac_H_Stage_C IS
SELECT pref.person_id, pref.preferred_facility_h_id
FROM (SELECT pf.person_id, pf.preferred_facility_h_id,
ROW_NUMBER () OVER ( PARTITION BY pf.person_id
ORDER BY DECODE (UPPER (src.code), 'PA', 1, 'E', 2, 'V', 3, 'PI', 4, 5),
pf.assignment_date DESC) pfno
FROM adr.preferred_facility_h pf
INNER JOIN adr.PREFERRED_FACILITY pfmain ON pfmain.PERSON_ID = pf.PERSON_ID
AND pfmain.PREFERRED_FACILITY_ID = pf.PREFERRED_FACILITY_ID
INNER JOIN ADR.CCN_PERSON_SELECTED_STG per ON pf.person_id = per.person_id
LEFT JOIN sdsadm.std_preffacsrcdesig src ON src.id = pf.std_preferred_facility_src_id
) pref
WHERE pref.pfno = 1;
TYPE t_CCNPreferredFacH_table IS TABLE OF LoadreferredFac_H_Stage_C%ROWTYPE;
t_CCNPreferredFacH_tab t_CCNPreferredFacH_table;
dml_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(dml_errors, -24381);
BEGIN
gc_sp_name := 'LOAD_PREFERED_FACILITY_H_STG';
VN_start_time := TO_CHAR(SYSDATE,'MM/DD/YY HH24:MI:SS');
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name ||' @'||VN_start_time);
VC_log_step := 'BULK '||gc_sp_name||' BEGINS';
adr.sf_timer.start_timer;
-- ========================================================
--
-- Begin Bulk Collect Fetch
--
-- ========================================================
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Started.',
PC_job_log_message => 'Started '||VN_start_time,
pc_text1 => 'PARMS: - BULK LIMIT: '|| gc_bulk_limit||' - DOP: '||gc_parallel_dop,
PD_date1 => SYSDATE
);
VN_total_count := 0;
gc_interation := 0;
DBMS_APPLICATION_INFO.set_action('LOAD_PREFERED_FACILITY');
OPEN LoadreferredFac_H_Stage_C;
LOOP
FETCH LoadreferredFac_H_Stage_C BULK COLLECT INTO t_CCNPreferredFacH_tab LIMIT gc_bulk_limit;
EXIT WHEN t_CCNPreferredFacH_tab.COUNT = 0;
gc_interation := gc_interation + 1;
VC_log_step := 'Iter# '||gc_interation;
DBMS_APPLICATION_INFO.set_action('LOAD_PREFERED_FACILITY: It#: '||gc_interation);
FORALL indx IN t_CCNPreferredFacH_tab.FIRST.. t_CCNPreferredFacH_tab.LAST SAVE EXCEPTIONS
INSERT /*+ APPEND */ INTO ADR.CCN_PREFERED_FACILITY_H_STG
(PERSON_ID,
PREFERRED_FACILITY_H_ID)
VALUES (t_CCNPreferredFacH_tab(indx).PERSON_ID,
t_CCNPreferredFacH_tab(indx).PREFERRED_FACILITY_H_ID);
VN_total_count := VN_total_count + SQL%ROWCOUNT;
COMMIT;
END LOOP;
CLOSE LoadreferredFac_H_Stage_C;
ccn_stage_rowcount_rec.rowcount_prefac := VN_total_count;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Completed.',
PC_job_log_message => 'Rows Added: '||VN_total_count||adr.sf_timer.elapsed_message (' '),
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
EXCEPTION
WHEN dml_errors THEN
VN_EXCEPTION_CNT := SQL%BULK_EXCEPTIONS.COUNT;
FOR I IN 1 .. VN_EXCEPTION_CNT LOOP
VC_error_msg :=
'ERROR BULK: ' || VC_log_step||' ERROR# '||I||' INTER# '||SQL%BULK_EXCEPTIONS(I).ERROR_INDEX ||
' PERSON ID: ' || t_CCNPreferredFacH_tab(I).person_id ||':'||t_CCNPreferredFacH_tab(I).PREFERRED_FACILITY_H_ID||
' Error Msg: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXCEPTION - ROWS FAILED: '||VN_EXCEPTION_CNT,
PC_job_log_message => VC_error_msg,
PC_text1 => 'Rows Added: '||VN_total_count|| ' - Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
RAISE;
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'Added: '||VN_total_count|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
RAISE;
END LOAD_PREFERED_FACILITY_H_STG;
/***************************************************************************
*
* NAME
* LOAD_EMAIL_STG
*
* DESCRIPTION
* This procedure is to load Email Address info into LOAD_EMAIL_STG staging
*
***************************************************************************/
PROCEDURE LOAD_EMAIL_STG IS
-- VN_rowcnt_fetched NUMBER := 0;
VN_total_count NUMBER := 0;
VN_EXCEPTION_CNT NUMBER:= 0;
CURSOR LoadCCNPEmail_Stage_C IS
SELECT person_id, email_address
FROM (
SELECT em.person_id, email_address, em.email_id,
MAX (em.email_id) OVER (PARTITION BY em.person_id) max_email_id
FROM EMAIL em
INNER JOIN ADR.CCN_PERSON_SELECTED_STG per
ON per.person_id = em.person_id
AND em.email_type_id = 1510061) -- personal email type
WHERE email_id = max_email_id;
TYPE t_CCNEmail_table IS TABLE OF LoadCCNPEmail_Stage_C%ROWTYPE;
t_CCNEmail_tab t_CCNEmail_table;
dml_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(dml_errors, -24381);
BEGIN
gc_sp_name := 'LOAD_EMAIL_STG';
VN_start_time := TO_CHAR(SYSDATE,'MM/DD/YY HH24:MI:SS');
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name ||' @'||VN_start_time);
VC_log_step := 'BULK '||gc_sp_name||' BEGINS';
adr.sf_timer.start_timer;
-- ========================================================
--
-- Begin Bulk Collect Fetch
--
-- ========================================================
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Started.',
PC_job_log_message => 'Started '||VN_start_time,
pc_text1 => 'PARMS: - BULK LIMIT: '|| gc_bulk_limit||' - DOP: '||gc_parallel_dop,
PD_date1 => SYSDATE
);
VN_total_count := 0;
gc_interation := 0;
DBMS_APPLICATION_INFO.set_action('LOAD_EMAIL');
OPEN LoadCCNPEmail_Stage_C;
LOOP
FETCH LoadCCNPEmail_Stage_C BULK COLLECT INTO t_CCNEmail_tab LIMIT gc_bulk_limit;
EXIT WHEN t_CCNEmail_tab.COUNT = 0;
gc_interation := gc_interation + 1;
VC_log_step := 'Iter# '||gc_interation;
DBMS_APPLICATION_INFO.set_action('LOAD_EMAIL: It#: '||gc_interation);
FORALL indx IN t_CCNEmail_tab.FIRST.. t_CCNEmail_tab.LAST SAVE EXCEPTIONS
INSERT /*+ APPEND */ INTO ADR.CCN_EMAIL_STG
(person_id,
email_address)
VALUES (t_CCNEmail_tab(indx).person_id,
t_CCNEmail_tab(indx).email_address);
VN_total_count := VN_total_count + SQL%ROWCOUNT;
COMMIT;
END LOOP;
CLOSE LoadCCNPEmail_Stage_C;
ccn_stage_rowcount_rec.rowcount_email := VN_total_count;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Completed.',
PC_job_log_message =>'Rows Added: '||VN_total_count||adr.sf_timer.elapsed_message (' '),
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
EXCEPTION
WHEN dml_errors THEN
VN_EXCEPTION_CNT := SQL%BULK_EXCEPTIONS.COUNT;
FOR I IN 1 .. VN_EXCEPTION_CNT LOOP
VC_error_msg :=
'ERROR BULK: ' || VC_log_step||' ERROR# '||I||' INTER# '||SQL%BULK_EXCEPTIONS(I).ERROR_INDEX ||
' PERSON ID: ' || t_CCNEmail_tab(I).person_id ||
' Error Msg: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXCEPTION - ROWS FAILED: '||VN_EXCEPTION_CNT,
PC_job_log_message => VC_error_msg,
PC_text1 => 'Rows Added: '||VN_total_count|| ' - Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
RAISE;
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'Added: '||VN_total_count|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
RAISE;
END LOAD_EMAIL_STG;
/***************************************************************************
*
* NAME
* LOAD_CCN_GEOCODE_TRANSMIT_STG
*
* DESCRIPTION
* This procedure is to load Geocode Transmitt info into LOAD_CCN_GEOCODE_TRANSMIT_STG staging
*
***************************************************************************/
PROCEDURE LOAD_GEOCODE_TRANSMIT_STG IS
-- VN_rowcnt_fetched NUMBER := 0;
VN_total_count NUMBER := 0;
VN_EXCEPTION_CNT NUMBER:= 0;
CURSOR LoadCCNGeocTrans_Stage_C IS
SELECT person_id, visn_geo, geocode_station_h_id
FROM (
WITH INST AS(
SELECT ins.id, visn.name AS visnname
FROM std_institution ins
LEFT OUTER JOIN std_institution visn ON ins.visn_id = visn.id),
GEOCODE_STA_H AS(
SELECT geocode_station_id, geocode_station_h_id, std_institution_id
FROM (
SELECT gh.geocode_station_id, gh.geocode_station_h_id, gh.STD_INSTITUTION_ID,
MAX(gh.geocode_station_h_id) OVER (PARTITION BY gh.geocode_station_id) MAX_GEOCODE_STATION_H_ID
FROM GEOCODE_STATION_H gh
INNER JOIN GEOCODE_STATION g ON g.geocode_station_id = gh.geocode_station_id
AND g.RECORD_MODIFIED_DATE = gh.RECORD_MODIFIED_DATE
)
WHERE geocode_station_h_id = MAX_GEOCODE_STATION_H_ID)
SELECT tran.PERSON_ID, gh.geocode_station_h_id, SUBSTR (inst.visnname, 6) VISN_GEO
FROM GEOCODE_TRANSMIT tran
INNER JOIN ADR.CCN_PERSON_SELECTED_STG p ON p.PERSON_ID = tran.PERSON_ID
LEFT OUTER JOIN GEOCODE_STA_H gh ON tran.GEOCODE_STATION_ID = gh.GEOCODE_STATION_ID
LEFT OUTER JOIN INST inst ON gh.STD_INSTITUTION_ID = inst.id
);
TYPE t_CCNGeoCodeTrans_table IS TABLE OF LoadCCNGeocTrans_Stage_C%ROWTYPE;
t_CCNGeoCodeTrans_tab t_CCNGeoCodeTrans_table;
dml_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(dml_errors, -24381);
BEGIN
gc_sp_name := 'LOAD_CCN_GEOCODE_TRANSMIT_STG';
VN_start_time := TO_CHAR(SYSDATE,'MM/DD/YY HH24:MI:SS');
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name ||' @'||VN_start_time);
VC_log_step := 'BULK '||gc_sp_name||' BEGINS';
adr.sf_timer.start_timer;
-- ========================================================
--
-- Begin Bulk Collect Fetch
--
-- ========================================================
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Started.',
PC_job_log_message => 'Started '||VN_start_time,
pc_text1 => 'PARMS: - BULK LIMIT: '|| gc_bulk_limit||' - DOP: '||gc_parallel_dop,
PD_date1 => SYSDATE
);
VN_total_count := 0;
gc_interation := 0;
DBMS_APPLICATION_INFO.set_action('LOAD_GEOCODE_TRANSMIT');
OPEN LoadCCNGeocTrans_Stage_C;
LOOP
FETCH LoadCCNGeocTrans_Stage_C BULK COLLECT INTO t_CCNGeoCodeTrans_tab LIMIT gc_bulk_limit;
EXIT WHEN t_CCNGeoCodeTrans_tab.COUNT = 0;
gc_interation := gc_interation + 1;
VC_log_step := 'Iter# '||gc_interation;
DBMS_APPLICATION_INFO.set_action('LOAD_GEOCODE_TRANSMIT: It#: '||gc_interation);
FORALL indx IN t_CCNGeoCodeTrans_tab.FIRST.. t_CCNGeoCodeTrans_tab.LAST SAVE EXCEPTIONS
INSERT /*+ APPEND */ INTO ADR.CCN_GEOCODE_TRANSMIT_STG
(person_id,
visn_geo,
geocode_station_h_id)
VALUES (t_CCNGeoCodeTrans_tab(indx).person_id,
t_CCNGeoCodeTrans_tab(indx).visn_geo,
t_CCNGeoCodeTrans_tab(indx).geocode_station_h_id);
VN_total_count := VN_total_count + SQL%ROWCOUNT;
COMMIT;
END LOOP;
CLOSE LoadCCNGeocTrans_Stage_C;
ccn_stage_rowcount_rec.rowcount_geotrans := VN_total_count;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Completed.',
PC_job_log_message => 'Rows Added: '||VN_total_count||adr.sf_timer.elapsed_message (' '),
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
EXCEPTION
WHEN dml_errors THEN
VN_EXCEPTION_CNT := SQL%BULK_EXCEPTIONS.COUNT;
FOR I IN 1 .. VN_EXCEPTION_CNT LOOP
VC_error_msg :=
'ERROR BULK: ' || VC_log_step||' ERROR# '||I||' INTER# '||SQL%BULK_EXCEPTIONS(I).ERROR_INDEX ||
' PERSON ID: ' || t_CCNGeoCodeTrans_tab(I).person_id ||':'||t_CCNGeoCodeTrans_tab(I).geocode_station_h_id||
' Error Msg: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXCEPTION - ROWS FAILED: '||VN_EXCEPTION_CNT,
PC_job_log_message => VC_error_msg,
PC_text1 => 'Rows Added: '||VN_total_count|| ' - Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
RAISE;
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'Added: '||VN_total_count|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
RAISE;
END LOAD_GEOCODE_TRANSMIT_STG;
/***************************************************************************
*
* NAME
* LOAD_PHONE_STG
*
* DESCRIPTION
* This procedure is to load LOAD_PHONE_STG
*
***************************************************************************/
PROCEDURE LOAD_PHONE_STG IS
VN_total_count NUMBER := 0;
VN_EXCEPTION_CNT NUMBER ;
CURSOR LoadCCNVPhone_Stage_C IS
WITH PHONE_ALL AS
( SELECT -- PHONE_HOME
person_id, phone_id, phone_type_id, phone_number
FROM PHONE
WHERE phone_type_id IN (1504841, 1504844, 1621417)), -- PHONE HOME, MOBILE, TEMP
PHONE_HOME AS
(SELECT *
FROM
( SELECT person_id, phone_id, phone_type_id, phone_number phone_home,
MAX (phone_id) OVER (PARTITION BY person_id, phone_type_id) max_phone_id
FROM PHONE_ALL
WHERE phone_type_id = 1504841)
WHERE phone_id = max_phone_id),
PHONE_MOBILE AS--PHONE_MOBILE
(SELECT *
FROM
(SELECT person_id, phone_id, phone_type_id, phone_number phone_cell,
MAX (phone_id) OVER (PARTITION BY person_id, phone_type_id) max_phone_id
FROM PHONE_ALL
WHERE phone_type_id = 1504844)
WHERE phone_id = max_phone_id
),
PHONE_TMP AS
(SELECT *
FROM
(SELECT --PHONE_TEMP
person_id, phone_id, phone_type_id, phone_number phone_tmp ,
MAX (phone_id) OVER (PARTITION BY person_id, phone_type_id) max_phone_id
FROM PHONE_ALL
WHERE phone_type_id = 1621417) --PHONE_TEMP
WHERE phone_id = max_phone_id
)
SELECT p.person_id, phh.phone_home HPHONE_NUM, phm.phone_cell CPHONE_NUM, pht.phone_tmp TPHONE_NUM
FROM ADR.CCN_PERSON_SELECTED_STG p, PHONE_HOME phh, PHONE_MOBILE phm, PHONE_TMP pht
WHERE p.PERSON_ID = phh.PERSON_ID(+)
AND p.PERSON_ID = phm.PERSON_ID(+)
AND p.PERSON_ID = pht.PERSON_ID(+);
TYPE t_CCNPhone_table IS TABLE OF LoadCCNVPhone_Stage_C%ROWTYPE;
t_CCNPhone_tab t_CCNPhone_table;
dml_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(dml_errors, -24381);
BEGIN
gc_sp_name := 'LOAD_PHONE_STG';
VN_start_time := TO_CHAR(SYSDATE,'MM/DD/YY HH24:MI:SS');
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name ||' @'||VN_start_time);
VC_log_step := 'BULK '||gc_sp_name||' BEGINS';
adr.sf_timer.start_timer;
-- ========================================================
--
-- Begin Bulk Collect Fetch
--
-- ========================================================
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Started.',
PC_job_log_message =>'Started '||VN_start_time,
pc_text1 => 'PARMS: - BULK LIMIT: '|| gc_bulk_limit||' - DOP: '||gc_parallel_dop,
PD_date1 => SYSDATE
);
VN_total_count := 0;
gc_interation := 0;
DBMS_APPLICATION_INFO.set_action(gc_sp_name);
OPEN LoadCCNVPhone_Stage_C;
LOOP
FETCH LoadCCNVPhone_Stage_C BULK COLLECT INTO t_CCNPhone_tab LIMIT gc_bulk_limit;
EXIT WHEN t_CCNPhone_tab.COUNT = 0;
gc_interation := gc_interation + 1;
VC_log_step := 'Iter# '||gc_interation;
DBMS_APPLICATION_INFO.set_action(gc_sp_name||' It#: '||gc_interation);
FORALL indx IN t_CCNPhone_tab.FIRST.. t_CCNPhone_tab.LAST SAVE EXCEPTIONS
INSERT /*+ APPEND */ INTO ADR.CCN_PHONE_STG
(person_id,
hphone_num,
cphone_num,
tphone_num)
VALUES (t_CCNPhone_tab(indx).person_id,
t_CCNPhone_tab(indx).hphone_num,
t_CCNPhone_tab(indx).cphone_num,
t_CCNPhone_tab(indx).tphone_num);
VN_total_count := VN_total_count + SQL%ROWCOUNT;
COMMIT;
END LOOP;
CLOSE LoadCCNVPhone_Stage_C;
ccn_stage_rowcount_rec.rowcount_phone := VN_total_count;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Completed.',
PC_job_log_message => 'Rows Added: '||VN_total_count||adr.sf_timer.elapsed_message (' '),
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
EXCEPTION
WHEN dml_errors THEN
VN_EXCEPTION_CNT := SQL%BULK_EXCEPTIONS.COUNT;
FOR I IN 1 .. VN_EXCEPTION_CNT LOOP
VC_error_msg :=
'ERROR BULK: ' || VC_log_step||' ERROR# '||I||' INTER# '||SQL%BULK_EXCEPTIONS(I).ERROR_INDEX ||
' PERSON ID: ' || t_CCNPhone_tab(I).person_id ||':'||t_CCNPhone_tab(I).hphone_num||
' Error Msg: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXCEPTION - ROWS FAILED: '||VN_EXCEPTION_CNT,
PC_job_log_message => VC_error_msg,
PC_text1 => 'Rows Added: '||VN_total_count|| ' - Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
RAISE;
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'Added: '||VN_total_count|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
RAISE;
END LOAD_PHONE_STG;
/***************************************************************************
*
* NAME
* CCNSERVICELOG_PTF
*
* DESCRIPTION
* This function is to display using PIPE ROW each record of the table
*
***************************************************************************/
FUNCTION CCNSERVICELOG_PTF (dataset_refcur CCNSERVLOG_SRC_REFCUR)
RETURN CCNSERVICELOG_TGT_TAB
PARALLEL_ENABLE(PARTITION dataset_refcur BY HASH (PERSON_ID)) PIPELINED
IS
lc_sp_name VARCHAR2(120);
l_row_as_object CCNSERVICELOG_TGT_REC;
l_dataset_tgt CCNSERVICELOG_TGT_TAB;
ln_count NUMBER;
VN_EXCEPTION_CNT NUMBER:= 0;
BEGIN
lc_sp_name := 'CCNSERVICELOG_PTF';
VN_start_time := TO_CHAR(SYSDATE,'MM/DD/YY HH24:MI:SS');
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name ||' @'||VN_start_time);
VC_log_step := 'BULK-PIPE ROW '||gc_sp_name||' BEGINS';
LOOP
FETCH dataset_refcur BULK COLLECT INTO l_dataset_tgt LIMIT gc_bulk_limit;
ln_count := l_dataset_tgt.COUNT ;
EXIT WHEN l_dataset_tgt.COUNT = 0;
VC_log_step := 'ITER# '||gc_interation;
DBMS_APPLICATION_INFO.set_action('CCNSERVICELOG_PTF: ITER#: '||gc_interation);
FOR idx IN 1 .. l_dataset_tgt.COUNT LOOP
l_row_as_object.SERVICE_LOG_STAT_ID := l_dataset_tgt(idx).SERVICE_LOG_STAT_ID;
l_row_as_object.PERSON_ID := l_dataset_tgt(idx).PERSON_ID;
l_row_as_object.FIRST_NAME := l_dataset_tgt(idx).FIRST_NAME;
l_row_as_object.LAST_NAME := l_dataset_tgt(idx).LAST_NAME;
l_row_as_object.MID_NAME := l_dataset_tgt(idx).MID_NAME;
l_row_as_object.SUFFIX := l_dataset_tgt(idx).SUFFIX;
l_row_as_object.DATE_OF_BIRTH := l_dataset_tgt(idx).DATE_OF_BIRTH;
l_row_as_object.DATE_OF_BIRTH_TXT := l_dataset_tgt(idx).DATE_OF_BIRTH_TXT;
l_row_as_object.DATE_OF_DEATH := l_dataset_tgt(idx).DATE_OF_DEATH;
l_row_as_object.BIRTH_SEX := l_dataset_tgt(idx).BIRTH_SEX;
l_row_as_object.SSN := l_dataset_tgt(idx).SSN;
l_row_as_object.edipi := l_dataset_tgt(idx).edipi;
l_row_as_object.MAILING_ADDRESS_H_ID := l_dataset_tgt(idx).MAILING_ADDRESS_H_ID;
l_row_as_object.EMAIL := l_dataset_tgt(idx).EMAIL;
l_row_as_object.VCELIGIBILITY_H_ID := l_dataset_tgt(idx).VCELIGIBILITY_H_ID;
l_row_as_object.HPHONE_NUM := l_dataset_tgt(idx).HPHONE_NUM;
l_row_as_object.CPHONE_NUM := l_dataset_tgt(idx).CPHONE_NUM;
l_row_as_object.TPHONE_NUM := l_dataset_tgt(idx).TPHONE_NUM;
l_row_as_object.VISN_GEO := l_dataset_tgt(idx).VISN_GEO;
l_row_as_object.RESI_ADDRESS_H_ID := l_dataset_tgt(idx).RESI_ADDRESS_H_ID;
l_row_as_object.PREFERRED_FACILITY_H_ID := l_dataset_tgt(idx).PREFERRED_FACILITY_H_ID;
l_row_as_object.GEOCODE_STATION_H_ID := l_dataset_tgt(idx).GEOCODE_STATION_H_ID;
l_row_as_object.ADDR_RECORD_MODIFIED_DATE:= l_dataset_tgt(idx).ADDR_RECORD_MODIFIED_DATE;
l_row_as_object.VCELIGBTY_RECORD_MODIFIED_DATE := l_dataset_tgt(idx).VCELIGBTY_RECORD_MODIFIED_DATE;
l_row_as_object.SVL_RECORD_MODIFIED_DATE := l_dataset_tgt(idx).SVL_RECORD_MODIFIED_DATE;
l_row_as_object.VCE := l_dataset_tgt(idx).VCE;
l_row_as_object.PRIORITY_GROUP := l_dataset_tgt(idx).PRIORITY_GROUP;
l_row_as_object.PRIORITY_GROUP_EFFECT_DATE_TXT := l_dataset_tgt(idx).PRIORITY_GROUP_EFFECT_DATE_TXT;
PIPE ROW (l_row_as_object);
END LOOP;
END LOOP;
CLOSE dataset_refcur;
RETURN;
EXCEPTION
WHEN NO_DATA_NEEDED
THEN RETURN;
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'Added: '||ln_count|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
RAISE;
END CCNSERVICELOG_PTF;
/***************************************************************************
*
* NAME
* LOAD_SRV_LOG_DATA
*
* DESCRIPTION
* This procedure is to add data into CCN_SERVICE_LOG table when
* service_log_stat_id = 0
*
***************************************************************************/
PROCEDURE LOAD_SRV_LOG_DATA IS
VN_total_count NUMBER := 0;
VN_total_part_count NUMBER:= 0;
VN_EXCEPTION_CNT NUMBER := 0;
VN_grand_total NUMBER := 0;
-- ln_partition_number NUMBER:= 1;
CURSOR SRVLOG_ADDED_C IS
SELECT *
FROM TABLE (CCN_SRV_LOAD_PKG.CCNSERVICELOG_PTF(CURSOR(SELECT /*+ PARALLEL(v1, 4) */ * FROM ADR.CCN_SERVICE_LOG_LOAD_VW v1 )))
WHERE service_log_stat_id = 0; -- new rows will be added to the ccn_service_log table
TYPE t_servicelog_table is table of SRVLOG_ADDED_C%ROWTYPE;
t_servicelog_tab t_servicelog_table;
dml_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(dml_errors, -24381);
BEGIN
gc_sp_name := 'LOAD_SRV_LOG_DATA';
VC_log_step := 'BULK '||gc_sp_name||' BEGINS';
adr.sf_timer.start_timer;
-- ========================================================
--
-- Begin Bulk Collect Fetch
--
-- ========================================================
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Started.',
PC_job_log_message => 'Started '||VN_start_time,
pc_text1 => 'PARMS: - BULK LIMIT: '|| gc_bulk_limit||' - DOP: '||gc_parallel_dop,
PD_date1 => SYSDATE
);
VC_log_step := 'BULK '||gc_sp_name||' BEGINS';
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name);
FOR I IN 1..15 -- 15 PARTITIONS: process is looping a partition by a partition
LOOP
VN_total_count := 0;
gc_interation := 0;
VN_total_part_count := 0;
-- Build a dynamic view based on a each partition
BUILD_SERVICELOG_VW(I);
-- Process rows by a partition at a time
OPEN SRVLOG_ADDED_C;
LOOP
FETCH SRVLOG_ADDED_C BULK COLLECT INTO t_servicelog_tab LIMIT gc_bulk_limit;
EXIT WHEN t_servicelog_tab.count = 0;
gc_interation := gc_interation + 1;
VC_log_step := 'Part# '||I||' - ITER# '||gc_interation;
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name||' Part# '||I||'-ITER#: '||gc_interation);
FORALL idx IN t_servicelog_tab.FIRST.. t_servicelog_tab.LAST SAVE EXCEPTIONS
INSERT /*+ APPEND */ INTO CCN_SERVICE_LOG
(ccn_service_log_id,
person_id,
FIRST_NAME,
LAST_NAME,
MID_NAME,
SUFFIX,
DATE_OF_BIRTH_TXT,
DATE_OF_BIRTH,
DATE_OF_DEATH,
BIRTH_SEX,
ssn, edipi,
EMAIL,
HPHONE_NUM,
CPHONE_NUM,
TPHONE_NUM,
VISN_GEO,
VCELIGIBILITY_H_ID,
TRANSMISSION_DATE,
MAILING_ADDRESS_H_ID,
RESI_ADDRESS_H_ID,
PREFERRED_FACILITY_H_ID,
GEOCODE_STATION_H_ID,
TRANSMISSION_TYPE_ID,
TRANSMISSION_STTYPE_ID,
RECORD_CREATED_BY,
RECORD_CREATED_DATE,
RECORD_MODIFIED_BY,
RECORD_MODIFIED_DATE,
RECORD_MODIFIED_COUNT,
VCE,
PRIORITY_GROUP,
PRIORITY_GROUP_EFFECT_DATE_TXT)
VALUES (CCN_SERVICE_LOG_S.nextval,
t_servicelog_tab(idx).person_id,
t_servicelog_tab(idx).FIRST_NAME,
t_servicelog_tab(idx).LAST_NAME,
t_servicelog_tab(idx).MID_NAME,
t_servicelog_tab(idx).SUFFIX,
t_servicelog_tab(idx).DATE_OF_BIRTH_TXT,
t_servicelog_tab(idx).DATE_OF_BIRTH,
t_servicelog_tab(idx).DATE_OF_DEATH,
t_servicelog_tab(idx).BIRTH_SEX,
t_servicelog_tab(idx).ssn,
t_servicelog_tab(idx).edipi,
t_servicelog_tab(idx).EMAIL,
t_servicelog_tab(idx).HPHONE_NUM,
t_servicelog_tab(idx).CPHONE_NUM,
t_servicelog_tab(idx).TPHONE_NUM,
TO_NUMBER(t_servicelog_tab(idx).VISN_GEO),
t_servicelog_tab(idx).VCELIGIBILITY_H_ID,
SYSDATE,
t_servicelog_tab(idx).MAILING_ADDRESS_H_ID,
t_servicelog_tab(idx).RESI_ADDRESS_H_ID,
t_servicelog_tab(idx).PREFERRED_FACILITY_H_ID,
t_servicelog_tab(idx).GEOCODE_STATION_H_ID,
1,
2000590,
gc_record_create_by,
SYSDATE,
gc_record_create_by,
SYSDATE,
0,
t_servicelog_tab(idx).VCE,
t_servicelog_tab(idx).PRIORITY_GROUP,
t_servicelog_tab(idx).PRIORITY_GROUP_EFFECT_DATE_TXT);
VN_total_count := VN_total_count + SQL%ROWCOUNT;
COMMIT;
END LOOP;
VN_total_part_count := VN_total_part_count + VN_total_count;
VN_grand_total := VN_grand_total + VN_total_part_count;
-- Initialize array
FOR IDX IN 1.. t_servicelog_tab.COUNT LOOP
t_servicelog_tab(idx).person_id := NULL;
t_servicelog_tab(idx).FIRST_NAME := NULL;
t_servicelog_tab(idx).LAST_NAME := NULL;
t_servicelog_tab(idx).MID_NAME := NULL;
t_servicelog_tab(idx).SUFFIX := NULL;
t_servicelog_tab(idx).DATE_OF_BIRTH_TXT := NULL;
t_servicelog_tab(idx).DATE_OF_BIRTH := NULL;
t_servicelog_tab(idx).DATE_OF_DEATH := NULL;
t_servicelog_tab(idx).BIRTH_SEX := NULL;
t_servicelog_tab(idx).ssn := NULL;
t_servicelog_tab(idx).edipi := NULL;
t_servicelog_tab(idx).EMAIL := NULL;
t_servicelog_tab(idx).HPHONE_NUM := NULL;
t_servicelog_tab(idx).CPHONE_NUM := NULL;
t_servicelog_tab(idx).TPHONE_NUM := NULL;
t_servicelog_tab(idx).VISN_GEO := NULL;
t_servicelog_tab(idx).VCELIGIBILITY_H_ID := NULL;
t_servicelog_tab(idx).MAILING_ADDRESS_H_ID := NULL;
t_servicelog_tab(idx).RESI_ADDRESS_H_ID := NULL;
t_servicelog_tab(idx).PREFERRED_FACILITY_H_ID := NULL;
t_servicelog_tab(idx).GEOCODE_STATION_H_ID := NULL;
t_servicelog_tab(idx).VCE := NULL;
t_servicelog_tab(idx).PRIORITY_GROUP := NULL;
t_servicelog_tab(idx).PRIORITY_GROUP_EFFECT_DATE_TXT:= NULL;
END LOOP;
CLOSE SRVLOG_ADDED_C;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => '*INFORMATION - '||PERSONSEL_TAB(I)||' Completed.',
PC_job_log_message => 'PARTITION: '||PERSONSEL_TAB(I)||' - Rows Added: '||VN_total_part_count||adr.sf_timer.elapsed_message (' '),
pc_text1 => 'Total ITER#: '||gc_interation||' - Elapsed: '|| adr.sf_timer.elapsed_time,
PD_date1 => SYSDATE
);
END LOOP;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Completed.',
PC_job_log_message => 'Total Rows: '||VN_grand_total||adr.sf_timer.elapsed_message (' '),
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
EXCEPTION
WHEN dml_errors THEN
VN_EXCEPTION_CNT := SQL%BULK_EXCEPTIONS.COUNT;
--gc_job_sucess := 0;
FOR I IN 1 .. VN_EXCEPTION_CNT LOOP
VC_error_msg :=
'ERROR BULK: ' || VC_log_step||' ERROR# '||I||' INTER# '||SQL%BULK_EXCEPTIONS(I).ERROR_INDEX ||
' PERSON ID: ' || t_servicelog_tab(I).person_id ||':'||t_servicelog_tab(I).VCELIGIBILITY_H_ID||
' Error Msg: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXCEPTION - ROWS FAILED: '||VN_EXCEPTION_CNT,
PC_job_log_message => VC_error_msg,
PC_text1 => 'Rows Added: '||VN_grand_total|| ' - Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
RAISE;
WHEN OTHERS THEN
-- gc_job_sucess := 0;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'Added: '||VN_grand_total|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
RAISE;
END LOAD_SRV_LOG_DATA;
/***************************************************************************
*
* NAME
* UPDATE_SRV_LOG_DATA
*
* DESCRIPTION
* This procedure is to update CCN_SERVICE_LOG table when
* service_log_stat_id = 1
*
***************************************************************************/
PROCEDURE UPDATE_SRV_LOG_DATA IS
VN_total_count NUMBER := 0;
VN_total_part_count NUMBER := 0;
VN_EXCEPTION_CNT NUMBER := 0;
VN_grand_total NUMBER := 0;
CURSOR SRVLOG_UPDATED_C IS
SELECT *
FROM TABLE (CCN_SRV_LOAD_PKG.CCNSERVICELOG_PTF(CURSOR(SELECT /*+ PARALLEL(v1, 4) */ * FROM ADR.CCN_SERVICE_LOG_LOAD_VW v1 )))
WHERE service_log_stat_id > 0; -- existing rows will be UPDATED to the ccn_service_log table
TYPE t_servicelog_updtable is table of SRVLOG_UPDATED_C%ROWTYPE;
t_servicelog_updtab t_servicelog_updtable;
dml_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(dml_errors, -24381);
BEGIN
gc_sp_name := 'UPDATE_SRV_LOG_DATA';
VC_log_step := 'BULK '||gc_sp_name||' BEGINS';
adr.sf_timer.start_timer;
-- ========================================================
--
-- Begin Bulk Collect Fetch
--
-- ========================================================
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Started.',
PC_job_log_message => 'Started '||VN_start_time,
pc_text1 => 'PARMS: - BULK LIMIT: '|| gc_bulk_limit||' - DOP: '||gc_parallel_dop,
PD_date1 => SYSDATE
);
gc_interation := 0;
VN_grand_total_count := 0;
FOR I IN 1..15 -- 15 PARTITIONS: process is looping a partition by a partition
LOOP
VN_total_count := 0;
gc_interation := 0;
VN_total_part_count := 0;
-- Build a dynamic view based on a each partition
BUILD_SERVICELOG_VW(I);
-- Process rows by a partition at a time
OPEN SRVLOG_UPDATED_C;
LOOP
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name ||' '||VC_log_step);
FETCH SRVLOG_UPDATED_C BULK COLLECT INTO t_servicelog_updtab LIMIT gc_bulk_limit;
EXIT WHEN t_servicelog_updtab.count = 0;
gc_interation := gc_interation + 1;
VC_log_step := 'Part# '||I||' - ITER# '||gc_interation;
DBMS_APPLICATION_INFO.set_client_info(gc_sp_name||' Part# '||I||'-ITER#: '||gc_interation);
FORALL idx IN t_servicelog_updtab.FIRST.. t_servicelog_updtab.LAST SAVE EXCEPTIONS
UPDATE CCN_SERVICE_LOG
SET FIRST_NAME = t_servicelog_updtab(idx).FIRST_NAME,
LAST_NAME = t_servicelog_updtab(idx).LAST_NAME,
MID_NAME = t_servicelog_updtab(idx).MID_NAME,
SUFFIX = t_servicelog_updtab(idx).SUFFIX,
DATE_OF_BIRTH_TXT = t_servicelog_updtab(idx).DATE_OF_BIRTH_TXT,
DATE_OF_BIRTH = t_servicelog_updtab(idx).DATE_OF_BIRTH,
DATE_OF_DEATH = t_servicelog_updtab(idx).DATE_OF_DEATH,
BIRTH_SEX = t_servicelog_updtab(idx).BIRTH_SEX,
SSN = t_servicelog_updtab(idx).SSN,
EDIPI = t_servicelog_updtab(idx).EDIPI,
EMAIL = t_servicelog_updtab(idx).EMAIL,
HPHONE_NUM = t_servicelog_updtab(idx).HPHONE_NUM,
CPHONE_NUM = t_servicelog_updtab(idx).CPHONE_NUM,
TPHONE_NUM = t_servicelog_updtab(idx).TPHONE_NUM,
VISN_GEO = t_servicelog_updtab(idx).VISN_GEO,
VCELIGIBILITY_H_ID = t_servicelog_updtab(idx).VCELIGIBILITY_H_ID,
MAILING_ADDRESS_H_ID= t_servicelog_updtab(idx).MAILING_ADDRESS_H_ID,
RESI_ADDRESS_H_ID = t_servicelog_updtab(idx).RESI_ADDRESS_H_ID,
PREFERRED_FACILITY_H_ID = t_servicelog_updtab(idx).PREFERRED_FACILITY_H_ID,
GEOCODE_STATION_H_ID = t_servicelog_updtab(idx).GEOCODE_STATION_H_ID,
RECORD_CREATED_BY = gc_record_create_by,
RECORD_CREATED_DATE = SYSDATE,
RECORD_MODIFIED_BY = gc_record_create_by,
RECORD_MODIFIED_DATE = SYSDATE,
RECORD_MODIFIED_COUNT = RECORD_MODIFIED_COUNT+1,
VCE = t_servicelog_updtab(idx).VCE,
PRIORITY_GROUP = t_servicelog_updtab(idx).PRIORITY_GROUP,
PRIORITY_GROUP_EFFECT_DATE_TXT = t_servicelog_updtab(idx).PRIORITY_GROUP_EFFECT_DATE_TXT
WHERE ccn_service_log_id = t_servicelog_updtab(idx).service_log_stat_id
AND RECORD_MODIFIED_DATE < GREATEST(t_servicelog_updtab(idx).ADDR_RECORD_MODIFIED_DATE, t_servicelog_updtab(idx).VCELIGBTY_RECORD_MODIFIED_DATE);
VN_total_count := VN_total_count + SQL%ROWCOUNT;
COMMIT;
END LOOP;
-- Initialize array
FOR IDX IN 1.. t_servicelog_updtab.COUNT LOOP
t_servicelog_updtab(idx).person_id := NULL;
t_servicelog_updtab(idx).FIRST_NAME := NULL;
t_servicelog_updtab(idx).LAST_NAME := NULL;
t_servicelog_updtab(idx).MID_NAME := NULL;
t_servicelog_updtab(idx).SUFFIX := NULL;
t_servicelog_updtab(idx).DATE_OF_BIRTH_TXT := NULL;
t_servicelog_updtab(idx).DATE_OF_BIRTH := NULL;
t_servicelog_updtab(idx).DATE_OF_DEATH := NULL;
t_servicelog_updtab(idx).BIRTH_SEX := NULL;
t_servicelog_updtab(idx).SSN := NULL;
t_servicelog_updtab(idx).EDIPI := NULL;
t_servicelog_updtab(idx).EMAIL := NULL;
t_servicelog_updtab(idx).HPHONE_NUM := NULL;
t_servicelog_updtab(idx).CPHONE_NUM := NULL;
t_servicelog_updtab(idx).TPHONE_NUM := NULL;
t_servicelog_updtab(idx).VISN_GEO := NULL;
t_servicelog_updtab(idx).VCELIGIBILITY_H_ID := NULL;
t_servicelog_updtab(idx).MAILING_ADDRESS_H_ID := NULL;
t_servicelog_updtab(idx).RESI_ADDRESS_H_ID := NULL;
t_servicelog_updtab(idx).PREFERRED_FACILITY_H_ID := NULL;
t_servicelog_updtab(idx).GEOCODE_STATION_H_ID := NULL;
t_servicelog_updtab(idx).VCE := NULL;
t_servicelog_updtab(idx).PRIORITY_GROUP := NULL;
t_servicelog_updtab(idx).PRIORITY_GROUP_EFFECT_DATE_TXT:= NULL;
END LOOP;
VN_total_part_count := VN_total_part_count + VN_total_count;
VN_grand_total := VN_grand_total + VN_total_part_count;
CLOSE SRVLOG_UPDATED_C;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => '*INFORMATION - '||PERSONSEL_TAB(I)||' Completed.',
PC_job_log_message => 'PARTITION: '||PERSONSEL_TAB(I)||' - Rows Added: '||VN_total_part_count||adr.sf_timer.elapsed_message (' '),
pc_text1 => 'Total ITER#: '||gc_interation||' - Elapsed: '|| adr.sf_timer.elapsed_time,
PD_date1 => SYSDATE
);
END LOOP;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - SP '||gc_sp_name|| ' Completed.',
PC_job_log_message => 'Total Rows: '||VN_grand_total||adr.sf_timer.elapsed_message (' '),
pc_text1 => adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
EXCEPTION
WHEN dml_errors THEN
VN_EXCEPTION_CNT := SQL%BULK_EXCEPTIONS.COUNT;
-- gc_job_sucess := 0;
FOR I IN 1 .. VN_EXCEPTION_CNT LOOP
VC_error_msg :=
'ERROR BULK: ' || VC_log_step||' ERROR# '||I||' INTER# '||SQL%BULK_EXCEPTIONS(I).ERROR_INDEX ||
' PERSON ID: ' || t_servicelog_updtab(I).person_id ||':'||t_servicelog_updtab(I).VCELIGIBILITY_H_ID||
' Error Msg: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXCEPTION - ROWS FAILED: '||VN_EXCEPTION_CNT,
PC_job_log_message => VC_error_msg,
PC_text1 => 'Rows Added: '||VN_grand_total|| ' - Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
END LOOP;
RAISE;
WHEN OTHERS THEN
--gc_job_sucess := 0;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'ERROR EXEPTION',
PC_job_log_message =>VC_log_step||'-'|| SUBSTR('ERROR - ' || SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'Added: '||VN_grand_total|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
RAISE;
END UPDATE_SRV_LOG_DATA;
/***************************************************************************
*
* NAME
* PROCESS_CCN_SERVICE_LOG_MAIN
*
* DESCRIPTION
* This procedure is the main SP to load data into CCN_SERVICE_LOG
*
***************************************************************************/
PROCEDURE PROCESS_CCN_SERVICE_LOG_MAIN IS
lc_sp_name VARCHAR2(80) := 'PROCESS_CCN_SERVICE_LOG_MAIN';
VN_total_rows_added NUMBER := 0;
VN_total_rows_updated NUMBER := 0;
p_ready_run_status BOOLEAN := FALSE;
proc_continue_exc EXCEPTION;
BEGIN
time_a := dbms_utility.get_time;
ALTER_SESSION_SETTINGS (gc_parallel_dop);
-- Check to make sure last contractor id processed
PRECHECK_PROC (p_ready_run_status);
IF p_ready_run_status THEN
PURGE_STG_TABLE;
INITIALIZE_TAB_PARTITION_ARRAY;
LOAD_CCNSERVLOG_STG;
LOAD_SELECTED_PERSON_STG;
IF lc_continue_proc = FALSE THEN
RAISE proc_continue_exc;
END IF;
LOAD_ADDR_STG;
LOAD_ADDR_H_STG;
LOAD_PREFERED_FACILITY_H_STG;
LOAD_EMAIL_STG;
LOAD_GEOCODE_TRANSMIT_STG;
LOAD_PHONE_STG;
LOAD_TPHONE_STG;
gc_record_create_by := gc_record_create_by||'-'||TO_CHAR(SYSDATE,'YYYYMMDD:HH24');
LOAD_SRV_LOG_DATA;
VN_grand_total_count := 0;
UPDATE_SRV_LOG_DATA;
-- =======================================================================
--
-- Display outputs rows updated information
--
-- =======================================================================
time_b := dbms_utility.get_time;
IF (time_b - time_a)/100 > 60 THEN
VC_unit := 'min';
VN_elapsed_time := ROUND((time_b - time_a)/100/60,2);
ELSE
VC_unit := 'sec';
VN_elapsed_time := round((time_b - time_a)/100,2);
END IF;
POSTCHECK_PROC;
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - PKG CCN SERVCIE LOG PROC COMPLETED.',
PC_job_log_message => 'Rows Added/Updated: '||VN_total_rows_added||'/'||VN_total_rows_updated||' Elapse Time: '||VN_elapsed_time||' '||VC_unit,
pc_text1 => adr.sf_timer.elapsed_message (lc_sp_name),
PD_date1 => SYSDATE
);
ELSE
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'INFORMATION - PKG '||CC_MODULE_NAME|| '. PROCESSED ABORTED.',
PC_job_log_message => lc_sp_name||' - NO NEW CCN CONTRACTOR FOUND. '||VN_start_time,
pc_text1 => 'Last Contractor ID Processed: '||gc_contractor_id||' - PARMS: - BULK LIMIT: '|| gc_bulk_limit||' - DOP: '||gc_parallel_dop,
PD_date1 => SYSDATE
);
END IF;
EXCEPTION
WHEN proc_continue_exc THEN
DBMS_OUTPUT.PUT_LINE('No ROWS FOUND - Job STOPPED GRACEFULLY!');
ADRMGT.Job_Process_Log_Sp(PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'MAIN SP: No ROWS FOUND - Job STOPPED GRACEFULLY!',
PC_job_log_message =>VC_log_step||' - '||SUBSTR(SQLCODE||': '||SQLERRM,1,254),
PC_text1 => 'NO ROWS FOUND IN CCN_PERSON_SELECTED_STG '|| 'Elapse Time: '||adr.sf_timer.elapsed_message (gc_sp_name),
PD_date1 => SYSDATE
);
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(
PC_job_name => CC_MODULE_NAME,
PD_job_log_date => SYSDATE,
PC_job_status => 'EXCEPTION ERROR - '||SUBSTR(VC_log_step,1,60),
PC_job_log_message => SUBSTR(SQLCODE,1,60)||' - ' ||SUBSTR(SQLERRM,1,254),
PC_text1 => SUBSTR(SUBSTR(VC_log_step,1,60)
|| DBMS_UTILITY.FORMAT_CALL_STACK
|| DBMS_UTILITY.format_error_stack
|| DBMS_UTILITY.format_error_backtrace,1,255),
PD_date1 => SYSDATE);
RAISE;
END PROCESS_CCN_SERVICE_LOG_MAIN;
END CCN_SRV_LOAD_PKG;
/
CREATE OR REPLACE PUBLIC SYNONYM CCN_SRV_LOAD_PKG FOR ADR.CCN_SRV_LOAD_PKG;
DROP PACKAGE BODY ADR.HL7_ARCHIVE_PKG;
CREATE OR REPLACE PACKAGE BODY ADR.Hl7_Archive_Pkg
AS
/*****************************************************************************
*
* NAME: Hl7_Archive_Control
* TYPE: Function
* RETURN VALUE: VARCHAR2
*
* DESCRIPTION
* Used to request that the HL7 archiving job in the Oracle job scheduler
* either starts or stops processing.
*
* It sets the Value column in the ADR.Adr_Parameter table
* (Application_name = HL7_ARCHIVE_CONTROL,
* Parameter_name = START_STOP_PROCESS) to either 0 (stop processing) or
* 1 (start processing.
*
*****************************************************************************
*/
FUNCTION Hl7_Archive_Control
(PN_status_code
IN NUMBER)
RETURN VARCHAR2
IS
CC_msg_already_started CONSTANT VARCHAR2(255) := 'Archive process start has already been requested';
CC_msg_already_stopped CONSTANT VARCHAR2(255) := 'Archive process stop has already been requested';
CC_msg_input_parm_invalid CONSTANT VARCHAR2(255) := 'ERROR - Invalid function input parameter. Function input must be 0 or 1.';
CC_msg_input_unknown_reqst CONSTANT VARCHAR2(255) := 'ERROR - Unknown request.';
CC_msg_start_success CONSTANT VARCHAR2(255) := 'Archive start request completed successfully';
CC_msg_stop_success CONSTANT VARCHAR2(255) := 'Archive stop request completed successfully';
CC_msg_no_param_row CONSTANT VARCHAR2(255) := 'ERROR - No HL7 archive parameter found in table ADRMGT.Adr_Parameter. Request failed.';
VC_status_msg VARCHAR2(255);
VN_row_count NUMBER;
VN_curr_status_code NUMBER(1);
VN_new_status_code NUMBER(1);
BEGIN
IF PN_status_code NOT IN (0,1) THEN
VC_status_msg := CC_msg_input_parm_invalid;
ELSE
VN_new_status_code := PN_status_code;
SELECT COUNT(*)
INTO VN_row_count
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_ARCHIVE_CONTROL'
AND Parameter_name = 'START_STOP_PROCESS';
IF VN_row_count = 0 THEN
VC_status_msg := CC_msg_no_param_row;
ELSE
SELECT AP.Value
INTO VN_curr_status_code
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_ARCHIVE_CONTROL'
AND Parameter_name = 'START_STOP_PROCESS';
IF VN_new_status_code = 0
AND VN_curr_status_code = 0 THEN -- Stop requested, already stopped
VC_status_msg := CC_msg_already_stopped;
ELSIF VN_new_status_code = 1
AND VN_curr_status_code = 1 THEN -- Start requested, already started
VC_status_msg := CC_msg_already_started;
ELSIF (VN_new_status_code = 0
AND VN_curr_status_code = 1) -- Stop requested, valid request
OR (VN_new_status_code = 1
AND VN_curr_status_code = 0) THEN -- Start requested, valid request
BEGIN
UPDATE Adr_Parameter AP
SET AP.Value = VN_new_status_code,
AP.Record_modified_date = SYSDATE,
AP.Record_modified_by = 'Start_Stop_Process'
WHERE AP.Application_name = 'HL7_ARCHIVE_CONTROL'
AND AP.Parameter_name = 'START_STOP_PROCESS';
COMMIT;
IF VN_new_status_code = 0 THEN
VC_status_msg := CC_msg_stop_success;
ELSE
VC_status_msg := CC_msg_start_success;
END IF;
EXCEPTION
WHEN OTHERS THEN
VC_status_msg := SUBSTR('ERROR - Unable to update status to '
|| VN_new_status_code
|| ' in table ADRMGT.Adr_Parameter - ' || SQLERRM,1,254);
END;
ELSE
VC_status_msg := CC_msg_input_unknown_reqst
|| ' Input parameter: ' || VN_new_status_code
|| ' Table parameter: ' || VN_curr_status_code;
END IF;
END IF;
END IF;
RETURN(VC_status_msg);
EXCEPTION
WHEN OTHERS THEN
VC_status_msg := SUBSTR('ERROR - Archive start/stop request cannot be completed - ' || SQLERRM,1,254);
END Hl7_Archive_Control;
/*****************************************************************************
*
* NAME: Hl7_Delete_Control
* TYPE: Function
* RETURN VALUE: VARCHAR2
*
* DESCRIPTION
* Used to request that the HL7 archive delete job in the Oracle job
* scheduler either starts or stops processing.
*
* It sets the Value column in the ADR.Adr_Parameter table
* (Application_name = HL7_DELETE_CONTROL,
* Parameter_name = START_STOP_PROCESS) to either 0 (stop processing) or
* 1 (start processing.
*
*****************************************************************************
*/
FUNCTION Hl7_Delete_Control
(PN_status_code
IN NUMBER)
RETURN VARCHAR2
IS
CC_msg_already_started CONSTANT VARCHAR2(255) := 'Delete process start has already been requested';
CC_msg_already_stopped CONSTANT VARCHAR2(255) := 'Delete process stop has already been requested';
CC_msg_input_parm_invalid CONSTANT VARCHAR2(255) := 'ERROR - Invalid function input parameter. Function input must be 0 or 1.';
CC_msg_input_unknown_reqst CONSTANT VARCHAR2(255) := 'ERROR - Unknown request.';
CC_msg_start_success CONSTANT VARCHAR2(255) := 'Delete start request completed successfully';
CC_msg_stop_success CONSTANT VARCHAR2(255) := 'Delete stop request completed successfully';
CC_msg_no_param_row CONSTANT VARCHAR2(255) := 'ERROR - No HL7 delete parameter found in table ADRMGT.Adr_Parameter. Request failed.';
VC_status_msg VARCHAR2(255);
VN_row_count NUMBER;
VN_curr_status_code NUMBER(1);
VN_new_status_code NUMBER(1);
BEGIN
IF PN_status_code NOT IN (0,1) THEN
VC_status_msg := CC_msg_input_parm_invalid;
ELSE
VN_new_status_code := PN_status_code;
SELECT COUNT(*)
INTO VN_row_count
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_DELETE_CONTROL'
AND Parameter_name = 'START_STOP_PROCESS';
IF VN_row_count = 0 THEN
VC_status_msg := CC_msg_no_param_row;
ELSE
SELECT AP.Value
INTO VN_curr_status_code
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_DELETE_CONTROL'
AND Parameter_name = 'START_STOP_PROCESS';
IF VN_new_status_code = 0
AND VN_curr_status_code = 0 THEN -- Stop requested, already stopped
VC_status_msg := CC_msg_already_stopped;
ELSIF VN_new_status_code = 1
AND VN_curr_status_code = 1 THEN -- Start requested, already started
VC_status_msg := CC_msg_already_started;
ELSIF (VN_new_status_code = 0
AND VN_curr_status_code = 1) -- Stop requested, valid request
OR (VN_new_status_code = 1
AND VN_curr_status_code = 0) THEN -- Start requested, valid request
BEGIN
UPDATE Adr_Parameter AP
SET AP.Value = VN_new_status_code,
AP.Record_modified_date = SYSDATE,
AP.Record_modified_by = 'Start_Stop_Process'
WHERE AP.Application_name = 'HL7_DELETE_CONTROL'
AND AP.Parameter_name = 'START_STOP_PROCESS';
COMMIT;
IF VN_new_status_code = 0 THEN
VC_status_msg := CC_msg_stop_success;
ELSE
VC_status_msg := CC_msg_start_success;
END IF;
EXCEPTION
WHEN OTHERS THEN
VC_status_msg := SUBSTR('ERROR - Unable to update status to '
|| VN_new_status_code
|| ' in table ADRMGT.Adr_Parameter - ' || SQLERRM,1,254);
END;
ELSE
VC_status_msg := CC_msg_input_unknown_reqst
|| ' Input parameter: ' || VN_new_status_code
|| ' Table parameter: ' || VN_curr_status_code;
END IF;
END IF;
END IF;
RETURN(VC_status_msg);
EXCEPTION
WHEN OTHERS THEN
VC_status_msg := SUBSTR('ERROR - Delete start/stop request cannot be completed - ' || SQLERRM,1,254);
END Hl7_Delete_Control;
/*****************************************************************************
*
* NAME: Hl7_Process_Archives
* TYPE: Procedure
*
* DESCRIPTION
* Used to move rows from the Hl7_Transaction_Log table to the
* Hl7_Archive_Transaction_log table based on customer defined archiving
* criteria.
*
* PARAMETERS
* PB_run_standalone - Allows this procedure to run outside of the Oracle
* DBMS_JOB scheduler.
* PB_allow_rpt_inst - Allows this procedure to run on reporting
* databases (ie. ADRRP)
*
*****************************************************************************
*/
PROCEDURE Hl7_Process_Archives
(PB_run_standalone
IN BOOLEAN DEFAULT FALSE,
PB_allow_rpt_inst
IN BOOLEAN DEFAULT FALSE
)
IS
-- CONSTANTS
CC_process_name VARCHAR2(60) := 'HL7 Archiver - Archive HL7 Rows';
CC_stat_type_complete CONSTANT NUMBER := 1506921;
CC_stat_type_uncomp_wait_tran CONSTANT NUMBER := 1506922;
CC_stat_type_uncomp_wait_ack CONSTANT NUMBER := 1506923;
CC_stat_type_uncomp_pending CONSTANT NUMBER := 1506924;
CC_stat_type_uncomp_retrans CONSTANT NUMBER := 1506925;
CC_stat_type_uncomp_not_trans CONSTANT NUMBER := 1506926;
CC_stat_type_uncomp_error CONSTANT NUMBER := 1506927;
CC_stat_type_uncomp_rtran_fail CONSTANT NUMBER := 1506928;
CC_tran_type_orfz10s CONSTANT NUMBER := 1510423;
CC_tran_type_orfz11s CONSTANT NUMBER := 1510425; -- CCR 1788
CC_tran_type_oruz04s CONSTANT NUMBER := 1510420;
CC_tran_type_oruz05e CONSTANT NUMBER := 1510407; -- CCR 1788
CC_tran_type_oruz05s CONSTANT NUMBER := 1510421;
CC_tran_type_oruz10s CONSTANT NUMBER := 1510422;
CC_tran_type_oruz11e CONSTANT NUMBER := 1510408;
CC_tran_type_oruz11s CONSTANT NUMBER := 1510424;
CC_tran_type_qryz10e CONSTANT NUMBER := 1510403;
CC_tran_type_qryz11e CONSTANT NUMBER := 1510435; -- CCR 1788
-- VARIABLES
VB_allow_rpt_inst BOOLEAN := FALSE;
VB_error BOOLEAN := FALSE;
VB_run_standalone BOOLEAN := FALSE;
VC_allow_rpt_inst VARCHAR2(5) := NULL;
VC_instance_name VARCHAR2(16) := NULL;
VC_process_duration VARCHAR2(50) := NULL;
VC_process_msg VARCHAR2(500) := NULL;
VC_run_standalone VARCHAR2(5) := NULL;
VD_log_date DATE;
VD_process_end_date DATE;
VD_process_start_date DATE;
VI_rows_to_keep_count BINARY_INTEGER;
VN_archive_count NUMBER := 0;
VN_current_person_id NUMBER := 0;
VN_delete_count NUMBER := 0;
VN_institution_id NUMBER := 0;
VN_insert_count NUMBER := 0;
VN_job_count NUMBER := 0;
VN_log_age_to_keep NUMBER := 180;
VN_msg_status_id NUMBER;
VN_msg_transtype_id NUMBER;
VN_parm_keep_uncompleted_days NUMBER := 30;
VN_parm_keep_orfz10s_count NUMBER := 9;
VN_parm_keep_orfz11s_count NUMBER := 4; -- CCR 1788
VN_parm_keep_oruz04s_count NUMBER := 4;
VN_parm_keep_oruz05e_count NUMBER := 2; -- CCR 1788
VN_parm_keep_oruz05s_count NUMBER := 9;
VN_parm_keep_oruz10s_count NUMBER := 9;
VN_parm_keep_oruz11e_count NUMBER := 8;
VN_parm_keep_oruz11s_count NUMBER := 9;
VN_parm_keep_qryz10e_count NUMBER := 9;
VN_parm_keep_qryz11e_count NUMBER := 4; -- CCR 1788
VN_person_count NUMBER := 0;
VN_previous_person_id NUMBER := 0;
VN_process_control NUMBER := 0;
VN_process_days NUMBER;
VN_process_hours NUMBER;
VN_process_minutes NUMBER;
VN_process_seconds NUMBER;
VN_process_time_in_secs NUMBER;
-- RECORD DEFINITIONS
TYPE TR_hl7_txn_rec IS RECORD
(Hl7_transaction_log_id ADR.Hl7_Transaction_Log.Hl7_transaction_log_id%TYPE,
Record_created_date ADR.Hl7_Transaction_Log.Record_created_date%TYPE);
-- TABLE DEFINITIONS
TYPE TT_number_table IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
TYPE TT_hl7_txn IS TABLE OF TR_hl7_txn_rec
INDEX BY BINARY_INTEGER;
--TABLES
T_institution_ids TT_number_table;
T_status_types TT_number_table;
T_trans_types TT_number_table;
T_hl7_txns TT_hl7_txn;
-- CURSORS
CURSOR C_inst_id_rec IS
SELECT DISTINCT Std_institution_id
FROM Hl7_Transaction_Log
WHERE Person_id = VN_current_person_id
ORDER BY Std_institution_id;
CURSOR C_msg_status_rec IS
SELECT DISTINCT Hl7_message_status_type_id
FROM Hl7_Transaction_Log
WHERE Person_id = VN_current_person_id
AND Std_Institution_Id = VN_institution_id
ORDER BY Hl7_message_status_type_id;
CURSOR C_msg_transtype_rec IS
SELECT DISTINCT Message_transmission_type_id
FROM Hl7_Transaction_Log
WHERE Person_id = VN_current_person_id
AND Std_Institution_Id = VN_institution_id
AND Hl7_message_status_type_id = VN_msg_status_id
ORDER BY Message_transmission_type_id;
CURSOR C_hl7_txn_rec IS
SELECT Hl7_transaction_log_id,
Record_Created_date
FROM Hl7_Transaction_Log
WHERE Person_id = VN_current_person_id
AND Std_Institution_Id = VN_institution_id
AND Hl7_message_status_type_id = VN_msg_status_id
AND Message_transmission_type_id = VN_msg_transtype_id
ORDER BY Record_Created_date ASC,
Hl7_transaction_log_id ASC;
CURSOR C_comp_oruz11e_rec IS
SELECT Hl7_transaction_log_id,
Record_Created_date
FROM Hl7_Transaction_Log
WHERE Person_id = VN_current_person_id
AND Hl7_message_status_type_id = CC_stat_type_complete
AND Message_transmission_type_id = CC_tran_type_oruz11e
ORDER BY Record_Created_date ASC,
Hl7_transaction_log_id ASC;
CURSOR C_comp_oruz05e_rec IS -- CCR1788
SELECT Hl7_transaction_log_id,
Record_Created_date
FROM Hl7_Transaction_Log
WHERE Person_id = VN_current_person_id
AND Hl7_message_status_type_id = CC_stat_type_complete
AND Message_transmission_type_id = CC_tran_type_oruz05e
ORDER BY Record_Created_date ASC,
Hl7_transaction_log_id ASC;
-- ***************************************************************************
-- *
-- * Update Last Person Processed Parameter
-- *
-- ***************************************************************************
PROCEDURE Update_Last_Person_Parm
(PN_person_id
IN NUMBER DEFAULT 0
)
IS
BEGIN
UPDATE Adr_Parameter AP
SET AP.Value = PN_person_id
WHERE Application_name = 'HL7_PROCESS_ARCHIVES'
AND Parameter_name = 'LAST PERSON_ID PROCESSED';
COMMIT;
EXCEPTION
WHEN OTHERS THEN
VB_error := TRUE;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Failed to update parameter row (person id failure).'
|| ' Application: HL7_PROCESS_ARCHIVES'
|| ' Parameter: LAST PERSON_ID PROCESSED'
|| ' Requested new Person_id: '
|| LTRIM(TO_CHAR(PN_person_id,'9999999999990'))
|| ' Current Person_id: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' Previous Person_id: '
|| LTRIM(TO_CHAR(VN_previous_person_id,'9999999999990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failed to update parameter row (person id failure).'
|| ' Application: HL7_PROCESS_ARCHIVES'
|| ' Parameter: LAST PERSON_ID PROCESSED'
|| ' Requested new Person_id: '
|| LTRIM(TO_CHAR(PN_person_id,'9999999999990'))
|| ' Current Person_id: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' Previous Person_id: '
|| LTRIM(TO_CHAR(VN_previous_person_id,'9999999999990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
END Update_Last_Person_Parm;
-- ***************************************************************************
-- *
-- * Table Row Insert/Delete Sub-Procedure
-- *
-- ***************************************************************************
PROCEDURE Process_Archive_Rows
(PC_process_msg
IN VARCHAR2 DEFAULT NULL
)
IS
-- EXCEPTIONS
EE_DML_ERROR EXCEPTION;
PRAGMA EXCEPTION_INIT(EE_DML_ERROR, -24381);
BEGIN -- insert/delete of archive rows
-- Archive old completed HL7 rows
VN_insert_count := 0;
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Inserting Archive Data');
-- The number of rows in the table that will be archived will be adjusted by the number of rows to keep
-- by subtracting the number to keep (VI_rows_to_keep_count) from the maximum internal row number in
-- the collection table. This value is set in the main processing logic.
BEGIN -- insert archive rows
FORALL I_hl7_txns_ins IN T_hl7_txns.FIRST..T_hl7_txns.LAST - VI_rows_to_keep_count SAVE EXCEPTIONS
INSERT
INTO Hl7_Archive_Transaction_Log
(HL7_TRANSACTION_LOG_ID,
PERSON_ID,
MESSAGE_TRANSMISSION_TYPE_ID,
HL7_MESSAGE_STATUS_TYPE_ID,
REF_HL7_TRANSACTION_LOG_ID,
STD_INSTITUTION_ID,
ACK_TYPE_ID,
MESSAGE_CONTROL_NUMBER,
BATCH_CONTROL_NUMBER,
ACK_DATE,
TRANSMISSION_DATE,
RETRANSMISSION_COUNT,
RETRANSMISSION_INFO_TEXT,
ERROR_TEXT,
SITE_RECORD_ELGBTY_STATUS_CODE,
RECORD_CREATED_BY,
RECORD_CREATED_DATE,
MESSAGE_BODY,
INTERNAL_ERROR_TEXT)
SELECT HL7_TRANSACTION_LOG_ID,
PERSON_ID,
MESSAGE_TRANSMISSION_TYPE_ID,
HL7_MESSAGE_STATUS_TYPE_ID,
REF_HL7_TRANSACTION_LOG_ID,
STD_INSTITUTION_ID,
ACK_TYPE_ID,
MESSAGE_CONTROL_NUMBER,
BATCH_CONTROL_NUMBER,
ACK_DATE,
TRANSMISSION_DATE,
RETRANSMISSION_COUNT,
RETRANSMISSION_INFO_TEXT,
ERROR_TEXT,
SITE_RECORD_ELGBTY_STATUS_CODE,
RECORD_CREATED_BY,
RECORD_CREATED_DATE,
MESSAGE_BODY,
INTERNAL_ERROR_TEXT
FROM Hl7_Transaction_Log
WHERE Hl7_transaction_log_id = T_hl7_txns(I_hl7_txns_ins).Hl7_transaction_log_id;
VN_insert_count := SQL%ROWCOUNT;
IF (T_hl7_txns.COUNT - VI_rows_to_keep_count) = VN_insert_count THEN -- If all the rows were inserted
-- Delete old completed HL7 rows
VN_delete_count := 0;
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Deleting Archived HL7 Data');
-- The number of rows in the table that will be archived will be adjusted by the number of rows to keep
-- by subtracting the number to keep (VI_rows_to_keep_count) from the maximum internal row number in
-- the collection table. This value is set in the main processing logic.
BEGIN -- delete HL7 rows
FORALL I_hl7_txns_del IN T_hl7_txns.FIRST..T_hl7_txns.LAST - VI_rows_to_keep_count SAVE EXCEPTIONS
DELETE
FROM Hl7_Transaction_Log
WHERE Hl7_Transaction_Log_id = T_hl7_txns(I_hl7_txns_del).Hl7_Transaction_Log_id;
VN_delete_count := SQL%ROWCOUNT;
IF (T_hl7_txns.COUNT - VI_rows_to_keep_count) = VN_delete_count THEN -- if all rows were deleted
IF VN_insert_count = VN_delete_count THEN -- insert and delete counts match
COMMIT;
VN_archive_count := VN_archive_count + VN_insert_count;
VN_person_count := VN_person_count + 1;
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(TO_CHAR(SYSDATE,'DD-MON HH24:MI')
|| ' -Total Persons ' -- Total people processed
|| LTRIM(TO_CHAR(VN_person_count,'9,999,999,990'))
|| ' -Total Rows ' -- Total rows processed
|| LTRIM(TO_CHAR(VN_archive_count,'999,999,999,990'))
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| '.');
ELSE -- insert and delete counts do not match
VB_error := TRUE;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('INSERT/DELETE counts do not match. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| ' - INSERT COUNT: '
|| LTRIM(TO_CHAR(VN_insert_count,'999,990'))
|| ' - DELETE COUNT: '
|| LTRIM(TO_CHAR(VN_delete_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => NULL,
PC_job_error_message => SUBSTR('INSERT/DELETE counts do not match. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| ' - INSERT COUNT: '
|| LTRIM(TO_CHAR(VN_insert_count,'999,990'))
|| ' - DELETE COUNT: '
|| LTRIM(TO_CHAR(VN_delete_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ROLLBACK;
Update_Last_Person_Parm(VN_previous_person_id);
END IF;-- insert and delete counts match
ELSE -- not all rows were deleted
VB_error := TRUE;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Number of rows deleted do not match number of rows in temp table. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| ' - DELETE COUNT: '
|| LTRIM(TO_CHAR(VN_delete_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => NULL,
PC_job_error_message => SUBSTR('Number of rows deleted do not match number of rows in temp table. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| ' - DELETE COUNT: '
|| LTRIM(TO_CHAR(VN_delete_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ROLLBACK;
Update_Last_Person_Parm(VN_previous_person_id);
END IF; -- if all rows were deleted
EXCEPTION -- failed during delete
WHEN EE_DML_ERROR THEN
VB_error := TRUE;
VN_delete_count := SQL%ROWCOUNT;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('All rows not deleted. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| '. Error count: '
|| LTRIM(TO_CHAR(SQL%BULK_EXCEPTIONS.COUNT,'999,990'))
|| '. Rows attempted to delete: '
|| LTRIM(TO_CHAR(VN_delete_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => NULL,
PC_job_error_message => SUBSTR('All rows not deleted. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| '. Error count: '
|| LTRIM(TO_CHAR(SQL%BULK_EXCEPTIONS.COUNT,'999,990'))
|| '. Rows attempted to delete: '
|| LTRIM(TO_CHAR(VN_delete_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
FOR I_del_err IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Failed DELETE row # '
|| I_del_err
|| ' occurred during iteration # '
|| SQL%BULK_EXCEPTIONS(I_del_err).ERROR_INDEX
|| ' Error message: '
|| SQLERRM(-SQL%BULK_EXCEPTIONS(I_del_err).ERROR_CODE),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(-SQL%BULK_EXCEPTIONS(I_del_err).ERROR_CODE,1,60),
PC_job_error_message => SUBSTR('Failed DELETE row # '
|| I_del_err
|| ' occurred during iteration # '
|| SQL%BULK_EXCEPTIONS(I_del_err).ERROR_INDEX
|| ' Error message: '
|| SQLERRM(-SQL%BULK_EXCEPTIONS(I_del_err).ERROR_CODE),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
END LOOP;
ROLLBACK;
Update_Last_Person_Parm(VN_previous_person_id);
WHEN OTHERS THEN
VB_error := TRUE;
VN_insert_count := SQL%ROWCOUNT;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Unknown error while deleting HL7 rows. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| '. Error count: '
|| LTRIM(TO_CHAR(SQL%BULK_EXCEPTIONS.COUNT,'999,990'))
|| '. Rows attempted to delete: '
|| LTRIM(TO_CHAR(VN_insert_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unknown error while deleting HL7 rows. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| '. Error count: '
|| LTRIM(TO_CHAR(SQL%BULK_EXCEPTIONS.COUNT,'999,990'))
|| '. Rows attempted to delete: '
|| LTRIM(TO_CHAR(VN_insert_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ROLLBACK;
Update_Last_Person_Parm(VN_previous_person_id);
END; -- end delete HL7 rows
ELSE -- not all the rows were inserted
VB_error := TRUE;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Number of rows inserted do not match number of rows in temp table. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| ' - INSERT COUNT: '
|| LTRIM(TO_CHAR(VN_insert_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => NULL,
PC_job_error_message => SUBSTR('Number of rows inserted do not match number of rows in temp table. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| ' - INSERT COUNT: '
|| LTRIM(TO_CHAR(VN_insert_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ROLLBACK;
Update_Last_Person_Parm(VN_previous_person_id);
END IF; -- end if all the rows were inserted
EXCEPTION -- failed during insert
WHEN EE_DML_ERROR THEN
VB_error := TRUE;
VN_insert_count := SQL%ROWCOUNT;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('All rows not inserted. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| '. Error count: '
|| LTRIM(TO_CHAR(SQL%BULK_EXCEPTIONS.COUNT,'999,990'))
|| '. Rows attempted to insert: '
|| LTRIM(TO_CHAR(VN_insert_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => NULL,
PC_job_error_message => SUBSTR('All rows not inserted. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| '. Error count: '
|| LTRIM(TO_CHAR(SQL%BULK_EXCEPTIONS.COUNT,'999,990'))
|| '. Rows attempted to insert: '
|| LTRIM(TO_CHAR(VN_insert_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
FOR I_ins_err IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Failed INSERT row # '
|| I_ins_err
|| ' occurred during iteration # '
|| SQL%BULK_EXCEPTIONS(I_ins_err).ERROR_INDEX
|| ' Error message: '
|| SQLERRM(-SQL%BULK_EXCEPTIONS(I_ins_err).ERROR_CODE),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(-SQL%BULK_EXCEPTIONS(I_ins_err).ERROR_CODE,1,60),
PC_job_error_message => SUBSTR('Failed INSERT row # '
|| I_ins_err
|| ' occurred during iteration # '
|| SQL%BULK_EXCEPTIONS(I_ins_err).ERROR_INDEX
|| ' Error message: '
|| SQLERRM(-SQL%BULK_EXCEPTIONS(I_ins_err).ERROR_CODE),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
END LOOP;
ROLLBACK;
Update_Last_Person_Parm(VN_previous_person_id);
WHEN OTHERS THEN
VB_error := TRUE;
VN_insert_count := SQL%ROWCOUNT;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Unknown error while inserting archive rows. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| '. Error count: '
|| LTRIM(TO_CHAR(SQL%BULK_EXCEPTIONS.COUNT,'999,990'))
|| '. Rows attempted to insert: '
|| LTRIM(TO_CHAR(VN_insert_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unknown error while inserting archive rows. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| '. Error count: '
|| LTRIM(TO_CHAR(SQL%BULK_EXCEPTIONS.COUNT,'999,990'))
|| '. Rows attempted to insert: '
|| LTRIM(TO_CHAR(VN_insert_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ROLLBACK;
Update_Last_Person_Parm(VN_previous_person_id);
END; -- end insert archive rows
EXCEPTION
WHEN OTHERS THEN
VB_error := TRUE;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Unknown error in procedure Process_Archive_Rows. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unknown error in procedure Process_Archive_Rows. '
|| LTRIM(RTRIM(PC_process_msg))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ROLLBACK;
Update_Last_Person_Parm(VN_previous_person_id);
END Process_Archive_Rows;
-- ***************************************************************************
-- *
-- * Main Procedure
-- *
-- ***************************************************************************
BEGIN
DBMS_APPLICATION_INFO.SET_MODULE(Module_name => 'Hl7_Process_Archives',
Action_name => NULL);
VD_process_start_date := SYSDATE;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Process Initiation',1,60),
PC_job_log_message => NULL,
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
-- ***************************************************************************
-- *
-- * Validate input parameters
-- *
-- ***************************************************************************
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Validating Input Parameters');
-- * Check run standalone flag
IF PB_run_standalone IS NULL
OR NOT PB_run_standalone THEN
VB_run_standalone := FALSE;
VC_run_standalone := 'FALSE'; -- used for log message, boolean can't be displayed
ELSE
VB_run_standalone := TRUE;
VC_run_standalone := 'TRUE'; -- used for log message, boolean can't be displayed
END IF;
-- * Check run on report instance flag
IF PB_allow_rpt_inst IS NULL
OR NOT PB_allow_rpt_inst THEN
VB_allow_rpt_inst := FALSE;
VC_allow_rpt_inst := 'FALSE'; -- used for log message, boolean can't be displayed
ELSE
VB_allow_rpt_inst := TRUE;
VC_allow_rpt_inst := 'TRUE'; -- used for log message, boolean can't be displayed
END IF;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Command Line Parameters',1,60),
PC_job_log_message => SUBSTR('Current job command line parameters - '
|| ' Run standalone: ' || VC_run_standalone
|| ' Run on reporting databases: ' || VC_allow_rpt_inst,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
-- ***************************************************************************
-- *
-- * Check to see if process is running on a reporting database.
-- * - If VB_allow_rpt_inst is FALSE, then it's not allowed. End the job.
-- *
-- ***************************************************************************
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Check if running on reporting DB');
BEGIN
SELECT Instance_name
INTO VC_instance_name
FROM V$instance;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Instance Name' ,1,60),
PC_job_log_message => SUBSTR('Job is running on instance ' || UPPER(VC_instance_name) || '.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
IF NOT VB_allow_rpt_inst
AND UPPER(SUBSTR(VC_instance_name,1,4)) = 'ADRR' THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Reporting Database Check',1,60),
PC_job_log_message => SUBSTR('Attempting to run on a reporting database with execution parameter'
|| ' VB_allow_rpt_inst set to FALSE. This job has been terminated.'
|| ' To run on a reporting instance, set parameter VB_allow_rpt_inst'
|| ' to TRUE and resubmit the job.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END IF;
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Reporting Database Check',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve instance name. Terminating script.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve instance name. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
-- ***************************************************************************
-- *
-- * Check to see if any other jobs of this procedure are running.
-- * - If yes, then end this job.
-- *
-- ***************************************************************************
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Check for duplicate jobs running');
SELECT COUNT(*)
INTO VN_job_count
FROM SYS.DBA_JOBS J
WHERE UPPER(J.WHAT) LIKE '%HL7_PROCESS_ARCHIVES%';
IF VN_job_count > 1 THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Multiple Execution Check',1,60),
PC_job_log_message => SUBSTR('There is another instance of this job already in the job queue.'
|| ' Exiting job without running.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
ELSE
IF VB_run_standalone THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Execution Mode',1,60),
PC_job_log_message => SUBSTR('Starting in STANDALONE mode.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ELSE
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Execution Mode',1,60),
PC_job_log_message => SUBSTR('Starting in DBMS_JOB mode.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
END IF;
END IF;
-- ***************************************************************************
-- *
-- * Retrieve modifiable parameters
-- *
-- * If the process control parameter = 0 then the job returns control to
-- * to DBMS_JOB and waits until it is called to run again.
-- *
-- ***************************************************************************
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Fetching user parameters');
-- * START_STOP_PROCESS parameter
BEGIN
SELECT AP.Value
INTO VN_process_control
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_ARCHIVE_CONTROL'
AND Parameter_name = 'START_STOP_PROCESS';
IF VN_process_control = 0 THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Process Control',1,60),
PC_job_log_message => SUBSTR('Start/Stop control flag set to STOP (0). Going back to sleep.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
ELSE
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Process Control',1,60),
PC_job_log_message => SUBSTR('Start/Stop control flag set to START (1). Archiving process starting.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
END IF;
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Process Control',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter START_STOP_PROCESS.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter START_STOP_PROCESS. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
-- * OLDEST LOG FILE DAYS KEPT parameter
BEGIN
SELECT AP.Value
INTO VN_log_age_to_keep
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_ARCHIVES'
AND Parameter_name = 'OLDEST LOG FILE DAYS KEPT';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: OLDEST LOG FILE DAYS KEPT - Value: '|| VN_log_age_to_keep,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter OLDEST LOG FILE DAYS KEPT.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter OLDEST LOG FILE DAYS KEPT. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
-- * OLDEST UNCOMPLETED HL7 DAYS NOT ARCHIVED parameter
BEGIN
SELECT AP.Value
INTO VN_parm_keep_uncompleted_days
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_ARCHIVES'
AND Parameter_name = 'OLDEST UNCOMPLETED HL7 DAYS NOT ARCHIVED';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: OLDEST UNCOMPLETED HL7 DAYS NOT ARCHIVED - Value: '|| VN_parm_keep_uncompleted_days,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter OLDEST UNCOMPLETED HL7 DAYS NOT ARCHIVED.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter OLDEST UNCOMPLETED HL7 DAYS NOT ARCHIVED. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
-- * RECORDS KEPT COUNT - ORFZ10-S parameter
BEGIN
SELECT AP.Value
INTO VN_parm_keep_orfz10s_count
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_ARCHIVES'
AND Parameter_name = 'RECORDS KEPT COUNT - ORFZ10-S';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: RECORDS KEPT COUNT - ORFZ10-S - Value: '|| VN_parm_keep_orfz10s_count,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORFZ10-S.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORFZ10-S. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
-- * RECORDS KEPT COUNT - ORFZ11-S parameter -- CCR 1788 Begin
BEGIN
SELECT AP.Value
INTO VN_parm_keep_orfz11s_count
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_ARCHIVES'
AND Parameter_name = 'RECORDS KEPT COUNT - ORFZ11-S';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: RECORDS KEPT COUNT - ORFZ11-S - Value: '|| VN_parm_keep_orfz11s_count,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORFZ11-S.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORFZ11-S. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END; -- CCR 1788 End
-- * RECORDS KEPT COUNT - ORUZ04-S parameter
BEGIN
SELECT AP.Value
INTO VN_parm_keep_oruz04s_count
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_ARCHIVES'
AND Parameter_name = 'RECORDS KEPT COUNT - ORUZ04-S';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: RECORDS KEPT COUNT - ORUZ04-S - Value: '|| VN_parm_keep_oruz04s_count,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORUZ04-S.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORUZ04-S. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
-- * RECORDS KEPT COUNT - ORUZ05-E parameter -- CCR 1788 Begin
BEGIN
SELECT AP.Value
INTO VN_parm_keep_oruz05e_count
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_ARCHIVES'
AND Parameter_name = 'RECORDS KEPT COUNT - ORUZ05-E';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: RECORDS KEPT COUNT - ORUZ05-E - Value: '|| VN_parm_keep_oruz05e_count,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORUZ05-E.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORUZ05-E. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END; -- CCR 1788 End
-- * RECORDS KEPT COUNT - ORUZ05-S parameter
BEGIN
SELECT AP.Value
INTO VN_parm_keep_oruz05s_count
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_ARCHIVES'
AND Parameter_name = 'RECORDS KEPT COUNT - ORUZ05-S';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: RECORDS KEPT COUNT - ORUZ05-S - Value: '|| VN_parm_keep_oruz05s_count,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORUZ05-S.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORUZ05-S. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
-- * RECORDS KEPT COUNT - ORUZ10-S parameter
BEGIN
SELECT AP.Value
INTO VN_parm_keep_oruz10s_count
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_ARCHIVES'
AND Parameter_name = 'RECORDS KEPT COUNT - ORUZ10-S';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: RECORDS KEPT COUNT - ORUZ10-S - Value: '|| VN_parm_keep_oruz10s_count,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORUZ10-S.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORUZ10-S. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
-- * RECORDS KEPT COUNT - ORUZ11-E parameter
BEGIN
SELECT AP.Value
INTO VN_parm_keep_oruz11e_count
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_ARCHIVES'
AND Parameter_name = 'RECORDS KEPT COUNT - ORUZ11-E';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: RECORDS KEPT COUNT - ORUZ11-E - Value: '|| VN_parm_keep_oruz11e_count,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORUZ11-E.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORUZ11-E. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
-- * RECORDS KEPT COUNT - ORUZ11-S parameter
BEGIN
SELECT AP.Value
INTO VN_parm_keep_oruz11s_count
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_ARCHIVES'
AND Parameter_name = 'RECORDS KEPT COUNT - ORUZ11-S';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: RECORDS KEPT COUNT - ORUZ11-S - Value: '|| VN_parm_keep_oruz11s_count,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORUZ11-S.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - ORUZ11-S. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
-- * RECORDS KEPT COUNT - QRYZ10-E parameter
BEGIN
SELECT AP.Value
INTO VN_parm_keep_qryz10e_count
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_ARCHIVES'
AND Parameter_name = 'RECORDS KEPT COUNT - QRYZ10-E';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: RECORDS KEPT COUNT - QRYZ10-E - Value: '|| VN_parm_keep_qryz10e_count,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - QRYZ10-E.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - QRYZ10-E. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
-- * RECORDS KEPT COUNT - QRYZ11-E parameter -- CCR 1788 Begin
BEGIN
SELECT AP.Value
INTO VN_parm_keep_qryz11e_count
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_ARCHIVES'
AND Parameter_name = 'RECORDS KEPT COUNT - QRYZ11-E';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: RECORDS KEPT COUNT - QRYZ11-E - Value: '|| VN_parm_keep_qryz11e_count,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - QRYZ11-E.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter RECORDS KEPT COUNT - QRYZ11-E. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END; -- CCR 1788 End
-- * LAST PERSON_ID PROCESSED parameter
BEGIN
SELECT AP.Value
INTO VN_previous_person_id
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_ARCHIVES'
AND Parameter_name = 'LAST PERSON_ID PROCESSED';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: LAST PERSON_ID PROCESSED - Value: '|| VN_previous_person_id,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter LAST PERSON_ID PROCESSED.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter LAST PERSON_ID PROCESSED. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
-- ***************************************************************************
-- *
-- * Remove outdated log and error file rows
-- *
-- ***************************************************************************
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Removing old logs and error rows');
BEGIN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Log File Cleanup',1,60),
PC_job_log_message => SUBSTR('Removing Error Logs more than '|| VN_log_age_to_keep || ' days old.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
DELETE
FROM Job_Process_Errs
WHERE Job_name = CC_process_name
AND Date1 < VD_process_start_date - VN_log_age_to_keep;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Log file cleanup',1,60),
PC_job_log_message => SUBSTR('Unable to remove rows from error log table.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to remove rows from error log table. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
BEGIN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Log File Cleanup',1,60),
PC_job_log_message => SUBSTR('Removing Process Logs more than '|| VN_log_age_to_keep || ' days old.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
DELETE
FROM Job_Process_Logs
WHERE Job_name = CC_process_name
AND Date1 < VD_process_start_date - VN_log_age_to_keep;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Log file cleanup',1,60),
PC_job_log_message => SUBSTR('Unable to remove rows from process log table.'
|| ' Terminating execution of the job. '|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to remove rows from process log table. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
-- ***************************************************************************
-- *
-- * Archive Processing loop
-- *
-- ***************************************************************************
BEGIN -- main processing block
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Starting archival of HL7 rows',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
LOOP -- main archive processing loop
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Setting Up Archive Data');
BEGIN -- Get next person_id to process
SELECT NVL(MIN(Person_id),-1) -- going past the last Person_id (EOF) returns a NULL Person_id but not the exception NO_DATA_FOUND
INTO VN_current_person_id -- so flag EOF by putting -1 in VN_current_person_id
FROM Hl7_Transaction_Log
WHERE Person_id > VN_previous_person_id;
IF VN_current_person_id = -1 THEN -- if past the last Person_id (EOF)
RAISE NO_DATA_FOUND; -- force a NO_DATA_FOUND exception to tell the process to complete
END IF; -- end if past the last Person_id (EOF)
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(TO_CHAR(SYSDATE,'DD-MON HH24:MI:SS')
|| ' - Person '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| '.');
-- CCR 1788 Begin
-- ***************************************************************************
-- * Process Status = COMPLETED (1506921)
-- * Transmission Type = ORUZ05-E txns (1510407)
-- ***************************************************************************
BEGIN -- process ORUZ05-E txns (1510407)
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(TO_CHAR(SYSDATE,'DD-MON HH24:MI')
|| ' -P ' -- Person ID
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' -T ' -- Msg Transmission ID
|| LTRIM(TO_CHAR(CC_tran_type_oruz05e,'99999990'))
|| '.');
VI_rows_to_keep_count := 0; -- reset variable that determines how many rows to remove from archiving request table
OPEN C_comp_oruz05e_rec;
FETCH C_comp_oruz05e_rec
BULK COLLECT INTO T_hl7_txns;
CLOSE C_comp_oruz05e_rec;
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(TO_CHAR(SYSDATE,'DD-MON HH24:MI')
|| ' -P ' -- Person ID
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' -T ' -- Msg Transmission ID
|| LTRIM(TO_CHAR(CC_tran_type_oruz05e,'99999990'))
|| ' -C ' -- First count of rows in collection
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT,'999,990'))
|| '.');
IF T_hl7_txns.COUNT > 0 THEN -- completed ORUZ05-E txns exist
IF T_hl7_txns.COUNT > VN_parm_keep_oruz05e_count THEN -- there are more in the table than need to be kept
VI_rows_to_keep_count := VN_parm_keep_oruz05e_count; -- save how many need to be kept
END IF; -- end there are more in the table than need to be kept
END IF; -- end completed ORUZ05-E txns exist
IF VI_rows_to_keep_count > 0 THEN -- remove rows from archiving request table
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(TO_CHAR(SYSDATE,'DD-MON HH24:MI')
|| ' -P ' -- Person ID
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' -T ' -- Msg Transmission ID
|| LTRIM(TO_CHAR(CC_tran_type_oruz05e,'99999990'))
|| ' -F ' -- Final count of rows in collection
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| '.');
VC_process_msg := 'COMPLETED ORUZ05-E txn. Person ID: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Status Type ID: '
|| CC_stat_type_complete
|| ' - Msg Transmission Type ID: '
|| CC_tran_type_oruz05e;
Process_Archive_Rows(VC_process_msg); -- call INSERT/DELETE procedure
IF VB_error THEN -- error flag is set in sub-procedure if there were problems
RETURN;
END IF;
END IF; -- end remove rows from archiving request table
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Failed in transmission ID ORUZ05-E processing step. Person_id: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Transmission type ID: '
|| LTRIM(TO_CHAR(CC_tran_type_oruz05e,'99999990'))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failed in transmission ID ORUZ05-E processing step. Person_id: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Transmission type ID: '
|| LTRIM(TO_CHAR(CC_tran_type_oruz05e,'99999990'))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
Update_Last_Person_Parm(VN_previous_person_id);
RETURN;
END; -- end process ORUZ05-E txns
-- CCR 1788 End
-- ***************************************************************************
-- * Process Status = COMPLETED (1506921)
-- * Transmission Type = ORUZ11-E txns (1510408)
-- ***************************************************************************
BEGIN -- process ORUZ11-E txns (1510408)
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(TO_CHAR(SYSDATE,'DD-MON HH24:MI')
|| ' -P ' -- Person ID
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' -T ' -- Msg Transmission ID
|| LTRIM(TO_CHAR(CC_tran_type_oruz11e,'99999990'))
|| '.');
VI_rows_to_keep_count := 0; -- reset variable that determines how many rows to remove from archiving request table
OPEN C_comp_oruz11e_rec;
FETCH C_comp_oruz11e_rec
BULK COLLECT INTO T_hl7_txns;
CLOSE C_comp_oruz11e_rec;
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(TO_CHAR(SYSDATE,'DD-MON HH24:MI')
|| ' -P ' -- Person ID
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' -T ' -- Msg Transmission ID
|| LTRIM(TO_CHAR(CC_tran_type_oruz11e,'99999990'))
|| ' -C ' -- First count of rows in collection
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT,'999,990'))
|| '.');
IF T_hl7_txns.COUNT > 0 THEN -- completed ORUZ11-E txns exist
IF T_hl7_txns.COUNT > VN_parm_keep_oruz11e_count THEN -- there are more in the table than need to be kept
VI_rows_to_keep_count := VN_parm_keep_oruz11e_count; -- save how many need to be kept
END IF; -- end there are more in the table than need to be kept
END IF; -- end completed ORUZ11-E txns exist
IF VI_rows_to_keep_count > 0 THEN -- remove rows from archiving request table
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(TO_CHAR(SYSDATE,'DD-MON HH24:MI')
|| ' -P ' -- Person ID
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' -T ' -- Msg Transmission ID
|| LTRIM(TO_CHAR(CC_tran_type_oruz11e,'99999990'))
|| ' -F ' -- Final count of rows in collection
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| '.');
VC_process_msg := 'COMPLETED ORUZ11-E txn. Person ID: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Status Type ID: '
|| CC_stat_type_complete
|| ' - Msg Transmission Type ID: '
|| CC_tran_type_oruz11e;
Process_Archive_Rows(VC_process_msg); -- call INSERT/DELETE procedure
IF VB_error THEN -- error flag is set in sub-procedure if there were problems
RETURN;
END IF;
END IF; -- end remove rows from archiving request table
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Failed in transmission ID ORUZ11-E processing step. Person_id: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Transmission type ID: '
|| LTRIM(TO_CHAR(CC_tran_type_oruz11e,'99999990'))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failed in transmission ID ORUZ11-E processing step. Person_id: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Transmission type ID: '
|| LTRIM(TO_CHAR(CC_tran_type_oruz11e,'99999990'))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
Update_Last_Person_Parm(VN_previous_person_id);
RETURN;
END; -- end process ORUZ11-E txns
BEGIN -- Process Institution IDs for selected person
OPEN C_inst_id_rec;
FETCH C_inst_id_rec
BULK COLLECT INTO T_institution_ids;
CLOSE C_inst_id_rec;
IF T_institution_ids.COUNT = 0 THEN -- check if any institution ID rows exist
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('WARNING - Fetch Institution ID Rows',1,60),
PC_job_log_message => SUBSTR('No institution IDs found for Person_id '
|| VN_current_person_id
|| '.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ELSE
FOR I_inst_id IN T_institution_ids.FIRST..T_institution_ids.LAST LOOP -- loop through institution IDs
VN_institution_id := T_institution_ids(I_inst_id);
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(TO_CHAR(SYSDATE,'DD-MON HH24:MI:SS')
|| ' - Person '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Inst '
|| LTRIM(TO_CHAR(VN_institution_id,'99999990'))
|| '.');
BEGIN -- Process message statuses for selected person/institution
OPEN C_msg_status_rec;
FETCH C_msg_status_rec
BULK COLLECT INTO T_status_types;
CLOSE C_msg_status_rec;
IF T_status_types.COUNT = 0 THEN -- check if any msg status rows exist
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('WARNING - Fetch Message Status Rows',1,60),
PC_job_log_message => SUBSTR('No message statuses found for Person ID '
|| VN_current_person_id
|| ' and Institution ID '
|| VN_institution_id
|| '.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ELSE
FOR I_status_id IN T_status_types.FIRST..T_status_types.LAST LOOP -- loop through message statuses
VN_msg_status_id := T_status_types(I_status_id);
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(TO_CHAR(SYSDATE,'DD-MON HH24:MI')
|| ' -P ' -- Person ID
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' -I ' -- Institution ID
|| LTRIM(TO_CHAR(VN_institution_id,'99999990'))
|| ' -S ' -- Status code ID
|| LTRIM(TO_CHAR(VN_msg_status_id,'99999990'))
|| '.');
BEGIN -- Process message transmission type for selected person/institution/status
OPEN C_msg_transtype_rec;
FETCH C_msg_transtype_rec
BULK COLLECT INTO T_trans_types;
CLOSE C_msg_transtype_rec;
IF T_trans_types.COUNT = 0 THEN -- check if any msg transmission type rows exist
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('WARNING - Fetch Message Transmission Type Rows',1,60),
PC_job_log_message => SUBSTR('No message transmission types found for Person ID '
|| VN_current_person_id
|| ' and Institution ID '
|| VN_institution_id
|| ' and Status Type ID '
|| VN_msg_status_id
|| '.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ELSE
FOR I_transtype_id IN T_trans_types.FIRST..T_trans_types.LAST LOOP -- loop through message transmission types
VN_msg_transtype_id := T_trans_types(I_transtype_id);
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(TO_CHAR(SYSDATE,'DD-MON HH24:MI')
|| ' -P' -- Person ID
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' -I' -- Institution ID
|| LTRIM(TO_CHAR(VN_institution_id,'99999990'))
|| ' -S' -- Status code ID
|| LTRIM(TO_CHAR(VN_msg_status_id,'99999990'))
|| ' -T' -- Transmission type ID
|| LTRIM(TO_CHAR(VN_msg_transtype_id,'99999990'))
|| '.');
BEGIN -- Load HL7 txn table (Data for distinct Person ID, Inst ID, Status Type, and Transmission Type)
VI_rows_to_keep_count := 0; -- reset variable that determines how many rows to remove from archiving request table
OPEN C_hl7_txn_rec;
FETCH C_hl7_txn_rec
BULK COLLECT INTO T_hl7_txns;
CLOSE C_hl7_txn_rec;
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(TO_CHAR(SYSDATE,'DD-MON HH24:MI')
|| ' -P ' -- Person ID
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' -I ' -- Institution ID
|| LTRIM(TO_CHAR(VN_institution_id,'99999990'))
|| ' -T ' -- Msg Transmission ID
|| LTRIM(TO_CHAR(VN_msg_transtype_id,'99999990'))
|| ' -C ' -- First count of rows in collection
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT,'999,990'))
|| '.');
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Failed in completed transaction table load step. Person_id: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Institution ID: '
|| LTRIM(TO_CHAR(VN_institution_id,'99999990'))
|| ' - Status code ID: '
|| LTRIM(TO_CHAR(VN_msg_status_id,'99999990'))
|| ' - Transmission type ID: '
|| LTRIM(TO_CHAR(VN_msg_transtype_id,'99999990'))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failed in completed transaction table load step. Person_id: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Institution ID: '
|| LTRIM(TO_CHAR(VN_institution_id,'99999990'))
|| ' - Status code ID: '
|| LTRIM(TO_CHAR(VN_msg_status_id,'99999990'))
|| ' - Transmission type ID: '
|| LTRIM(TO_CHAR(VN_msg_transtype_id,'99999990'))
|| ' - Rows in collection after clean up: '
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
Update_Last_Person_Parm(VN_previous_person_id);
RETURN;
END; -- End Load HL7 txn table (Data for distinct Person ID, Inst ID, Status Type, and Transmission Type)
-- ***************************************************************************
-- * Process Status = COMPLETED (1506921)
-- * Transmission Type = QRYZ10E (1510403)
-- * ORUZ11E (1510408)
-- * ORUZ04S (1510420)
-- * ORUZ05S (1510421)
-- * ORUZ10S (1510422)
-- * ORFZ10S (1510423)
-- * ORUZ11S (1510424)
-- ***************************************************************************
IF VN_msg_status_id = CC_stat_type_complete -- Process HL7 txn table (Complete/Uncomplete)
AND VN_msg_transtype_id IN (CC_tran_type_orfz10s,
CC_tran_type_orfz11s, -- CCR 1788
CC_tran_type_oruz04s,
CC_tran_type_oruz05s,
CC_tran_type_oruz10s,
CC_tran_type_oruz11s,
CC_tran_type_qryz10e,
CC_tran_type_qryz11e) THEN -- CCR 1788
-- process completed txns (status 1506921) w/ currently defined transmission types
IF T_hl7_txns.COUNT = 0 THEN -- completed txn table count selection
-- No rows for this person/institution/status type/transmission type (this shouldn't happen)
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('WARNING - Fetch HL7 Txn Rows',1,60),
PC_job_log_message => SUBSTR('No HL7 Txns found for Person ID '
|| VN_current_person_id
|| ' and Institution ID '
|| VN_institution_id
|| ' and Status Type '
|| VN_msg_status_id
|| ' and Transmission ID '
|| VN_msg_transtype_id
|| '.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ELSIF VN_msg_transtype_id = CC_tran_type_orfz10s THEN
IF T_hl7_txns.COUNT > VN_parm_keep_orfz10s_count THEN
VI_rows_to_keep_count := VN_parm_keep_orfz10s_count;
END IF;
ELSIF VN_msg_transtype_id = CC_tran_type_orfz11s THEN -- CCR 1788 Begin
IF T_hl7_txns.COUNT > VN_parm_keep_orfz11s_count THEN
VI_rows_to_keep_count := VN_parm_keep_orfz11s_count;
END IF; --CCR 1788 End
ELSIF VN_msg_transtype_id = CC_tran_type_oruz04s THEN
IF T_hl7_txns.COUNT > VN_parm_keep_oruz04s_count THEN
VI_rows_to_keep_count := VN_parm_keep_oruz04s_count;
END IF;
ELSIF VN_msg_transtype_id = CC_tran_type_oruz05s THEN
IF T_hl7_txns.COUNT > VN_parm_keep_oruz05s_count THEN
VI_rows_to_keep_count := VN_parm_keep_oruz05s_count;
END IF;
ELSIF VN_msg_transtype_id = CC_tran_type_oruz10s THEN
IF T_hl7_txns.COUNT > VN_parm_keep_oruz10s_count THEN
VI_rows_to_keep_count := VN_parm_keep_oruz10s_count;
END IF;
ELSIF VN_msg_transtype_id = CC_tran_type_oruz11s THEN
IF T_hl7_txns.COUNT > VN_parm_keep_oruz11s_count THEN
VI_rows_to_keep_count := VN_parm_keep_oruz11s_count;
END IF;
ELSIF VN_msg_transtype_id = CC_tran_type_qryz10e THEN
IF T_hl7_txns.COUNT > VN_parm_keep_qryz10e_count THEN
VI_rows_to_keep_count := VN_parm_keep_qryz10e_count;
END IF;
ELSIF VN_msg_transtype_id = CC_tran_type_qryz11e THEN -- CCR 1788 Begin
IF T_hl7_txns.COUNT > VN_parm_keep_qryz11e_count THEN
VI_rows_to_keep_count := VN_parm_keep_qryz11e_count;
END IF; -- CCR 1788 End
END IF; -- end completed txn table count selection
IF VI_rows_to_keep_count > 0 THEN -- remove completed rows from archiving request table
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(TO_CHAR(SYSDATE,'DD-MON HH24:MI')
|| ' -P ' -- Person ID
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' -I ' -- Institution ID
|| LTRIM(TO_CHAR(VN_institution_id,'99999990'))
|| ' -T ' -- Msg Transmission ID
|| LTRIM(TO_CHAR(VN_msg_transtype_id,'99999990'))
|| ' -F ' -- Final count of rows in collection
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| '.');
VC_process_msg := 'COMPLETED non-ORUZ11-E txns. Person ID: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Institution ID: '
|| LTRIM(TO_CHAR(VN_institution_id,'99999990'))
|| ' - Status code ID: '
|| LTRIM(TO_CHAR(VN_msg_status_id,'99999990'))
|| ' - Transmission type ID: '
|| LTRIM(TO_CHAR(VN_msg_transtype_id,'99999990'));
Process_Archive_Rows(VC_process_msg); -- call INSERT/DELETE procedure
IF VB_error THEN -- error flag is set in sub-procedure if there were problems
RETURN;
END IF;
END IF; -- end remove completed rows from archiving request table
-- ***************************************************************************
-- * Process Status = ERROR (1506927)
-- * NOT_TRANS (1506926)
-- * PENDING (1506924)
-- * RETRANS (1506925)
-- * RTRAN_FAIL (1506928)
-- * WAIT_ACK (1506923)
-- * WAIT_TRAN (1506922)
-- * Transmission Type = ALL
-- ***************************************************************************
ELSIF VN_msg_status_id IN (CC_stat_type_uncomp_error, -- 1506927
CC_stat_type_uncomp_not_trans, -- 1506926
CC_stat_type_uncomp_pending, -- 1506924
CC_stat_type_uncomp_retrans, -- 1506925
CC_stat_type_uncomp_rtran_fail, -- 1506928
CC_stat_type_uncomp_wait_ack, -- 1506923
CC_stat_type_uncomp_wait_tran) THEN -- 1506922
-- process all uncompleted status txns (uncompleted status types all process the same)
IF T_hl7_txns.COUNT = 0 THEN -- uncompleted txn table count selection
-- No rows for this person/institution/status type/transmission type (this shouldn't happen)
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('WARNING - Fetch HL7 Txn Rows',1,60),
PC_job_log_message => SUBSTR('No HL7 Txns found for Person ID '
|| VN_current_person_id
|| ' and Institution ID '
|| VN_institution_id
|| ' and Status Type '
|| VN_msg_status_id
|| ' and Transmission ID '
|| VN_msg_transtype_id
|| '.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ELSE
IF T_hl7_txns(T_hl7_txns.LAST).Record_created_date <= VD_process_start_date - VN_parm_keep_uncompleted_days THEN -- check for rows to keep
-- No rows exist that are newer than the archive cutoff date, so remove the newest row from the archiving list so that it stays in the HL7 table.
VI_rows_to_keep_count := 1; -- remove the last entry in the collection table
ELSE
-- Remove all rows that are newer than the archive cutoff date from the archiving list.
-- (TRIM deletes starting with the highest indexed row in the collection so we index in reverse order [highest to lowest])
FOR I_uncomp_hl7_txns IN REVERSE T_hl7_txns.FIRST..T_hl7_txns.LAST LOOP
IF T_hl7_txns(I_uncomp_hl7_txns).Record_created_date > VD_process_start_date - VN_parm_keep_uncompleted_days THEN
VI_rows_to_keep_count := VI_rows_to_keep_count + 1; -- remove another entry in the collection table starting with the last one.
ELSE
EXIT;
END IF;
END LOOP;
END IF; -- end check for rows to keep
IF T_hl7_txns.COUNT > VI_rows_to_keep_count THEN -- rows exist that are older than the archive cutoff date.
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(TO_CHAR(SYSDATE,'DD-MON HH24:MI')
|| ' -P ' -- Person ID
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' -I ' -- Institution ID
|| LTRIM(TO_CHAR(VN_institution_id,'99999990'))
|| ' -S ' -- Status code ID
|| LTRIM(TO_CHAR(VN_msg_status_id,'99999990'))
|| ' -F ' -- Final count of rows in collection after clean up
|| LTRIM(TO_CHAR(T_hl7_txns.COUNT - VI_rows_to_keep_count,'999,990'))
|| '.');
VC_process_msg := 'UNCOMPLETED txns. Person ID: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Institution ID: '
|| LTRIM(TO_CHAR(VN_institution_id,'99999990'))
|| ' - Status code ID: '
|| LTRIM(TO_CHAR(VN_msg_status_id,'99999990'))
|| ' - Transmission type ID: '
|| LTRIM(TO_CHAR(VN_msg_transtype_id,'99999990'));
Process_Archive_Rows(VC_process_msg); -- call INSERT/DELETE procedure
IF VB_error THEN -- error flag is set in sub-procedure if there were problems
RETURN;
END IF;
END IF; -- end rows exist that are older than the archive cutoff date.
END IF; -- end uncompleted txn table count selection
END IF; -- end Process HL7 txn table (Complete/Uncomplete) (ignore any unknown status/tranmission types)
END LOOP; -- end loop through message transmission types
END IF; -- end check if any msg transmission type rows exist
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Failed to retrieve message transmission types. Person_id: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Institution ID: '
|| LTRIM(TO_CHAR(VN_institution_id,'99999990'))
|| ' - Status code ID: '
|| LTRIM(TO_CHAR(VN_msg_status_id,'99999990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failed to retrieve message transmission types. Person_id: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Institution ID: '
|| LTRIM(TO_CHAR(VN_institution_id,'99999990'))
|| ' - Status code ID: '
|| LTRIM(TO_CHAR(VN_msg_status_id,'99999990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
Update_Last_Person_Parm(VN_previous_person_id);
RETURN;
END; -- End Process message transmission type for selected person/institution/status
END LOOP; -- end loop through message statuses
END IF; -- end check if any msg status rows exist
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Failed to retrieve message status IDs. Person_id: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Institution ID: '
|| LTRIM(TO_CHAR(VN_institution_id,'99999990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failed to retrieve message status IDs. Person_id: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Institution ID: '
|| LTRIM(TO_CHAR(VN_institution_id,'99999990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
Update_Last_Person_Parm(VN_previous_person_id);
RETURN;
END; -- end process message statuses for selected person/institution
END LOOP; -- end loop through institution IDs
END IF; -- end check if any institution ID rows exist
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Failed to retrieve institution IDs. Person_id: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failed to retrieve institution IDs. Person_id: '
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
Update_Last_Person_Parm(VN_previous_person_id);
RETURN;
END; -- end process institution IDs for selected person
BEGIN -- check if stop was requested
SELECT AP.Value
INTO VN_process_control
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_ARCHIVE_CONTROL'
AND Parameter_name = 'START_STOP_PROCESS';
IF VN_process_control = 0 THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Application has cancelled the archiving process.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Number of Person_ids processed: '
|| TO_CHAR(VN_person_count,'99,999,999,990'),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
VD_log_date := SYSDATE;
-- archive row count is accumulated in the Process_Archive_Rows procedure
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Number of rows archived: '
|| TO_CHAR(VN_archive_count,'99,999,999,990'),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
Update_Last_Person_Parm(VN_previous_person_id);
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Archiving Processing Cancelled');
EXIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter START_STOP_PROCESS.'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failure in archive processing loop - Unable to retrieve parameter START_STOP_PROCESS. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
Update_Last_Person_Parm(VN_previous_person_id);
RETURN;
END; -- end check if stop was requested
EXCEPTION
WHEN NO_DATA_FOUND THEN -- all rows have been processed
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Archive Process Loop - COMPLETED',1,60),
PC_job_log_message => SUBSTR('All Person_ids have been processed.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Archive Process Loop - COMPLETED',1,60),
PC_job_log_message => SUBSTR('Number of Person_ids processed: '
|| TO_CHAR(VN_person_count,'99,999,999,990'),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Archive Process Loop - COMPLETED',1,60),
PC_job_log_message => SUBSTR('Number of rows archived: '
|| TO_CHAR(VN_archive_count,'99,999,999,990'),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Archive Processing Completed');
BEGIN
UPDATE Adr_Parameter AP
SET AP.Value = 0
WHERE Application_name = 'HL7_ARCHIVE_CONTROL'
AND Parameter_name = 'START_STOP_PROCESS';
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Unable to update parameter START_STOP_PROCESS.'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failure in archive processing loop - Unable to update parameter START_STOP_PROCESS. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
END;
Update_Last_Person_Parm(0);
EXIT;
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Failed to retrieve next Person ID. Previous Person_id: '
|| LTRIM(TO_CHAR(VN_previous_person_id,'9999999999990'))
|| ' Current Person_id'
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failed to retrieve next Person ID. Previous Person_id: '
|| LTRIM(TO_CHAR(VN_previous_person_id,'9999999999990'))
|| ' Current Person_id'
|| LTRIM(TO_CHAR(VN_current_person_id,'9999999999990'))
|| ' - Error: '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
Update_Last_Person_Parm(VN_previous_person_id);
RETURN;
END; -- end get next person_id to process
VN_previous_person_id := VN_current_person_id;
END LOOP; -- end main archive processing loop
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Archive Process Loop',1,60),
PC_job_log_message => SUBSTR('Failure in archive processing loop.'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failure in archive processing loop. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
Update_Last_Person_Parm(VN_previous_person_id);
RETURN;
END; -- end main processing block
VD_process_end_date := SYSDATE;
VN_process_time_in_secs := (VD_process_end_date - VD_process_start_date)*24*60*60;
VN_process_days := TRUNC(VN_process_time_in_secs/24/60/60);
VN_process_hours := TRUNC((VN_process_time_in_secs -
(VN_process_days*24*60*60))/60/60);
VN_process_minutes := TRUNC((VN_process_time_in_secs -
(VN_process_days*24*60*60) -
(VN_process_hours*60*60))/60);
VN_process_seconds := TRUNC(VN_process_time_in_secs -
(VN_process_days*24*60*60) -
(VN_process_hours*60*60) -
(VN_process_minutes*60));
VC_process_duration := LTRIM(TO_CHAR(VN_process_days,'9990')) || ' Days '
|| LTRIM(TO_CHAR(VN_process_hours,'90')) || ' Hrs '
|| LTRIM(TO_CHAR(VN_process_minutes,'90')) || ' Mins '
|| LTRIM(TO_CHAR(VN_process_seconds,'90')) || ' Secs';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Process Completion',1,60),
PC_job_log_message => 'Elapsed processing time: ' || VC_process_duration,
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Unknown Error',1,60),
PC_job_log_message => SUBSTR('Unknown error archiving HL7 rows.'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unknown error archiving HL7 rows. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END Hl7_Process_Archives;
/*****************************************************************************
*
* NAME: Hl7_Process_Deletes
* TYPE: Procedure
*
* DESCRIPTION
* Used to delete rows from the Hl7_Archive_Transaction_log table based
* pm the aging of the Creation_date column.
*
* PB_run_standalone Ignore DBMS_JOB logic for checking running jobs.
* Default: FALSE
*
* PB_allow_rpt_inst Allow stored procedure to be submitted in the
* DBMS_JOB queue on the ADR reporting databases
* Default: FALSE
*
*****************************************************************************
*/
PROCEDURE Hl7_Process_Deletes
(PB_run_standalone
IN BOOLEAN DEFAULT FALSE,
PB_allow_rpt_inst
IN BOOLEAN DEFAULT FALSE
)
IS
-- CONSTANTS
CC_process_name VARCHAR2(60) := 'HL7 Archiver - Delete Archived Rows';
-- VARIABLES
VB_allow_rpt_inst BOOLEAN := FALSE;
VB_run_standalone BOOLEAN := FALSE;
VC_allow_rpt_inst VARCHAR2(5) := NULL;
VC_instance_name VARCHAR2(16);
VC_process_duration VARCHAR2(50);
VC_run_standalone VARCHAR2(5) := NULL;
VD_log_date DATE;
VD_process_end_date DATE;
VD_process_start_date DATE;
VD_del_cutoff_date DATE;
VN_arch_rows_age_to_keep NUMBER := 365;
VN_delete_count NUMBER := 0;
VN_job_count NUMBER := 0;
VN_log_age_to_keep NUMBER := 180;
VN_num_rows_to_process NUMBER := 20000;
VN_process_control NUMBER := 0;
VN_process_days NUMBER;
VN_process_hours NUMBER;
VN_process_minutes NUMBER;
VN_process_seconds NUMBER;
VN_process_time_in_secs NUMBER;
VN_total_deletes_count NUMBER :=0;
TYPE TT_pk_id IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
T_pk_id TT_pk_id;
CURSOR C_hl7_arch_rec IS
SELECT Hl7_transaction_log_id
FROM Hl7_Archive_Transaction_Log
WHERE Transmission_date <= VD_del_cutoff_date + 2 -- Transmission_date may be up to 2 days newer that Record_created_date
AND Record_created_date <= VD_del_cutoff_date;
-- EXCEPTIONS
EE_DML_ERROR EXCEPTION;
PRAGMA EXCEPTION_INIT(EE_DML_ERROR, -24381);
BEGIN
DBMS_APPLICATION_INFO.SET_MODULE(Module_name => 'Hl7_Process_Deletes',
Action_name => NULL);
VD_process_start_date := SYSDATE;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Process Initiation',1,60),
PC_job_log_message => NULL,
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
-- ***************************************************************************
-- *
-- * Validate input parameters
-- *
-- ***************************************************************************
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Validating Input Parameters');
-- * Check run standalone flag
IF PB_run_standalone IS NULL
OR NOT PB_run_standalone THEN
VB_run_standalone := FALSE;
VC_run_standalone := 'FALSE'; -- used for log message, boolean can't be displayed
ELSE
VB_run_standalone := TRUE;
VC_run_standalone := 'TRUE'; -- used for log message, boolean can't be displayed
END IF;
-- * Check run on report instance flag
IF PB_allow_rpt_inst IS NULL
OR NOT PB_allow_rpt_inst THEN
VB_allow_rpt_inst := FALSE;
VC_allow_rpt_inst := 'FALSE'; -- used for log message, boolean can't be displayed
ELSE
VB_allow_rpt_inst := TRUE;
VC_allow_rpt_inst := 'TRUE'; -- used for log message, boolean can't be displayed
END IF;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Command Line Parameters',1,60),
PC_job_log_message => SUBSTR('Current job command line parameters - '
|| ' Run standalone: ' || VC_run_standalone
|| ' Run on reporting databases: ' || VC_allow_rpt_inst,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
-- ***************************************************************************
-- *
-- * Check to see if process is running on a reporting database.
-- * - If VB_allow_rpt_inst is FALSE, then it's not allowed. End the job.
-- *
-- ***************************************************************************
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Check if running on reporting DB');
BEGIN
SELECT Instance_name
INTO VC_instance_name
FROM V$instance;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Instance Name' ,1,60),
PC_job_log_message => SUBSTR('Job is running on instance ' || UPPER(VC_instance_name) || '.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
IF NOT VB_allow_rpt_inst
AND UPPER(SUBSTR(VC_instance_name,1,4)) = 'ADRR' THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Reporting Database Check',1,60),
PC_job_log_message => SUBSTR('Attempting to run on a reporting database with execution parameter'
|| ' VB_allow_rpt_inst set to FALSE. This job has been terminated.'
|| ' To run on a reporting instance, set parameter VB_allow_rpt_inst'
|| ' to TRUE and resubmit the job.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END IF;
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Reporting Database Check',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve instance name. Terminating script.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve instance name. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
-- ***************************************************************************
-- *
-- * Check to see if any other jobs of this procedure are running.
-- * - If yes, then end this job.
-- *
-- ***************************************************************************
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Check for duplicate jobs running');
SELECT COUNT(*)
INTO VN_job_count
FROM SYS.DBA_JOBS J
WHERE UPPER(J.WHAT) LIKE '%HL7_PROCESS_DELETES%';
IF VN_job_count > 1 THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Multiple Execution Check',1,60),
PC_job_log_message => SUBSTR('There is another instance of this job already in the job queue.'
|| ' Exiting job without running.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
ELSE
IF VB_run_standalone THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Execution Mode',1,60),
PC_job_log_message => SUBSTR('Starting in STANDALONE mode.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ELSE
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Execution Mode',1,60),
PC_job_log_message => SUBSTR('Starting in DBMS_JOB mode.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
END IF;
END IF;
-- ***************************************************************************
-- *
-- * Retrieve modifiable parameters
-- *
-- * If the process control parameter = 0 then the job returns control to
-- * to DBMS_JOB and waits until it is called to run again.
-- *
-- ***************************************************************************
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Fetching user parameters');
BEGIN
SELECT AP.Value
INTO VN_process_control
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_DELETE_CONTROL'
AND Parameter_name = 'START_STOP_PROCESS';
IF VN_process_control = 0 THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Process Control',1,60),
PC_job_log_message => SUBSTR('Start/Stop control flag set to STOP (0). Going back to sleep.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
ELSE
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Process Control',1,60),
PC_job_log_message => SUBSTR('Start/Stop control flag set to START (1). Delete process starting.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
END IF;
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Process Control',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter START_STOP_PROCESS.'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter START_STOP_PROCESS. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
BEGIN
SELECT AP.Value
INTO VN_log_age_to_keep
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_DELETES'
AND Parameter_name = 'OLDEST LOG FILE DAYS KEPT';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: OLDEST LOG FILE DAYS KEPT - Value: '|| VN_log_age_to_keep,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter OLDEST LOG FILE DAYS KEPT.'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter OLDEST LOG FILE DAYS KEPT. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
BEGIN
SELECT AP.Value
INTO VN_num_rows_to_process
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_DELETES'
AND Parameter_name = 'ROWS TO PROCESS';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: ROWS TO PROCESS - Value: '|| VN_num_rows_to_process,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter ROWS TO PROCESS.'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter ROWS TO PROCESS. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
BEGIN
SELECT AP.Value
INTO VN_arch_rows_age_to_keep
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_PROCESS_DELETES'
AND Parameter_name = 'OLDEST ARCHIVED HL7 DAYS NOT DELETED';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Parameter: OLDEST ARCHIVED HL7 DAYS NOT DELETED - Value: '|| VN_arch_rows_age_to_keep,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
VD_del_cutoff_date := TRUNC(VD_process_start_date) - VN_arch_rows_age_to_keep;
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - User Defined Parameters',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter OLDEST ARCHIVED HL7 DAYS NOT DELETED.'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to retrieve parameter OLDEST ARCHIVED HL7 DAYS NOT DELETED. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
END;
-- ***************************************************************************
-- *
-- * Remove outdated log and error file rows
-- *
-- ***************************************************************************
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Removing old logs and error rows');
BEGIN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Log File Cleanup',1,60),
PC_job_log_message => SUBSTR('Removing Error Logs more than '|| VN_arch_rows_age_to_keep || 'days old.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
DELETE
FROM Job_Process_Errs
WHERE Job_name = CC_process_name
AND Date1 < VD_process_start_date - VN_log_age_to_keep;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Log file cleanup',1,60),
PC_job_log_message => SUBSTR('Unable to remove rows from error log table.'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to remove rows from error log table. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
BEGIN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Log File Cleanup',1,60),
PC_job_log_message => SUBSTR('Removing Process Logs more than '|| VN_arch_rows_age_to_keep || 'days old.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
DELETE
FROM Job_Process_Logs
WHERE Job_name = CC_process_name
AND Date1 < VD_process_start_date - VN_log_age_to_keep;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Log file cleanup',1,60),
PC_job_log_message => SUBSTR('Unable to remove rows from process log table.'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unable to remove rows from process log table. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END;
-- ***************************************************************************
-- *
-- * Main processing loop
-- *
-- ***************************************************************************
BEGIN -- main processing loop block
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Processing Deletes');
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Delete Process Loop',1,60),
PC_job_log_message => SUBSTR('Starting deletion of archived HL7 rows more than '
|| VN_arch_rows_age_to_keep
|| ' days old.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
VN_total_deletes_count :=0;
LOOP -- main processing loop
OPEN C_hl7_arch_rec;
FETCH C_hl7_arch_rec
BULK COLLECT INTO T_pk_id
LIMIT VN_num_rows_to_process;
CLOSE C_hl7_arch_rec;
IF T_pk_id.COUNT = 0 THEN -- if collection table is empty, all rows processed
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Delete Process Loop - COMPLETED',1,60),
PC_job_log_message => SUBSTR('All archived HL7 rows more than '
|| VN_arch_rows_age_to_keep
|| ' days old have been deleted.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Delete Process Loop - COMPLETED',1,60),
PC_job_log_message => SUBSTR('Total number of rows deleted: '
|| TO_CHAR(VN_total_deletes_count,'999,999,999,990'),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Delete Processing Completed');
BEGIN
UPDATE Adr_Parameter AP
SET AP.Value = 0
WHERE Application_name = 'HL7_DELETE_CONTROL'
AND Parameter_name = 'START_STOP_PROCESS';
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Delete Process Loop',1,60),
PC_job_log_message => SUBSTR('Unable to update parameter START_STOP_PROCESS(1).'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failure in delete processing loop - Unable to update parameter START_STOP_PROCESS(1). '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
END;
EXIT;
ELSE -- still rows to process
BEGIN
FORALL I_pk_id IN T_pk_id.FIRST..T_pk_id.LAST SAVE EXCEPTIONS
DELETE
FROM Hl7_Archive_Transaction_Log
WHERE Hl7_Transaction_Log_id = T_pk_id(I_pk_id);
VN_delete_count := SQL%ROWCOUNT;
EXCEPTION
WHEN EE_DML_ERROR THEN
VN_delete_count := SQL%ROWCOUNT;
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Delete Process Loop',1,60),
PC_job_log_message => SUBSTR('All rows not deleted.'
|| ' - Rows in collection: '
|| LTRIM(TO_CHAR(T_pk_id.COUNT,'999,990'))
|| '. Error count: '
|| LTRIM(TO_CHAR(SQL%BULK_EXCEPTIONS.COUNT,'999,990'))
|| '. Rows attempted to delete: '
|| LTRIM(TO_CHAR(VN_delete_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => NULL,
PC_job_error_message => SUBSTR('All rows not deleted. '
|| ' - Rows in collection: '
|| LTRIM(TO_CHAR(T_pk_id.COUNT,'999,990'))
|| '. Error count: '
|| LTRIM(TO_CHAR(SQL%BULK_EXCEPTIONS.COUNT,'999,990'))
|| '. Rows attempted to delete: '
|| LTRIM(TO_CHAR(VN_delete_count,'999,990')),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
FOR I_del_err IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Delete Process Loop',1,60),
PC_job_log_message => SUBSTR('Failed DELETE row # '
|| I_del_err
|| ' occurred during iteration # '
|| SQL%BULK_EXCEPTIONS(I_del_err).ERROR_INDEX
|| ' Error message: '
|| SQLERRM(-SQL%BULK_EXCEPTIONS(I_del_err).ERROR_CODE),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(-SQL%BULK_EXCEPTIONS(I_del_err).ERROR_CODE,1,60),
PC_job_error_message => SUBSTR('Failed DELETE row # '
|| I_del_err
|| ' occurred during iteration # '
|| SQL%BULK_EXCEPTIONS(I_del_err).ERROR_INDEX
|| ' Error message: '
|| SQLERRM(-SQL%BULK_EXCEPTIONS(I_del_err).ERROR_CODE),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
END LOOP;
ROLLBACK;
BEGIN
UPDATE Adr_Parameter AP
SET AP.Value = 0
WHERE Application_name = 'HL7_DELETE_CONTROL'
AND Parameter_name = 'START_STOP_PROCESS';
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Delete Process Loop',1,60),
PC_job_log_message => SUBSTR('Unable to update parameter START_STOP_PROCESS(2).'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failure in delete processing loop - Unable to update parameter START_STOP_PROCESS(2). '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
END;
RETURN;
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Delete Process Loop',1,60),
PC_job_log_message => SUBSTR('Unknown error while deleting.'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failure in delete processing loop - Unknown error while deleting.'
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ROLLBACK;
BEGIN
UPDATE Adr_Parameter AP
SET AP.Value = 0
WHERE Application_name = 'HL7_DELETE_CONTROL'
AND Parameter_name = 'START_STOP_PROCESS';
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Delete Process Loop',1,60),
PC_job_log_message => SUBSTR('Unable to update parameter START_STOP_PROCESS(3).'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failure in delete processing loop - Unable to update parameter START_STOP_PROCESS(3). '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
END;
RETURN;
END;
IF T_pk_id.COUNT = VN_delete_count THEN -- all collection rows were deleted
COMMIT;
VN_total_deletes_count := VN_total_deletes_count + VN_delete_count;
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(TO_CHAR(SYSDATE,'DD-MON HH24:MI:SS')
|| ' - Current delete count: '
|| TO_CHAR(VN_total_deletes_count,'99,999,999,990'));
BEGIN -- get process control parameter
SELECT AP.Value
INTO VN_process_control
FROM Adr_Parameter AP
WHERE Application_name = 'HL7_DELETE_CONTROL'
AND Parameter_name = 'START_STOP_PROCESS';
IF VN_process_control = 0 THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Delete Process Loop - CANCELLED',1,60),
PC_job_log_message => SUBSTR('Application has cancelled the delete process.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Delete Process Loop - CANCELLED',1,60),
PC_job_log_message => SUBSTR('Total number of rows deleted: '
|| TO_CHAR(VN_total_deletes_count,'99,999,999,990'),1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
DBMS_APPLICATION_INFO.SET_ACTION(Action_name => 'Delete Processing Cancelled');
EXIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Delete Process Loop',1,60),
PC_job_log_message => SUBSTR('Unable to retrieve parameter START_STOP_PROCESS.'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failure in delete processing loop - Unable to retrieve parameter START_STOP_PROCESS. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END; -- end get process control parameter
ELSE -- all collection rows were not deleted
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Delete Process Loop',1,60),
PC_job_log_message => SUBSTR('Delete count does not match colletion table count.'
|| ' - Delete count: '
|| VN_delete_count
|| ' - Collection count: '
|| T_pk_id.COUNT
|| ' - Terminating execution of the job.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => NULL,
PC_job_error_message => SUBSTR('Failure in delete processing loop - Delete count does not match colletion table count.'
|| ' - Delete count: '
|| VN_delete_count
|| ' - Collection count: '
|| T_pk_id.COUNT
|| ' - Terminating execution of the job.',1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ROLLBACK;
BEGIN
UPDATE Adr_Parameter AP
SET AP.Value = 0
WHERE Application_name = 'HL7_DELETE_CONTROL'
AND Parameter_name = 'START_STOP_PROCESS';
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Delete Process Loop',1,60),
PC_job_log_message => SUBSTR('Unable to update parameter START_STOP_PROCESS(4).'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failure in delete processing loop - Unable to update parameter START_STOP_PROCESS(4). '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
END;
RETURN;
END IF; -- end all collection rows were deleted
END IF; -- end if collection table is empty, all rows processed
END LOOP; -- emd main processing loop
VD_process_end_date := SYSDATE;
VN_process_time_in_secs := (VD_process_end_date - VD_process_start_date)*24*60*60;
VN_process_days := TRUNC(VN_process_time_in_secs/24/60/60);
VN_process_hours := TRUNC((VN_process_time_in_secs -
(VN_process_days*24*60*60))/60/60);
VN_process_minutes := TRUNC((VN_process_time_in_secs -
(VN_process_days*24*60*60) -
(VN_process_hours*60*60))/60);
VN_process_seconds := TRUNC(VN_process_time_in_secs -
(VN_process_days*24*60*60) -
(VN_process_hours*60*60) -
(VN_process_minutes*60));
VC_process_duration := LTRIM(TO_CHAR(VN_process_days,'9990')) || ' Days '
|| LTRIM(TO_CHAR(VN_process_hours,'90')) || ' Hrs '
|| LTRIM(TO_CHAR(VN_process_minutes,'90')) || ' Mins '
|| LTRIM(TO_CHAR(VN_process_seconds,'90')) || ' Secs';
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('INFORMATION - Process Completion',1,60),
PC_job_log_message => 'Elapsed processing time: ' || VC_process_duration,
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Delete Process Loop',1,60),
PC_job_log_message => SUBSTR('Failure in delete processing loop.'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Failure in delete processing loop. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END; -- end main processing loop block
EXCEPTION
WHEN OTHERS THEN
VD_log_date := SYSDATE;
ADRMGT.Job_Process_Log_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_log_date => VD_log_date,
PC_job_status => SUBSTR('ERROR - Unknown Error',1,60),
PC_job_log_message => SUBSTR('Unknown error processing HL7 deletions.'
|| ' Terminating execution of the job.'|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
ADRMGT.Job_Process_Err_Sp(PC_job_name => SUBSTR(CC_process_name,1,60),
PD_job_error_date => VD_log_date,
PC_job_error_code => SUBSTR(SQLCODE,1,60),
PC_job_error_message => SUBSTR('Unknown error processing HL7 deletions. '
|| SQLERRM,1,2000),
PD_date1 => VD_process_start_date,
PC_text1 => SUBSTR('Date1 column contains the daily process start date',1,255));
RETURN;
END Hl7_Process_Deletes;
END Hl7_Archive_Pkg;
/
GRANT EXECUTE ON ADR.HL7_ARCHIVE_PKG TO EEATUSR;
GRANT EXECUTE ON ADR.HL7_ARCHIVE_PKG TO EEUSR;
DROP PACKAGE BODY ADR.IAM_UTIL_PKG;
CREATE OR REPLACE PACKAGE BODY ADR.IAM_UTIL_PKG
AS
PROCEDURE USERS_IAM_INSERT_SP(
p_USERNAME IN USERS.USERNAME%TYPE,
p_LAST_NAME IN USERS.LAST_NAME%TYPE,
p_FIRST_NAME IN USERS.FIRST_NAME%TYPE,
p_MIDDLE_NAME IN USERS.MIDDLE_NAME%TYPE,
p_STD_INSTITUTION_ID IN STD_INSTITUTION.ID%TYPE,
p_JOB_TITLE IN USERS.JOB_TITLE%TYPE,
p_PASSWORD IN USERS.PASSWORD%TYPE,
p_ACCOUNT_EXPIRE_DATE IN USERS.ACCOUNT_EXPIRE_DATE%TYPE,
p_PASSWORD_EXPIRE_DATE IN USERS.PASSWORD_EXPIRE_DATE%TYPE,
p_AGREEMENT_SIGNATURE_CODE IN USERS.AGREEMENT_SIGNATURE_CODE%TYPE,
p_PASSWORD_CHANGE_DATE IN USERS.PASSWORD_CHANGE_DATE%TYPE,
p_PASSWORD_CREATE_DATE IN USERS.PASSWORD_CREATE_DATE%TYPE,
p_INACTIVE_FLAG IN USERS.INACTIVE_FLAG%TYPE,
p_NUMBER_OF_LOGIN_ATTEMPTS IN USERS.NUMBER_OF_LOGIN_ATTEMPTS%TYPE,
p_SIGNATURE_VERIFIED_IND IN USERS.SIGNATURE_VERIFIED_IND%TYPE,
p_ROLES IN VARCHAR2
) IS
lb_cnt integer;
la_Tab_Str IAM_UTIL_PKG.varchar2_table;
lo_Val VARCHAR2(1000);
lo_userid NUMBER;
lo_user_role_id number;
BEGIN
Select TRANSACTION_S.NEXTVAL
INTO lo_userid
FROM dual;
INSERT INTO USERS(USERID
,USERNAME
,LAST_NAME
,FIRST_NAME
,MIDDLE_NAME
,STD_INSTITUTION_ID
,JOB_TITLE
,PASSWORD
,ACCOUNT_EXPIRE_DATE
,PASSWORD_EXPIRE_DATE
,AGREEMENT_SIGNATURE_CODE
,PASSWORD_CHANGE_DATE
,PASSWORD_CREATE_DATE
,INACTIVE_FLAG
,NUMBER_OF_LOGIN_ATTEMPTS
,SIGNATURE_VERIFIED_IND
,RECORD_CREATED_BY
,RECORD_CREATED_DATE
,RECORD_MODIFIED_BY
,RECORD_MODIFIED_DATE
,RECORD_MODIFIED_COUNT)
VALUES
(lo_userid
, p_USERNAME
, p_LAST_NAME
, p_FIRST_NAME
, p_MIDDLE_NAME
, p_STD_INSTITUTION_ID
, p_JOB_TITLE
, p_PASSWORD
, p_ACCOUNT_EXPIRE_DATE
, p_PASSWORD_EXPIRE_DATE
, p_AGREEMENT_SIGNATURE_CODE
, SYSDATE
, p_PASSWORD_CREATE_DATE
, p_INACTIVE_FLAG
, p_NUMBER_OF_LOGIN_ATTEMPTS
, p_SIGNATURE_VERIFIED_IND
, USER
, SYSDATE
, USER
, SYSDATE
, 0);
IF (p_ROLES IS NOT NULL)
THEN
IAM_UTIL_PKG.delimstring_to_table (p_ROLES,la_Tab_Str,lb_cnt);
FOR i IN 1 .. lb_cnt LOOP
Select TRANSACTION_S.NEXTVAL
INTO lo_user_role_id
FROM dual;
lo_Val := REPLACE(la_Tab_Str(i), '"', '');
INSERT INTO USER_ROLES(USER_ROLE_ID
,USERID
,ROLE_ID
,RECORD_CREATED_BY
, RECORD_CREATED_DATE
,RECORD_MODIFIED_BY
,RECORD_MODIFIED_DATE
,RECORD_MODIFIED_COUNT)
VALUES ( lo_user_role_id
, lo_userid
, (SELECT ROLE_ID FROM ROLES WHERE ROLE_NAME=lo_Val)
, USER
, SYSDATE
, USER
, SYSDATE
, 0 );
END LOOP;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE_APPLICATION_ERROR(-20900, 'Insert Error - ' || SUBSTR(SQLERRM,1,2000));
END USERS_IAM_INSERT_SP;
PROCEDURE USERS_IAM_UPDATE_SP
(p_USERNAME IN USERS.USERNAME%TYPE,
p_LAST_NAME IN USERS.LAST_NAME%TYPE,
p_FIRST_NAME IN USERS.FIRST_NAME%TYPE,
p_MIDDLE_NAME IN USERS.MIDDLE_NAME%TYPE,
p_STD_INSTITUTION_ID IN STD_INSTITUTION.ID%TYPE,
p_JOB_TITLE IN USERS.JOB_TITLE%TYPE,
p_PASSWORD IN USERS.PASSWORD%TYPE,
p_ACCOUNT_EXPIRE_DATE IN USERS.ACCOUNT_EXPIRE_DATE%TYPE,
p_PASSWORD_EXPIRE_DATE IN USERS.PASSWORD_EXPIRE_DATE%TYPE,
p_AGREEMENT_SIGNATURE_CODE IN USERS.AGREEMENT_SIGNATURE_CODE%TYPE,
p_PASSWORD_CHANGE_DATE IN USERS.PASSWORD_CHANGE_DATE%TYPE,
p_PASSWORD_CREATE_DATE IN USERS.PASSWORD_CREATE_DATE%TYPE,
p_INACTIVE_FLAG IN USERS.INACTIVE_FLAG%TYPE,
p_NUMBER_OF_LOGIN_ATTEMPTS IN USERS.NUMBER_OF_LOGIN_ATTEMPTS%TYPE,
p_SIGNATURE_VERIFIED_IND IN USERS.SIGNATURE_VERIFIED_IND%TYPE,
p_ROLES IN VARCHAR2
) IS
lb_cnt integer;
la_Tab_Str IAM_UTIL_PKG.varchar2_table;
lo_Val VARCHAR2(1000);
lo_Val1 VARCHAR2(1000);
l_exists INTEGER;
r_exists INTEGER;
lo_user_role_id Number;
lo_userid Number;
Username_not_found EXCEPTION;
PRAGMA EXCEPTION_INIT(Username_not_found, -20905);
BEGIN
SELECT USERID
INTO lo_userid
FROM USERS
WHERE USERNAME = p_USERNAME;
UPDATE USERS SET LAST_NAME = p_LAST_NAME
, FIRST_NAME = p_FIRST_NAME
, MIDDLE_NAME = p_MIDDLE_NAME
, STD_INSTITUTION_ID = p_STD_INSTITUTION_ID
, JOB_TITLE = p_JOB_TITLE
, PASSWORD = p_PASSWORD
, ACCOUNT_EXPIRE_DATE = p_ACCOUNT_EXPIRE_DATE
, PASSWORD_EXPIRE_DATE = p_PASSWORD_CREATE_DATE
, AGREEMENT_SIGNATURE_CODE = p_AGREEMENT_SIGNATURE_CODE
, PASSWORD_CHANGE_DATE = p_PASSWORD_CHANGE_DATE
, PASSWORD_CREATE_DATE = p_PASSWORD_CREATE_DATE
, INACTIVE_FLAG = p_INACTIVE_FLAG
, NUMBER_OF_LOGIN_ATTEMPTS = p_NUMBER_OF_LOGIN_ATTEMPTS
, SIGNATURE_VERIFIED_IND = p_SIGNATURE_VERIFIED_IND
, RECORD_MODIFIED_BY = USER
, RECORD_MODIFIED_DATE = SYSDATE
, RECORD_MODIFIED_COUNT = RECORD_MODIFIED_COUNT + 1
WHERE USERID = lo_userid;
IF SQL%ROWCOUNT = 0 THEN
RAISE Username_not_found;
END IF;
IF p_ROLES IS NULL THEN
DELETE FROM USER_ROLES WHERE USERID = lo_userid;
ELSE
lo_Val1 := REPLACE(p_ROLES, '"', '');
SELECT COUNT(*)
INTO r_exists
FROM USER_ROLES
WHERE USERID = lo_userid
AND ROLE_ID NOT IN (SELECT ROLE_ID FROM ROLES WHERE ROLE_NAME IN (lo_Val1) );
IF r_exists >= 1 THEN
DELETE FROM USER_ROLES
WHERE USERID = lo_userid
AND ROLE_ID NOT IN (SELECT ROLE_ID FROM ROLES WHERE ROLE_NAME IN (lo_Val1) ) ;
END IF;
IAM_UTIL_PKG.delimstring_to_table (p_ROLES,la_Tab_Str,lb_cnt);
FOR i IN 1 .. lb_cnt LOOP
lo_Val := REPLACE(la_Tab_Str(i), '"', '');
SELECT COUNT(*)
INTO l_exists
FROM USER_ROLES
WHERE USERID = lo_userid AND ROLE_ID = (SELECT ROLE_ID FROM ROLES WHERE ROLE_NAME IN (lo_Val) );
IF l_exists != 1 THEN
Select TRANSACTION_S.NEXTVAL
INTO lo_user_role_id
FROM dual;
INSERT INTO USER_ROLES(USER_ROLE_ID
,USERID
,ROLE_ID
,RECORD_CREATED_BY
,RECORD_CREATED_DATE
,RECORD_MODIFIED_BY
,RECORD_MODIFIED_DATE
,RECORD_MODIFIED_COUNT)
VALUES ( lo_user_role_id
, lo_userid
, (SELECT ROLE_ID FROM ROLES WHERE ROLE_NAME=lo_Val)
, USER
, SYSDATE
, USER
, SYSDATE
, 0);
END IF;
END LOOP;
END IF;
COMMIT;
EXCEPTION
WHEN Username_not_found THEN
ROLLBACK;
RAISE_APPLICATION_ERROR(-20905, 'Username not found');
WHEN NO_DATA_FOUND THEN
ROLLBACK;
RAISE_APPLICATION_ERROR(-20904, 'Unable to retrieve USERID');
WHEN OTHERS THEN
ROLLBACK;
RAISE_APPLICATION_ERROR(-20901, 'Update Error - ' || SUBSTR(SQLERRM,1,2000));
END USERS_IAM_UPDATE_SP;
PROCEDURE USERS_IAM_DELETE_SP(
p_USERNAME IN USERS.USERNAME%TYPE
) IS
Username_not_found EXCEPTION;
PRAGMA EXCEPTION_INIT(Username_not_found, -20905);
BEGIN
UPDATE USERS SET INACTIVE_FLAG = 1
, INACTIVE_DATE = SYSDATE
, RECORD_MODIFIED_BY = USER
, RECORD_MODIFIED_DATE = SYSDATE
, RECORD_MODIFIED_COUNT = RECORD_MODIFIED_COUNT + 1
WHERE USERNAME = p_USERNAME;
IF SQL%ROWCOUNT = 0 THEN
RAISE Username_not_found;
END IF;
COMMIT;
EXCEPTION
WHEN Username_not_found THEN
ROLLBACK;
RAISE_APPLICATION_ERROR(-20905, 'Username not found');
WHEN OTHERS THEN
ROLLBACK;
RAISE_APPLICATION_ERROR(-20902, 'Delete Error - ' || SUBSTR(SQLERRM,1,2000));
END USERS_IAM_DELETE_SP;
PROCEDURE delimstring_to_table
( p_delimstring IN VARCHAR2
, p_table OUT varchar2_table
, p_nfields OUT INTEGER
, p_delim IN VARCHAR2 DEFAULT ','
)
IS
v_string VARCHAR2(32767) := p_delimstring;
v_nfields PLS_INTEGER := 1;
v_table varchar2_table;
v_delimpos PLS_INTEGER := INSTR(p_delimstring, p_delim);
v_delimlen PLS_INTEGER := LENGTH(p_delim);
BEGIN
WHILE v_delimpos > 0
LOOP
v_table(v_nfields) := SUBSTR(v_string,1,v_delimpos-1);
v_string := SUBSTR(v_string,v_delimpos+v_delimlen);
v_nfields := v_nfields+1;
v_delimpos := INSTR(v_string, p_delim);
END LOOP;
v_table(v_nfields) := v_string;
p_table := v_table;
p_nfields := v_nfields;
END delimstring_to_table;
PROCEDURE table_to_delimstring
( p_table IN varchar2_table
, p_delimstring OUT VARCHAR2
, p_delim IN VARCHAR2 DEFAULT ','
)
IS
v_nfields PLS_INTEGER := p_table.COUNT;
v_string VARCHAR2(32767);
BEGIN
FOR i IN 1..v_nfields
LOOP
v_string := v_string || p_table(i);
IF i != v_nfields THEN
v_string := v_string || p_delim;
END IF;
END LOOP;
p_delimstring := v_string;
END table_to_delimstring;
END IAM_UTIL_PKG;
/
CREATE OR REPLACE PUBLIC SYNONYM IAM_UTIL_PKG FOR ADR.IAM_UTIL_PKG;
GRANT EXECUTE ON ADR.IAM_UTIL_PKG TO IAMUSR;
DROP PACKAGE BODY ADR.MEC_PERIOD_PKG;
CREATE OR REPLACE PACKAGE BODY ADR.MEC_PERIOD_PKG
AS
FUNCTION Calc_Exec_time (v_start_dt DATE)
RETURN VARCHAR
AS
BEGIN
RETURN ' Duration: '
|| ( LTRIM (TO_CHAR (TRUNC ( (SYSDATE - v_start_dt) * 24), '00'))
|| ' Hrs '
|| LTRIM (TO_CHAR (TRUNC ( ( ( (SYSDATE - v_start_dt) * 24) - TRUNC ( ( (SYSDATE - v_start_dt) * 24))) * 60), '00'))
|| ' Mins '
|| LTRIM (
TO_CHAR (TRUNC ( ( ( (SYSDATE - v_start_dt) * 24 * 60) - TRUNC ( ( (SYSDATE - v_start_dt) * 24 * 60))) * 60), '00'))
|| ' Secs');
END Calc_Exec_time;
/***************************************************************************
DESCRIPTION
WRAPPER_JOB_PROCESS_LOG_SP procedure for logging INFO, WARN and ERROR into table.
******************************************************************************/
PROCEDURE WRAPPER_JOB_PROCESS_LOG_SP (P_JOB_STATUS VARCHAR2, P_JOB_LOG_MESSAGE VARCHAR2)
AS
BEGIN
ADRMGT.Job_Process_Log_Sp (PC_job_name => SUBSTR (g_job_name, 1, 59),
PD_job_log_date => SYSDATE,
PC_job_status => SUBSTR (P_JOB_STATUS, 1, 59),
PC_job_log_message => SUBSTR (P_JOB_LOG_MESSAGE, 1, 1980));
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ( SQLERRM
|| ' : '
|| DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
END WRAPPER_JOB_PROCESS_LOG_SP;
/***************************************************************************
DESCRIPTION
Procedure does main logic of inserting the data with all business logic.
******************************************************************************/
PROCEDURE FINAL_LOADER_MEC_PERIOD (p_future_lower_bound NUMBER)
AS
v_rec_cnt INTEGER;
v_start_dt DATE;
BEGIN
g_job_name :=
g_pkg_name
|| '.FINAL_LOADER_MEC_PERIOD';
v_start_dt := SYSDATE;
--- All below STEPS starting from 3 through 6 happens in one transaction.
--STEP 3: Delete last inserted start date that doesn't have a matching end date.
DELETE FROM MEC_PERIOD_NEW m
WHERE EXISTS
(SELECT 1
FROM STG_MEC_PERIOD f
WHERE f.Person_id = m.Person_id -- Added fix WI-321159
AND m.MEC_END_DATE IS NULL AND f.DERVD_MEC_END_DATE IS NOT NULL);
v_rec_cnt := SQL%ROWCOUNT;
WRAPPER_JOB_PROCESS_LOG_SP ('INFO',
'STEP 3 - LOADER: (DELETE) MEC_PERIOD_NEW v_rec_cnt: '
|| v_rec_cnt
|| Calc_Exec_time (v_start_dt));
v_start_dt := SYSDATE;
--STEP 4: insert final data set both incremental and initial loads
INSERT INTO MEC_PERIOD_NEW (MEC_PERIOD_ID,
PERSON_ID,
MEC_START_DATE,
MEC_END_DATE,
RECORD_CREATED_BY,
RECORD_CREATED_DATE,
RECORD_MODIFIED_BY,
RECORD_MODIFIED_DATE,
RECORD_MODIFIED_COUNT)
SELECT s.MEC_PERIOD_ID,
s.PERSON_ID,
s.DERVD_MEC_START_DATE,
s.DERVD_MEC_END_DATE,
g_pkg_name RECORD_CREATED_BY,
SYSDATE RECORD_CREATED_DATE,
g_pkg_name RECORD_MODIFIED_BY,
SYSDATE RECORD_MODIFIED_DATE,
0 RECORD_MODIFIED_COUNT
FROM STG_MEC_PERIOD s,
-- Added fix WI-321159
(SELECT MEC_PERIOD_ID FROM STG_MEC_PERIOD
MINUS
SELECT MEC_PERIOD_ID FROM MEC_PERIOD_NEW) t
WHERE s.MEC_PERIOD_ID = t.MEC_PERIOD_ID;
v_rec_cnt := SQL%ROWCOUNT;
g_final_rec_cnt := v_rec_cnt;
WRAPPER_JOB_PROCESS_LOG_SP ('INFO',
'STEP 4 - LOADER: (INSERT) MEC_PERIOD_NEW v_rec_cnt: '
|| v_rec_cnt
|| Calc_Exec_time (v_start_dt));
v_start_dt := SYSDATE;
--STEP 5: Update / insert max(LAST_ENROLL_DETERM_H_ID) for each person id for use in next cycle run
MERGE INTO MEC_PERIOD_LAST_HIST_NEW d
USING ( SELECT MAX (MEC_PERIOD_ID) LAST_ENROLL_DETERM_H_ID, person_id
FROM STG_MEC_PERIOD
GROUP BY person_id) s
ON (d.person_id = s.person_id)
WHEN MATCHED
THEN
UPDATE SET d.LAST_ENROLL_DETERM_H_ID = s.LAST_ENROLL_DETERM_H_ID, STATUS = 'Y'
WHERE d.LAST_ENROLL_DETERM_H_ID < s.LAST_ENROLL_DETERM_H_ID
WHEN NOT MATCHED
THEN
INSERT (PERSON_ID, LAST_ENROLL_DETERM_H_ID, STATUS)
VALUES (s.PERSON_ID, s.LAST_ENROLL_DETERM_H_ID, 'Y');
v_rec_cnt := SQL%ROWCOUNT;
WRAPPER_JOB_PROCESS_LOG_SP ('INFO',
'STEP 5 - METADATA: (MERGE) MEC_PERIOD_LAST_HIST_NEW v_rec_cnt: '
|| v_rec_cnt
|| Calc_Exec_time (v_start_dt));
v_start_dt := SYSDATE;
--STEP 6: update lower bound for tomorrow with p_future_lower_bound
UPDATE ADRMGT.ADR_PARAMETER
SET VALUE = p_future_lower_bound, RECORD_MODIFIED_BY = SUBSTR (g_job_name, 1, 29), RECORD_MODIFIED_DATE = SYSDATE
WHERE APPLICATION_NAME = 'ACA_MEC'
AND UPPER (PARAMETER_NAME) = g_param_name_for_lower_bound
AND INACTIVE_FLAG = 'N'
AND TO_NUMBER (VALUE) < p_future_lower_bound;
v_rec_cnt := SQL%ROWCOUNT;
COMMIT;
-- Log correctly based on the above update
IF v_rec_cnt > 0
THEN
WRAPPER_JOB_PROCESS_LOG_SP ('INFO',
'STEP 6a - METADATA: (UPDATE) ADR_PARAMETER.VALUE (future_lower_bound) from: '
|| g_current_lower_bound
|| ' to: '
|| p_future_lower_bound
|| Calc_Exec_time (v_start_dt));
ELSE
WRAPPER_JOB_PROCESS_LOG_SP ('INFO',
'STEP 6a - METADATA: (NO-UPDATE) ADR_PARAMETER.VALUE (future_lower_bound) remains same: '
|| g_current_lower_bound);
END IF;
END FINAL_LOADER_MEC_PERIOD;
/***************************************************************************
DESCRIPTION
Update the ADR_PARAMETER table with lower bounds for next run
******************************************************************************/
PROCEDURE PREP_WORK_MEC_PERIOD (p_upper_bound NUMBER, p_multi_batch_flg BOOLEAN)
AS
v_rec_cnt INTEGER;
v_start_dt DATE;
v_future_lower_bound INTEGER;
BEGIN
g_job_name :=
g_pkg_name
|| '.PREP_WORK_MEC_PERIOD';
v_start_dt := SYSDATE;
--STEP 1: PREP-DATA FILTERATION for processing daily incremental and inital loads.
--Build person_id start and end dates with ranking correctly for use in the next steps
-- start and end dates shall have thier respective records and they are mutual exclusive;
-- A record with start dates shall not have end date and vice-versa.
INSERT INTO STG_MEC_PERIOD_ENRMNT_DTRM_H (ENROLLMENT_DETERMINATION_H_ID,
PERSON_ID,
DERVD_MEC_START_DATE,
DERVD_MEC_END_DATE,
current_rank)
SELECT Enrollment_determination_h_id,
h.Person_id,
CASE WHEN STD_ENROLLMENTSTATUS_ID = 1504142 THEN NVL (Enrollment_start_date, Record_created_date) END dervd_MEC_START_DATE,
CASE
WHEN STD_ENROLLMENTSTATUS_ID IN (1504151, -- Rejected
1504152, -- Rejected
1504153, -- Rejected
1504154, -- Rejected
1504162 -- Rejected
)
THEN
Record_modified_date
WHEN STD_ENROLLMENTSTATUS_ID <> 1504142
THEN
NVL (Enrollment_end_date, Record_modified_date)
END
dervd_MEC_END_DATE,
DENSE_RANK ()
OVER (PARTITION BY h.Person_id
ORDER BY
Record_created_date,
DECODE (transaction_type_code, 'I', 1, 'U', 2, 'D', 3, transaction_type_code), -- WI 231441 CSW
Record_modified_date, -- WI 234731 CSW
Enrollment_determination_h_id ASC NULLS LAST)
current_rank
FROM Enrollment_Determination_H h, STG_MEC_PERIOD_PERSON_ID prsn
WHERE h.person_id = prsn.person_id
AND Std_enrollmentstatus_id IN (1504142, -- Verified
1504141, -- Unverified
1504144, -- Rejected
1504146, -- Deceased
1504147, -- Cancelled/Declined
1504149, -- Pending
1504150, -- Not Eligible
1504151, -- Rejected
1504152, -- Rejected
1504153, -- Rejected
1504154, -- Rejected
1504155, -- Pending; No Eligibility Code
1504157, -- Pending; Eligibility Status is Unverified
1504158, -- Pending; Other
1504159, -- Pending; Other
1504160, -- Not Eligible
1504162, -- Rejected
1504163 -- Not Applicable
);
v_rec_cnt := SQL%ROWCOUNT;
WRAPPER_JOB_PROCESS_LOG_SP ('INFO',
'STEP 1 - PREP: (INSERT) STG_MEC_PERIOD_ENRMNT_DTRM_H v_rec_cnt: '
|| v_rec_cnt
|| Calc_Exec_time (v_start_dt));
v_start_dt := SYSDATE;
IF v_rec_cnt > 0
THEN
--STEP 2: Apply Business Logic: by re-aligning start and end dates correctly for each person_id
INSERT INTO STG_MEC_PERIOD (MEC_PERIOD_ID,
PERSON_ID,
DERVD_MEC_START_DATE,
DERVD_MEC_END_DATE)
SELECT fq.Enrollment_determination_h_id MEC_PERIOD_ID,
--MAX (Enrollment_determination_h_id) MEC_PERIOD_ID,
fq.person_id,
fq.dervd_MEC_START_DATE,
fq.dervd_MEC_END_DATE
FROM (SELECT CASE
WHEN end_dte.Enrollment_determination_h_id > start_dte.Enrollment_determination_h_id
THEN
end_dte.Enrollment_determination_h_id
WHEN end_dte.Enrollment_determination_h_id < start_dte.Enrollment_determination_h_id
THEN
start_dte.Enrollment_determination_h_id
WHEN end_dte.Enrollment_determination_h_id IS NULL
THEN
start_dte.Enrollment_determination_h_id
END
Enrollment_determination_h_id,
start_dte.person_id,
start_dte.dervd_MEC_START_DATE,
end_dte.dervd_MEC_END_DATE,
start_dte.current_rank start_dte_current_rank,
end_dte.current_rank end_dte_current_rank
FROM (SELECT Enrollment_determination_h_id,
person_id,
dervd_MEC_START_DATE,
prev_rank,
current_rank,
NEXT_rank
FROM (SELECT Enrollment_determination_h_id,
Person_id,
dervd_MEC_START_DATE,
LAG (current_rank, 1, NULL)
OVER (PARTITION BY Person_id ORDER BY Person_id, current_rank ASC NULLS LAST)
prev_rank,
current_rank,
LEAD (current_rank, 1, NULL)
OVER (PARTITION BY Person_id ORDER BY Person_id, current_rank ASC NULLS LAST)
NEXT_rank
FROM (SELECT *
FROM STG_MEC_PERIOD_ENRMNT_DTRM_H
WHERE dervd_MEC_START_DATE IS NOT NULL))
--below where condition is remove consecutive similar records
WHERE current_rank <> NVL (prev_rank, -1) + 1) start_dte
LEFT OUTER JOIN
(SELECT Enrollment_determination_h_id,
person_id,
dervd_MEC_END_DATE,
prev_rank,
current_rank,
NEXT_rank
FROM (SELECT Enrollment_determination_h_id,
Person_id,
dervd_MEC_END_DATE,
LAG (current_rank, 1, NULL)
OVER (PARTITION BY Person_id ORDER BY Person_id, current_rank ASC NULLS LAST)
prev_rank,
current_rank,
LEAD (current_rank, 1, NULL)
OVER (PARTITION BY Person_id ORDER BY Person_id, current_rank ASC NULLS LAST)
NEXT_rank
FROM (SELECT *
FROM STG_MEC_PERIOD_ENRMNT_DTRM_H
WHERE dervd_MEC_END_DATE IS NOT NULL))
--below where condition is remove consecutive similar records
WHERE current_rank <> NVL (prev_rank, -1) + 1) end_dte
-- The below condition is very critical in aligning the start and end dates correctly.
ON ( start_dte.Person_id = end_dte.Person_id
AND end_dte.current_rank BETWEEN start_dte.current_rank AND NVL (end_dte.next_rank, end_dte.current_rank)
AND NVL (end_dte.prev_rank, 1) <= start_dte.current_rank)) fq
-- outer join is to only consider the new records plus open ended records with no end dates
LEFT OUTER JOIN MEC_PERIOD_LAST_HIST_NEW mx ON (fq.person_id = mx.person_id)
WHERE fq.Enrollment_Determination_h_id >= NVL (mx.LAST_ENROLL_DETERM_H_ID, 0)
OR (dervd_MEC_end_DATE IS NULL AND fq.Enrollment_Determination_h_id <= NVL (mx.LAST_ENROLL_DETERM_H_ID, 0))
-- Added fix WI-321159
OR ( (dervd_MEC_start_DATE IS NOT NULL AND dervd_MEC_end_DATE IS NOT NULL)
AND fq.Enrollment_Determination_h_id <= NVL (mx.LAST_ENROLL_DETERM_H_ID, 0));
-- GROUP BY person_id, dervd_MEC_START_DATE, dervd_MEC_END_DATE;
v_rec_cnt := SQL%ROWCOUNT;
WRAPPER_JOB_PROCESS_LOG_SP ('INFO',
'STEP 2a - PREP: (INSERT) STG_MEC_PERIOD v_rec_cnt: '
|| v_rec_cnt
|| Calc_Exec_time (v_start_dt));
v_start_dt := SYSDATE;
-- Below commit is used release the temparory space used by global temprary table : STG_MEC_PERIOD_ENRMNT_DTRM_H
-- Data in STG_MEC_PERIOD is preserved for use by below steps 3 through 6
COMMIT;
IF NOT p_multi_batch_flg
THEN
-- Get the future lower bound for the DELTA only.
SELECT NVL (MIN (MEC_PERIOD_ID), 0)
INTO v_future_lower_bound
FROM STG_MEC_PERIOD s LEFT OUTER JOIN MEC_PERIOD_LAST_HIST_NEW mx ON (s.person_id = mx.person_id)
WHERE s.MEC_PERIOD_ID > NVL (mx.LAST_ENROLL_DETERM_H_ID, 0);
WRAPPER_JOB_PROCESS_LOG_SP ('INFO',
'STEP 2b - METADATA: (COLLECT) future_lower_bound from STG_MEC_PERIOD '
|| v_future_lower_bound
|| Calc_Exec_time (v_start_dt));
ELSE
v_future_lower_bound := g_current_lower_bound;
WRAPPER_JOB_PROCESS_LOG_SP ('INFO',
'STEP 2b - METADATA: (INITIAL-COLLECT) No change to future_lower_bound ('
|| v_future_lower_bound
|| ') since it is in INTIAL loading');
END IF;
END IF;
-- Call the final inserter to MEC_PERIOD, if there is any record found
-- You may have few records in STG_MEC_PERIOD and if v_future_lower_bound=0; this means there is nothing to insert in the final MEC_PERIOD_NEW table
-- so we try avoid going to the FINAL_LOADER_MEC_PERIOD
IF v_rec_cnt > 0 AND v_future_lower_bound > 0
THEN
FINAL_LOADER_MEC_PERIOD (v_future_lower_bound);
ELSE
WRAPPER_JOB_PROCESS_LOG_SP ('INFO',
'STEP NOTHING_TO_PROCESS STG_MEC_PERIOD insert count: '
|| v_rec_cnt
|| ' and final insert into MEC_PERIOD_NEW is: '
|| v_future_lower_bound);
END IF;
IF p_multi_batch_flg
THEN
v_start_dt := SYSDATE;
UPDATE MEC_PERIOD_LAST_HIST_NEW
SET STATUS = 'Y'
WHERE PERSON_ID IN (SELECT PERSON_ID
FROM STG_MEC_PERIOD_PERSON_ID);
v_rec_cnt := SQL%ROWCOUNT;
COMMIT;
WRAPPER_JOB_PROCESS_LOG_SP ('INFO',
'STEP 6b - METADATA: (INITIAL-UPDATE) MEC_PERIOD_LAST_HIST_NEW.STATUS = Y v_rec_cnt: '
|| v_rec_cnt
|| Calc_Exec_time (v_start_dt));
END IF;
EXCEPTION
WHEN OTHERS
THEN
WRAPPER_JOB_PROCESS_LOG_SP ('ERROR',
SQLERRM
|| ' : '
|| DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
ROLLBACK;
END PREP_WORK_MEC_PERIOD;
/***************************************************************************
DESCRIPTION
Main procedure that shall be called by the DBMS_JOBS to process MEC_PERIOD
******************************************************************************/
PROCEDURE KICK_OFF_MEC_PERIOD
AS
v_multi_batch_flg BOOLEAN := FALSE;
v_loading_type VARCHAR (60);
v_misc_text VARCHAR (300);
v_transition_text VARCHAR (300);
v_tobe_process_cnt INTEGER := 0;
v_upper_bound NUMBER;
v_start_dt DATE;
v_batch_size INTEGER;
v_job_number NUMBER;
v_rec_cnt INTEGER;
BEGIN
g_job_name :=
g_pkg_name
|| '.KICK_OFF_MEC_PERIOD';
v_start_dt := SYSDATE;
SELECT TO_NUMBER (VALUE)
INTO g_current_lower_bound
FROM ADRMGT.ADR_PARAMETER
WHERE APPLICATION_NAME = 'ACA_MEC' AND UPPER (PARAMETER_NAME) = g_param_name_for_lower_bound AND INACTIVE_FLAG = 'N';
SELECT UPPER (VALUE)
INTO v_loading_type
FROM ADRMGT.ADR_PARAMETER
WHERE APPLICATION_NAME = 'ACA_MEC' AND UPPER (PARAMETER_NAME) = 'MEC_PERIOD_LOAD_TYPE' AND INACTIVE_FLAG = 'N';
WRAPPER_JOB_PROCESS_LOG_SP ('INFO',
'STARTED: current_lower_bound: '
|| g_current_lower_bound
|| ' : v_loading_type : '
|| v_loading_type);
IF v_loading_type = 'INITIAL'
THEN
SELECT TO_NUMBER (VALUE)
INTO v_batch_size
FROM ADRMGT.ADR_PARAMETER
WHERE APPLICATION_NAME = 'ACA_MEC' AND UPPER (PARAMETER_NAME) = 'MEC_PERIOD_BATCH_SIZE' AND INACTIVE_FLAG = 'N';
SELECT COUNT (*)
INTO v_tobe_process_cnt
FROM MEC_PERIOD_LAST_HIST_NEW
WHERE STATUS = 'N';
IF v_tobe_process_cnt > 0
THEN
-- Need to catch up with lot of records in more than one batch. This is mainly valid for the initial load
v_multi_batch_flg := TRUE;
INSERT INTO STG_MEC_PERIOD_PERSON_ID (PERSON_ID)
SELECT PERSON_ID
FROM MEC_PERIOD_LAST_HIST_NEW
WHERE STATUS = 'N' AND ROWNUM < v_batch_size;
v_rec_cnt := SQL%ROWCOUNT;
v_misc_text :=
' v_batch_size : '
|| v_batch_size
|| ' To Be Processed Person_ID Count : '
|| v_rec_cnt;
ELSE
SELECT job
INTO v_job_number
FROM SYS.DBA_JOBS J
WHERE UPPER (J.WHAT) LIKE
'%'
|| g_pkg_name
|| '%';
UPDATE ADRMGT.ADR_PARAMETER
SET VALUE = 'DELTA', RECORD_MODIFIED_BY = SUBSTR (g_job_name, 1, 29), RECORD_MODIFIED_DATE = SYSDATE
WHERE APPLICATION_NAME = 'ACA_MEC' AND UPPER (PARAMETER_NAME) = 'MEC_PERIOD_LOAD_TYPE' AND INACTIVE_FLAG = 'N';
-- change the job interval
DBMS_JOB.change (v_job_number,
NULL,
NULL,
'TRUNC(SYSDATE+1)+7/24');
v_transition_text := ' : Auto-Transitioning from INITIAL TO DELTA ';
END IF;
END IF;
IF v_loading_type <> 'INITIAL' OR v_tobe_process_cnt = 0
THEN
-- for current run ; this is for todays run
SELECT MAX (Enrollment_Determination_h_id) INTO v_upper_bound FROM Enrollment_Determination_H;
INSERT INTO STG_MEC_PERIOD_PERSON_ID (PERSON_ID)
SELECT DISTINCT s.person_id
FROM Enrollment_Determination_H s
WHERE Enrollment_Determination_h_id > g_current_lower_bound AND Enrollment_Determination_h_id <= v_upper_bound;
v_rec_cnt := SQL%ROWCOUNT;
v_misc_text :=
v_transition_text
|| ' To Be Processed Person_ID Count : '
|| v_rec_cnt
|| ' v_upper_bound: '
|| v_upper_bound;
END IF;
COMMIT;
WRAPPER_JOB_PROCESS_LOG_SP ('INFO',
'STEP 0 - METADATA: (COLLECT) '
|| v_misc_text
|| Calc_Exec_time (v_start_dt));
PREP_WORK_MEC_PERIOD (v_upper_bound, v_multi_batch_flg);
WRAPPER_JOB_PROCESS_LOG_SP ('INFO',
'COMPLETE: Total inserted records : '
|| g_final_rec_cnt
|| ' Total '
|| Calc_Exec_time (v_start_dt));
EXCEPTION
WHEN OTHERS
THEN
WRAPPER_JOB_PROCESS_LOG_SP ('ERROR',
SQLERRM
|| ' : '
|| DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
ROLLBACK;
END KICK_OFF_MEC_PERIOD;
END MEC_PERIOD_PKG;
/
CREATE OR REPLACE PUBLIC SYNONYM MEC_PERIOD_PKG FOR ADR.MEC_PERIOD_PKG;
DROP PACKAGE BODY ADR.SF_TIMER;
CREATE OR REPLACE PACKAGE BODY ADR.sf_timer
IS
last_timing NUMBER := NULL;
last_context VARCHAR2 (32767) := NULL;
v_factor NUMBER := NULL;
v_onoff BOOLEAN := TRUE;
v_repeats NUMBER := 100;
v_base_timing NUMBER := NULL;
PROCEDURE set_factor (factor_in IN NUMBER)
IS
BEGIN
v_factor := factor_in;
END set_factor;
FUNCTION factor
RETURN NUMBER
IS
retval NUMBER := v_factor;
BEGIN
RETURN retval;
END factor;
PROCEDURE start_timer (context_in IN VARCHAR2 := NULL)
/* Save current time and context to package variables. */
IS
BEGIN
last_timing := DBMS_UTILITY.get_cpu_time;
last_context := context_in;
END;
FUNCTION elapsed_time
RETURN NUMBER
IS
/* Grab the current time before doing anything else. */
/* WFS 9/4/08 - Used get_cpu_time above and get_time here */
l_end_time PLS_INTEGER := DBMS_UTILITY.get_cpu_time;
BEGIN
IF v_onoff
THEN
RETURN (MOD (l_end_time - last_timing + POWER (2, 32)
, POWER (2, 32)
));
ELSE
/* 2015-05 Joao Barreto: avoid ORA-6503 error! */
RETURN NULL;
END IF;
END;
FUNCTION elapsed_message (prefix_in IN VARCHAR2:= NULL
, adjust_in IN NUMBER:= 0
, reset_in IN BOOLEAN:= TRUE
, reset_context_in IN VARCHAR2:= NULL
)
RETURN VARCHAR2
/*
|| Construct message for display of elapsed time. Programmer can
|| include a prefix to the message and also ask that the last
|| timing variable be reset/updated. This saves a separate call
|| to elapsed.
*/
IS
current_timing NUMBER;
retval VARCHAR2 (32767) := NULL;
FUNCTION adj_time (time_in IN BINARY_INTEGER
, factor_in IN INTEGER
, precision_in IN INTEGER
)
RETURN VARCHAR2
IS
BEGIN
RETURN (TO_CHAR(ROUND ( (time_in - adjust_in) / (100 * factor_in)
, precision_in
)));
END;
FUNCTION formatted_time (time_in IN BINARY_INTEGER
, context_in IN VARCHAR2:= NULL
)
RETURN VARCHAR2
IS
retval VARCHAR2 (32767) := NULL;
BEGIN
IF context_in IS NOT NULL
THEN
retval := ' since ' || last_context;
END IF;
retval :=
prefix_in
|| ' - Elapsed CPU '
|| retval
|| ': '
|| adj_time (time_in, 1, 3)
|| ' seconds.';
IF v_factor IS NOT NULL
THEN
retval :=
retval
|| ' Factored: '
|| adj_time (time_in, v_factor, 5)
|| ' seconds.';
END IF;
RETURN retval;
END;
BEGIN
IF v_onoff
THEN
IF last_timing IS NULL
THEN
/* If there is no last_timing, cannot show anything. */
retval := NULL;
ELSE
/* Construct message with context of last call to elapsed */
retval := formatted_time (elapsed_time (), last_context);
last_context := NULL;
END IF;
IF reset_in
THEN
start_timer (reset_context_in);
END IF;
END IF;
RETURN retval;
END;
PROCEDURE show_elapsed_time (prefix_in IN VARCHAR2:= NULL
, adjust_in IN NUMBER:= 0
, reset_in IN BOOLEAN:= TRUE
)
/* Little more than a call to the elapsed_message function! */
IS
BEGIN
IF v_onoff
THEN
DBMS_OUTPUT.put_line (
elapsed_message (prefix_in, adjust_in, reset_in)
);
END IF;
END;
END sf_timer;
/
CREATE OR REPLACE PUBLIC SYNONYM SF_TIMER FOR ADR.SF_TIMER;