Update export script comments for clarity and consistency

This commit is contained in:
Grzegorz Michalski
2026-03-09 09:25:20 +01:00
parent b81e524351
commit 182e6240d3

View File

@@ -47,6 +47,7 @@ DECLARE
vFileCount NUMBER := 0; vFileCount NUMBER := 0;
vRecordCount NUMBER := 0; vRecordCount NUMBER := 0;
vLocationUri VARCHAR2(1000); vLocationUri VARCHAR2(1000);
vPrintCount NUMBER := 0;
BEGIN BEGIN
vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_ALLOTMENT/'; vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_ALLOTMENT/';
SELECT COUNT(*) INTO vFileCount SELECT COUNT(*) INTO vFileCount
@@ -58,7 +59,12 @@ BEGIN
DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount); DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount);
FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP
DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)'); DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)');
vPrintCount := vPrintCount + 1;
EXIT WHEN vPrintCount >= 10;
END LOOP; END LOOP;
IF vFileCount > 10 THEN
DBMS_OUTPUT.PUT_LINE(' ... and ' || (vFileCount - 10) || ' more file(s)');
END IF;
BEGIN BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_ALLOTMENT_ODS' INTO vRecordCount; EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_ALLOTMENT_ODS' INTO vRecordCount;
DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount); DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount);
@@ -76,6 +82,7 @@ DECLARE
vFileCount NUMBER := 0; vFileCount NUMBER := 0;
vRecordCount NUMBER := 0; vRecordCount NUMBER := 0;
vLocationUri VARCHAR2(1000); vLocationUri VARCHAR2(1000);
vPrintCount NUMBER := 0;
BEGIN BEGIN
vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_HEADER/'; vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_HEADER/';
SELECT COUNT(*) INTO vFileCount SELECT COUNT(*) INTO vFileCount
@@ -87,7 +94,12 @@ BEGIN
DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount); DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount);
FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP
DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)'); DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)');
vPrintCount := vPrintCount + 1;
EXIT WHEN vPrintCount >= 10;
END LOOP; END LOOP;
IF vFileCount > 10 THEN
DBMS_OUTPUT.PUT_LINE(' ... and ' || (vFileCount - 10) || ' more file(s)');
END IF;
BEGIN BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_ALLOTMENT_MODIFICATION_HEADER_ODS' INTO vRecordCount; EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_ALLOTMENT_MODIFICATION_HEADER_ODS' INTO vRecordCount;
DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount); DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount);
@@ -105,6 +117,7 @@ DECLARE
vFileCount NUMBER := 0; vFileCount NUMBER := 0;
vRecordCount NUMBER := 0; vRecordCount NUMBER := 0;
vLocationUri VARCHAR2(1000); vLocationUri VARCHAR2(1000);
vPrintCount NUMBER := 0;
BEGIN BEGIN
vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_ITEM/'; vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_ITEM/';
SELECT COUNT(*) INTO vFileCount SELECT COUNT(*) INTO vFileCount
@@ -116,7 +129,12 @@ BEGIN
DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount); DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount);
FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP
DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)'); DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)');
vPrintCount := vPrintCount + 1;
EXIT WHEN vPrintCount >= 10;
END LOOP; END LOOP;
IF vFileCount > 10 THEN
DBMS_OUTPUT.PUT_LINE(' ... and ' || (vFileCount - 10) || ' more file(s)');
END IF;
BEGIN BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_ALLOTMENT_MODIFICATION_ITEM_ODS' INTO vRecordCount; EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_ALLOTMENT_MODIFICATION_ITEM_ODS' INTO vRecordCount;
DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount); DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount);
@@ -134,6 +152,7 @@ DECLARE
vFileCount NUMBER := 0; vFileCount NUMBER := 0;
vRecordCount NUMBER := 0; vRecordCount NUMBER := 0;
vLocationUri VARCHAR2(1000); vLocationUri VARCHAR2(1000);
vPrintCount NUMBER := 0;
BEGIN BEGIN
vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_ANNOUNCEMENT/'; vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_ANNOUNCEMENT/';
SELECT COUNT(*) INTO vFileCount SELECT COUNT(*) INTO vFileCount
@@ -145,7 +164,12 @@ BEGIN
DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount); DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount);
FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP
DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)'); DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)');
vPrintCount := vPrintCount + 1;
EXIT WHEN vPrintCount >= 10;
END LOOP; END LOOP;
IF vFileCount > 10 THEN
DBMS_OUTPUT.PUT_LINE(' ... and ' || (vFileCount - 10) || ' more file(s)');
END IF;
BEGIN BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_ANNOUNCEMENT_ODS' INTO vRecordCount; EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_ANNOUNCEMENT_ODS' INTO vRecordCount;
DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount); DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount);
@@ -163,6 +187,7 @@ DECLARE
vFileCount NUMBER := 0; vFileCount NUMBER := 0;
vRecordCount NUMBER := 0; vRecordCount NUMBER := 0;
vLocationUri VARCHAR2(1000); vLocationUri VARCHAR2(1000);
vPrintCount NUMBER := 0;
BEGIN BEGIN
vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_FULLBIDLIST_ITEM/'; vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_FULLBIDLIST_ITEM/';
SELECT COUNT(*) INTO vFileCount SELECT COUNT(*) INTO vFileCount
@@ -174,7 +199,12 @@ BEGIN
DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount); DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount);
FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP
DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)'); DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)');
vPrintCount := vPrintCount + 1;
EXIT WHEN vPrintCount >= 10;
END LOOP; END LOOP;
IF vFileCount > 10 THEN
DBMS_OUTPUT.PUT_LINE(' ... and ' || (vFileCount - 10) || ' more file(s)');
END IF;
BEGIN BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_FULLBIDLIST_ITEM_ODS' INTO vRecordCount; EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_FULLBIDLIST_ITEM_ODS' INTO vRecordCount;
DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount); DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount);
@@ -192,6 +222,7 @@ DECLARE
vFileCount NUMBER := 0; vFileCount NUMBER := 0;
vRecordCount NUMBER := 0; vRecordCount NUMBER := 0;
vLocationUri VARCHAR2(1000); vLocationUri VARCHAR2(1000);
vPrintCount NUMBER := 0;
BEGIN BEGIN
vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_FULLBID_ARRAY_COMPILED/'; vLocationUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA') || 'ODS/TOP/TOP_FULLBID_ARRAY_COMPILED/';
SELECT COUNT(*) INTO vFileCount SELECT COUNT(*) INTO vFileCount
@@ -203,7 +234,12 @@ BEGIN
DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount); DBMS_OUTPUT.PUT_LINE('Location: ' || vLocationUri || ' Files found: ' || vFileCount);
FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP FOR rec IN (SELECT object_name, bytes FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => vLocationUri)) WHERE object_name NOT LIKE '%/' ORDER BY object_name) LOOP
DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)'); DBMS_OUTPUT.PUT_LINE(' - ' || rec.object_name || ' (' || rec.bytes || ' bytes)');
vPrintCount := vPrintCount + 1;
EXIT WHEN vPrintCount >= 10;
END LOOP; END LOOP;
IF vFileCount > 10 THEN
DBMS_OUTPUT.PUT_LINE(' ... and ' || (vFileCount - 10) || ' more file(s)');
END IF;
BEGIN BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_FULLBID_ARRAY_COMPILED_ODS' INTO vRecordCount; EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.TOP_FULLBID_ARRAY_COMPILED_ODS' INTO vRecordCount;
DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount); DBMS_OUTPUT.PUT_LINE('>>> Records via external table: ' || vRecordCount);
@@ -229,6 +265,8 @@ DECLARE
vTotalSource NUMBER := 0; vTotalSource NUMBER := 0;
vTotalTarget NUMBER := 0; vTotalTarget NUMBER := 0;
-- safe_count: ONLY for ODS external tables
-- Returns 0 when no data file (ORA-29913, ORA-29400, KUP-13023); re-raises all other errors
PROCEDURE safe_count(pSql VARCHAR2, pResult OUT NUMBER) IS PROCEDURE safe_count(pSql VARCHAR2, pResult OUT NUMBER) IS
BEGIN BEGIN
EXECUTE IMMEDIATE pSql INTO pResult; EXECUTE IMMEDIATE pSql INTO pResult;
@@ -237,11 +275,11 @@ DECLARE
IF SQLCODE IN (-29913, -29400) OR SQLERRM LIKE '%KUP-13023%' THEN IF SQLCODE IN (-29913, -29400) OR SQLERRM LIKE '%KUP-13023%' THEN
pResult := 0; pResult := 0;
ELSE ELSE
pResult := -1; RAISE;
END IF; END IF;
END; END;
BEGIN BEGIN
-- Source counts -- Source counts (direct - if table does not exist, error propagates)
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT' INTO v1Source; EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT' INTO v1Source;
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_HEADER' INTO v2Source; EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_HEADER' INTO v2Source;
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_ITEM' INTO v3Source; EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_ITEM' INTO v3Source;
@@ -272,25 +310,23 @@ BEGIN
DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE('Target external table record counts (pre-export):'); DBMS_OUTPUT.PUT_LINE('Target external table record counts (pre-export):');
DBMS_OUTPUT.PUT_LINE('- TOP_ALLOTMENT_ODS: ' || CASE WHEN v1Target = -1 THEN 'ERROR/INACCESSIBLE' ELSE TO_CHAR(v1Target) END); DBMS_OUTPUT.PUT_LINE('- TOP_ALLOTMENT_ODS: ' || v1Target);
DBMS_OUTPUT.PUT_LINE('- TOP_ALLOTMENT_MODIFICATION_HEADER_ODS: ' || CASE WHEN v2Target = -1 THEN 'ERROR/INACCESSIBLE' ELSE TO_CHAR(v2Target) END); DBMS_OUTPUT.PUT_LINE('- TOP_ALLOTMENT_MODIFICATION_HEADER_ODS: ' || v2Target);
DBMS_OUTPUT.PUT_LINE('- TOP_ALLOTMENT_MODIFICATION_ITEM_ODS: ' || CASE WHEN v3Target = -1 THEN 'ERROR/INACCESSIBLE' ELSE TO_CHAR(v3Target) END); DBMS_OUTPUT.PUT_LINE('- TOP_ALLOTMENT_MODIFICATION_ITEM_ODS: ' || v3Target);
DBMS_OUTPUT.PUT_LINE('- TOP_ANNOUNCEMENT_ODS: ' || CASE WHEN v4Target = -1 THEN 'ERROR/INACCESSIBLE' ELSE TO_CHAR(v4Target) END); DBMS_OUTPUT.PUT_LINE('- TOP_ANNOUNCEMENT_ODS: ' || v4Target);
DBMS_OUTPUT.PUT_LINE('- TOP_FULLBIDLIST_ITEM_ODS: ' || CASE WHEN v5Target = -1 THEN 'ERROR/INACCESSIBLE' ELSE TO_CHAR(v5Target) END); DBMS_OUTPUT.PUT_LINE('- TOP_FULLBIDLIST_ITEM_ODS: ' || v5Target);
DBMS_OUTPUT.PUT_LINE('- TOP_FULLBID_ARRAY_COMPILED_ODS: ' || CASE WHEN v6Target = -1 THEN 'ERROR/INACCESSIBLE' ELSE TO_CHAR(v6Target) END); DBMS_OUTPUT.PUT_LINE('- TOP_FULLBID_ARRAY_COMPILED_ODS: ' || v6Target);
IF vTotalSource > 0 THEN IF vTotalSource > 0 THEN
DBMS_OUTPUT.PUT_LINE('SUCCESS: Source tables contain data - ready for export'); DBMS_OUTPUT.PUT_LINE('SUCCESS: Source tables contain data - ready for export');
ELSE ELSE
DBMS_OUTPUT.PUT_LINE('ERROR: No source data found'); DBMS_OUTPUT.PUT_LINE('WARNING: Source tables exist but contain no data - export will produce empty files');
END IF; END IF;
IF vTotalTarget = 0 THEN IF vTotalTarget = 0 THEN
DBMS_OUTPUT.PUT_LINE('SUCCESS: Target external tables are clean - ready for fresh export'); DBMS_OUTPUT.PUT_LINE('SUCCESS: Target external tables are clean - ready for fresh export');
ELSIF vTotalTarget > 0 THEN
DBMS_OUTPUT.PUT_LINE('WARNING: Target tables contain ' || vTotalTarget || ' records - may be re-run');
ELSE ELSE
DBMS_OUTPUT.PUT_LINE('ERROR: Cannot access target external tables'); DBMS_OUTPUT.PUT_LINE('WARNING: Target tables contain ' || vTotalTarget || ' records - may be re-run');
END IF; END IF;
DBMS_OUTPUT.PUT_LINE('Proceeding with export...'); DBMS_OUTPUT.PUT_LINE('Proceeding with export...');
@@ -306,7 +342,7 @@ BEGIN
CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA( CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA(
pSchemaName => 'OU_TOP', pSchemaName => 'OU_TOP',
pTableName => 'LEGACY_ALLOTMENT', pTableName => 'LEGACY_ALLOTMENT',
pKeyColumnName => 'A_WORKFLOW_HISTORY_KEY', pKeyColumnName => 'A_ETL_LOAD_SET_FK', -- ETL key for data lookup
pBucketArea => 'ODS', pBucketArea => 'ODS',
pFolderName => 'ODS/TOP/TOP_ALLOTMENT', pFolderName => 'ODS/TOP/TOP_ALLOTMENT',
pTemplateTableName => 'CT_ET_TEMPLATES.TOP_ALLOTMENT', pTemplateTableName => 'CT_ET_TEMPLATES.TOP_ALLOTMENT',
@@ -336,7 +372,7 @@ BEGIN
CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA( CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA(
pSchemaName => 'OU_TOP', pSchemaName => 'OU_TOP',
pTableName => 'LEGACY_ALLOTMENT_MODIFICATION_HEADER', pTableName => 'LEGACY_ALLOTMENT_MODIFICATION_HEADER',
pKeyColumnName => 'A_WORKFLOW_HISTORY_KEY', pKeyColumnName => 'A_ETL_LOAD_SET_FK', -- ETL key for data lookup
pBucketArea => 'ODS', pBucketArea => 'ODS',
pFolderName => 'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_HEADER', pFolderName => 'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_HEADER',
pTemplateTableName => 'CT_ET_TEMPLATES.TOP_ALLOTMENT_MODIFICATION_HEADER', pTemplateTableName => 'CT_ET_TEMPLATES.TOP_ALLOTMENT_MODIFICATION_HEADER',
@@ -366,7 +402,7 @@ BEGIN
CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA( CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA(
pSchemaName => 'OU_TOP', pSchemaName => 'OU_TOP',
pTableName => 'LEGACY_ALLOTMENT_MODIFICATION_ITEM', pTableName => 'LEGACY_ALLOTMENT_MODIFICATION_ITEM',
pKeyColumnName => 'A_WORKFLOW_HISTORY_KEY', pKeyColumnName => 'A_ETL_LOAD_SET_FK', -- ETL key for data lookup
pBucketArea => 'ODS', pBucketArea => 'ODS',
pFolderName => 'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_ITEM', pFolderName => 'ODS/TOP/TOP_ALLOTMENT_MODIFICATION_ITEM',
pTemplateTableName => 'CT_ET_TEMPLATES.TOP_ALLOTMENT_MODIFICATION_ITEM', pTemplateTableName => 'CT_ET_TEMPLATES.TOP_ALLOTMENT_MODIFICATION_ITEM',
@@ -396,7 +432,7 @@ BEGIN
CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA( CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA(
pSchemaName => 'OU_TOP', pSchemaName => 'OU_TOP',
pTableName => 'LEGACY_ANNOUNCEMENT', pTableName => 'LEGACY_ANNOUNCEMENT',
pKeyColumnName => 'A_WORKFLOW_HISTORY_KEY', pKeyColumnName => 'A_ETL_LOAD_SET_FK', -- ETL key for data lookup
pBucketArea => 'ODS', pBucketArea => 'ODS',
pFolderName => 'ODS/TOP/TOP_ANNOUNCEMENT', pFolderName => 'ODS/TOP/TOP_ANNOUNCEMENT',
pTemplateTableName => 'CT_ET_TEMPLATES.TOP_ANNOUNCEMENT', pTemplateTableName => 'CT_ET_TEMPLATES.TOP_ANNOUNCEMENT',
@@ -426,7 +462,7 @@ BEGIN
CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA( CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA(
pSchemaName => 'OU_TOP', pSchemaName => 'OU_TOP',
pTableName => 'LEGACY_FBL_ITEM', pTableName => 'LEGACY_FBL_ITEM',
pKeyColumnName => 'A_WORKFLOW_HISTORY_KEY', pKeyColumnName => 'A_ETL_LOAD_SET_FK', -- ETL key for data lookup
pBucketArea => 'ODS', pBucketArea => 'ODS',
pFolderName => 'ODS/TOP/TOP_FULLBIDLIST_ITEM', pFolderName => 'ODS/TOP/TOP_FULLBIDLIST_ITEM',
pTemplateTableName => 'CT_ET_TEMPLATES.TOP_FULLBIDLIST_ITEM', pTemplateTableName => 'CT_ET_TEMPLATES.TOP_FULLBIDLIST_ITEM',
@@ -456,7 +492,7 @@ BEGIN
CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA( CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA(
pSchemaName => 'OU_TOP', pSchemaName => 'OU_TOP',
pTableName => 'LEGACY_FULLBID_ARRAY_COMPILED', pTableName => 'LEGACY_FULLBID_ARRAY_COMPILED',
pKeyColumnName => 'A_WORKFLOW_HISTORY_KEY', pKeyColumnName => 'A_ETL_LOAD_SET_FK', -- ETL key for data lookup
pBucketArea => 'ODS', pBucketArea => 'ODS',
pFolderName => 'ODS/TOP/TOP_FULLBID_ARRAY_COMPILED', pFolderName => 'ODS/TOP/TOP_FULLBID_ARRAY_COMPILED',
pTemplateTableName => 'CT_ET_TEMPLATES.TOP_FULLBID_ARRAY_COMPILED', pTemplateTableName => 'CT_ET_TEMPLATES.TOP_FULLBID_ARRAY_COMPILED',
@@ -502,22 +538,30 @@ DECLARE
vTotalT NUMBER := 0; vTotalT NUMBER := 0;
vMismatch NUMBER := 0; vMismatch NUMBER := 0;
-- safe_count: ONLY for ODS external tables
-- Returns 0 when no data file (ORA-29913, ORA-29400, KUP-13023); re-raises all other errors
PROCEDURE safe_count(pSql VARCHAR2, pResult OUT NUMBER) IS PROCEDURE safe_count(pSql VARCHAR2, pResult OUT NUMBER) IS
BEGIN BEGIN
EXECUTE IMMEDIATE pSql INTO pResult; EXECUTE IMMEDIATE pSql INTO pResult;
EXCEPTION WHEN OTHERS THEN pResult := -1; EXCEPTION
WHEN OTHERS THEN
IF SQLCODE IN (-29913, -29400) OR SQLERRM LIKE '%KUP-13023%' THEN
pResult := 0;
ELSE
RAISE;
END IF;
END; END;
PROCEDURE print_row(pTable VARCHAR2, pSrc NUMBER, pTgt NUMBER) IS PROCEDURE print_row(pTable VARCHAR2, pSrc NUMBER, pTgt NUMBER) IS
BEGIN BEGIN
DBMS_OUTPUT.PUT_LINE( DBMS_OUTPUT.PUT_LINE(
RPAD(pTable, 40) || ' | ' || RPAD(pTable, 40) || ' | ' ||
RPAD(CASE WHEN pSrc = -1 THEN 'N/A' ELSE TO_CHAR(pSrc) END, 8) || ' | ' || RPAD(TO_CHAR(pSrc), 8) || ' | ' ||
RPAD(CASE WHEN pTgt = -1 THEN 'ERROR' ELSE TO_CHAR(pTgt) END, 8) || ' | ' || RPAD(TO_CHAR(pTgt), 8) || ' | ' ||
CASE WHEN pSrc = pTgt THEN 'OK' ELSE 'MISMATCH' END); CASE WHEN pSrc = pTgt THEN 'OK' ELSE 'MISMATCH' END);
END; END;
BEGIN BEGIN
-- Source -- Source (direct - if table does not exist, error propagates)
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT' INTO v1S; EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT' INTO v1S;
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_HEADER' INTO v2S; EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_HEADER' INTO v2S;
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_ITEM' INTO v3S; EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_TOP.LEGACY_ALLOTMENT_MODIFICATION_ITEM' INTO v3S;
@@ -533,8 +577,7 @@ BEGIN
safe_count('SELECT COUNT(*) FROM ODS.TOP_ANNOUNCEMENT_ODS', v4T); safe_count('SELECT COUNT(*) FROM ODS.TOP_ANNOUNCEMENT_ODS', v4T);
safe_count('SELECT COUNT(*) FROM ODS.TOP_FULLBIDLIST_ITEM_ODS', v5T); safe_count('SELECT COUNT(*) FROM ODS.TOP_FULLBIDLIST_ITEM_ODS', v5T);
safe_count('SELECT COUNT(*) FROM ODS.TOP_FULLBID_ARRAY_COMPILED_ODS', v6T); safe_count('SELECT COUNT(*) FROM ODS.TOP_FULLBID_ARRAY_COMPILED_ODS', v6T);
vTotalT := GREATEST(v1T,0) + GREATEST(v2T,0) + GREATEST(v3T,0) vTotalT := v1T + v2T + v3T + v4T + v5T + v6T;
+ GREATEST(v4T,0) + GREATEST(v5T,0) + GREATEST(v6T,0);
DBMS_OUTPUT.PUT_LINE('POST-EXPORT VERIFICATION SUMMARY'); DBMS_OUTPUT.PUT_LINE('POST-EXPORT VERIFICATION SUMMARY');
DBMS_OUTPUT.PUT_LINE(RPAD('Table', 40) || ' | Source | Target | Match'); DBMS_OUTPUT.PUT_LINE(RPAD('Table', 40) || ' | Source | Target | Match');