115 lines
4.0 KiB
SQL
115 lines
4.0 KiB
SQL
-- ===================================================================
|
|
-- MARS-1046 Test: Direct CREATE_EXTERNAL_TABLE Test
|
|
-- ===================================================================
|
|
-- Purpose: Test FILE_MANAGER.CREATE_EXTERNAL_TABLE procedure
|
|
-- and verify NORMALIZE_DATE_FORMAT functionality
|
|
-- Author: Grzegorz Michalski
|
|
-- Date: 2026-01-13
|
|
-- ===================================================================
|
|
|
|
SET SERVEROUTPUT ON;
|
|
SET LINESIZE 200;
|
|
SET PAGESIZE 100;
|
|
|
|
PROMPT ===================================================================
|
|
PROMPT MARS-1046: Testing CREATE_EXTERNAL_TABLE with ISO 8601 Format
|
|
PROMPT ===================================================================
|
|
|
|
-- Step 1: Upload test CSV file to INBOX (if not already there)
|
|
PROMPT
|
|
PROMPT Step 1: Verify CSV file in INBOX bucket
|
|
PROMPT File: INBOX/TEST/ISO8601/ISO8601_TEST_DATA/iso8601_test_data.csv
|
|
PROMPT (Upload manually using OCI CLI if needed)
|
|
PROMPT
|
|
|
|
-- Step 2: Create INBOX external table using FILE_MANAGER
|
|
PROMPT Step 2: Creating INBOX external table using ODS.FILE_MANAGER_ODS
|
|
BEGIN
|
|
ODS.FILE_MANAGER_ODS.CREATE_EXTERNAL_TABLE(
|
|
pTableName => 'ISO8601_TEST_DATA_INBOX',
|
|
pTemplateTableName => 'CT_ET_TEMPLATES.ISO8601_TEST_DATA',
|
|
pPrefix => 'INBOX/TEST/ISO8601/ISO8601_TEST_DATA',
|
|
pBucketUri => CT_MRDS.ENV_MANAGER.gvInboxBucketUri
|
|
);
|
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: External table ISO8601_TEST_DATA_INBOX created');
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
IF SQLCODE = -955 THEN -- ORA-00955: name is already used by an existing object
|
|
DBMS_OUTPUT.PUT_LINE('INFO: External table ISO8601_TEST_DATA_INBOX already exists');
|
|
ELSE
|
|
DBMS_OUTPUT.PUT_LINE('ERROR: ' || SQLERRM);
|
|
RAISE;
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
-- Step 3: Verify external table exists
|
|
PROMPT
|
|
PROMPT Step 3: Verifying external table creation
|
|
SELECT
|
|
table_name,
|
|
type_name,
|
|
default_directory_name
|
|
FROM all_external_tables
|
|
WHERE owner = 'ODS'
|
|
AND table_name = 'ISO8601_TEST_DATA_INBOX';
|
|
|
|
-- Step 4: Check ACCESS PARAMETERS - verify date format has quoted "T"
|
|
PROMPT
|
|
PROMPT Step 4: Checking ACCESS PARAMETERS (DATE FORMAT verification)
|
|
PROMPT Expected: MASK should contain YYYY-MM-DD"T"HH24:MI:SS.FF3TZH:TZM
|
|
PROMPT -------------------------------------------------------------------
|
|
SET LONG 50000
|
|
SET PAGESIZE 0
|
|
SELECT access_parameters
|
|
FROM all_external_tables
|
|
WHERE owner = 'ODS'
|
|
AND table_name = 'ISO8601_TEST_DATA_INBOX';
|
|
SET PAGESIZE 100
|
|
|
|
-- Step 5: Read data from external table
|
|
PROMPT
|
|
PROMPT ===================================================================
|
|
PROMPT Step 5: Reading data from INBOX external table
|
|
PROMPT ===================================================================
|
|
COLUMN EVENT_NAME FORMAT A30
|
|
COLUMN PARSED_TIMESTAMP FORMAT A40
|
|
COLUMN DESCRIPTION FORMAT A50
|
|
|
|
SELECT
|
|
ID,
|
|
EVENT_NAME,
|
|
TO_CHAR(EVENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF3 TZH:TZM') AS PARSED_TIMESTAMP,
|
|
DESCRIPTION
|
|
FROM ODS.ISO8601_TEST_DATA_INBOX
|
|
ORDER BY ID;
|
|
|
|
-- Step 6: Verify all records parsed correctly
|
|
PROMPT
|
|
PROMPT Step 6: Verification Summary
|
|
SELECT
|
|
COUNT(*) AS TOTAL_RECORDS,
|
|
COUNT(EVENT_TIMESTAMP) AS PARSED_TIMESTAMPS,
|
|
CASE
|
|
WHEN COUNT(*) = COUNT(EVENT_TIMESTAMP) THEN 'PASS'
|
|
ELSE 'FAIL'
|
|
END AS TEST_RESULT
|
|
FROM ODS.ISO8601_TEST_DATA_INBOX;
|
|
|
|
PROMPT
|
|
PROMPT ===================================================================
|
|
PROMPT Test Complete!
|
|
PROMPT ===================================================================
|
|
PROMPT
|
|
PROMPT Expected Results:
|
|
PROMPT 1. External table ISO8601_TEST_DATA_INBOX created in ODS schema
|
|
PROMPT 2. ACCESS PARAMETERS contain: YYYY-MM-DD"T"HH24:MI:SS.FF3TZH:TZM
|
|
PROMPT 3. All 5 records successfully parsed with timestamps
|
|
PROMPT 4. Milliseconds (.FF3) and timezone (TZH:TZM) preserved
|
|
PROMPT
|
|
PROMPT CRITICAL VERIFICATION:
|
|
PROMPT - Check ACCESS PARAMETERS output for quoted "T" separator
|
|
PROMPT - Verify all EVENT_TIMESTAMP values are not NULL
|
|
PROMPT - Confirm fractional seconds and timezone are present
|
|
PROMPT ===================================================================
|