17 Loading External Data#

Load external data from Excel, XML, JSON, or CSV files using declarative pages, page processes, or PL/SQL APIs.

Create a Data Load Definition to set up a profile that describes how external data in Excel, XML, JSON, or CSV files should be loaded. Use it to load external data into a table or collection:
  • declaratively – using the native Data Load page process, or
  • programmatically – with the LOAD_DATA function in the APEX_DATA_LOADING package.

Pair the file profile it represents with APEX_DATA_PARSER.PARSE to preview data or process it in custom ways. The same function can also infer a file profile at runtime to visualize or process external data with an unknown structure.

Create a Data Loading page using the wizard that lets users upload an external data file, preview the data, and load it. It combines all of the above features. When necessary, the APEX_ZIP package lets you process the contents of a compressed archive for bulk data loading use cases.

17.1 Exploring External Data Examples#

Review external employee data examples in Excel, CSV, JSON, and XML formats.

In the Woods HR application, HR reps sometimes need to load employee data from external files. An Excel spreadsheet, as shown below, is the most common format they encounter. The figure shows employee information in two rows of a spreadsheet featuring column headings in the first row: Employee Number, Last Name, Job Title, Manager ID, Hire Date, Salary, Commission, and Department No.

Figure 17-1 External Data in an Excel Spreadsheet
However, sometimes the employee data arrives in a text file in comma-separated value (CSV) format:
WORKER_NO,LAST_NAME,POSITION,BOSS_NO,ENTRY_DATE,PAY_RATE,BONUS_AMOUNT,SECTION_NO
8001,HOPPER,CLERK,7902,2025-03-14T00:00:00,900,,20
8002,CURIE,SALESMAN,7698,2025-11-05T00:00:00,1350,1200,30
Certain external systems export their data in JSON format:
{
    "items": [
        {
            "employeeId": 8003,
            "fullName": "GALLO",
            "positionTitle": "MANAGER",
            "reportsTo": 7839,
            "startDate": "2025-04-22",
            "salaryAmount": 2450,
            "commissionValue": "",
            "departmentCode": 10
        },
        {
            "employeeId": 8004,
            "fullName": "DARWIN",
            "positionTitle": "SALESMAN",
            "reportsTo": 7698,
            "startDate": "2025-09-10",
            "salaryAmount": 1600,
            "commissionValue": 300,
            "departmentCode": 30
        }
    ]
}
Others use the Extensible Markup Language (XML) instead:
<?xml version="1.0"?>
<ROWSET>
    <ROW>
        <STAFF-ID>8005</STAFF-ID>
        <SURNAME>MENDEL</SURNAME>
        <ROLE>ANALYST</ROLE>
        <JOIN-DATE>2025-02-11T00:00:00</JOIN-DATE>
        <BASE-PAY>3200</BASE-PAY>
        <DIVISION>10</DIVISION>
    </ROW>
    <ROW>
        <STAFF-ID>8006</STAFF-ID>
        <SURNAME>LOVELACE</SURNAME>
        <ROLE>SALESMAN</ROLE>
        <SUPERVISOR-ID>7839</SUPERVISOR-ID>
        <JOIN-DATE>2025-08-27T00:00:00</JOIN-DATE>
        <BASE-PAY>2750</BASE-PAY>
        <ADDITIONAL_COMP>1300</ADDITIONAL_COMP>
        <DIVISION>30</DIVISION>
    </ROW>
</ROWSET>

Using a Data Load Definition shared component, your app can make quick work of loading external data in any of these formats.

17.2 Creating a Data Load Definition#

Create a Data Load Definition using the wizard in Shared Components.

As shown below, you can target a table or collection, and specify the target object name. Here, your new Load Employees from Excel definition loads employee data into the EBA_DEMO_EMP table.

Figure 17-2 Creating a Data Load Definition for an Excel Spreadsheet

On the second step, upload an example file. It can be an Excel spreadsheet, CSV, JSON, or XML file.

Tip:

When a spreadsheet has multiple sheets, pick the one to load with the Select Sheet list that appears.

When you proceed, the wizard uploads and analyzes the file's contents. It detects names, data types, and format masks as needed.

Then, as shown below, the Map Columns step shows the discovered Source Columns in a grid. Use the select list in each row of the Map To column to pick a target column for the data you want to load.

Tip:

To ignore a source column, leave Map To blank in that row.

Figure 17-3 Mapping Source Columns from External Data to Target Columns

To preview the data, visit the Preview tab as shown below. Then click (Create Data Load) to complete the wizard.

Figure 17-4 Reviewing Data Load Definition Results By Previewing Data

17.3 Augmenting Data Load Profile Columns#

Add data profile columns to a Data Load Definition using SQL expressions or queries.

For example, as shown below, the Last Name column in the Excel spreadsheet contains names in mixed case like Faraday and Noether.

Figure 17-5 Excel Spreadsheet Has Employee Names in Mixed Case

The Woods HR app expects the ENAME column data to be uppercase, so adjust the Load Employees from Excel data load definition to convert each employee name before loading it. Edit the data load definition and open its Data Profile. As shown below, start by using the grid to edit the existing ENAME column to change its name to ORIG_ENAME, then click (Apply Changes).

Tip:

To stay on the same page when clicking (Apply Changes), tick the Stay on Page checkbox in the margin prior to clicking. App Builder remembers your preference.

Figure 17-6 Renaming ENAME to ORIG_ENAME Data Profile Column

Next, click the (Add Column > ) button in the Data Profile to add a new ENAME column, of type SQL Expression with Data Type VARCHAR2. Use the expression below, referencing other data profile columns names as necessary. The new ENAME column derives its value by uppercasing the value in the ORIG_ENAME column loaded from the spreadsheet.

upper( ORIG_NAME )

Tip:

The SQL Expression or SQL Query you enter can also be a constant value or reference the value of a global application item by name using the built-in V function (e.g. V('G_APP_USER_EMPNO')). Use this technique in a SQL Expression column named YOUR_NAME to load a custom value into the target table's YOUR_NAME column.

Figure 17-7 Adding a SQL Expression Data Profile Column for ENAME

17.4 Generating and Using a Data Loading Page#

Generate a Data Loading page with the Create Page Wizard to let users load data by choosing a file.

17.5 Parsing Data Without Data Load Definition#

Parse external data without a Data Load Definition by letting APEX discover the file structure at runtime.

In Previewing External Data Before Loading, the APEX_DATA_PARSER.PARSE function referenced an existing Data Load Definition by static ID. This is the most efficient approach if you know the structure of the data to load ahead of time. However, for more dynamic use cases you can also call PARSE to automatically discover the structure of a data file on the fly and return the data it contains in a row set with columns names from C001 to C300. It handles CSV, XML, JSON, and Excel data.

After running the PARSE function to retrieve the data, call:
  • GET_COLUMNS for a collection of the discovered column names and data types
  • GET_FILE_PROFILE to retrieve the file profile in JSON format

To work with the file profile information in a PL/SQL record structure instead, pass the file profile JSON to JSON_TO_PROFILE to get a T_FILE_PROFILE record structure.

17.6 Loading Multiple Files Including ZIPs#

Load employee data from multiple uploaded files, including ZIP archives, using Data Load Definitions and PL/SQL.

Suppose HR representatives need to load external employee data from multiple files at a time. They work with different supplier systems that provide the data in Excel format, CSV, JSON, and XML. Sometimes multiple files arrive in a ZIP archive. A Load Employees page in the Woods HR app can meet this requirement by combining:
  • Data Load Definitions for each kind of source file (Excel, CSV, JSON, and XML)
  • A File Upload page item with Allow Multiple Files enabled
  • A custom EMPLOYEES_FROM_FILES procedure that uses:
    • A FOR loop over the uploaded files, calling
    • APEX_DATA_LOADING package to load data using a Data Load Definition, and
    • APEX_ZIP package to process the contents of a ZIP file

17.4.1 Creating a Data Loading Page#

Create a data loading page by choosing Data Loading in the Create Page Wizard.

As shown below, just pick an existing Data Load Definition like Load Employees from Excel and click (Create Page). While the default Upload Data From setting of File is what you need here, notice it's also possible to create a page where the user can paste in the data to upload.

Figure 17-8 Creating a Data Load Page for an Existing Data Load Definition

17.4.2 Using a Data Loading Page#

Run a generated Data Loading page to upload, preview, and load external employee data.

Running the generated Data Loading page, it displays a file drop zone as shown below.

Figure 17-9 Data Loading Page File Drop Zone

After dragging and dropping an emp.xlsx Excel spreadsheet file onto the drop zone, the page uploads the file straight away and previews the data to load. Clicking (Load Data) completes the operation. The figure shows the generated Data Loading page's preview of the uploaded spreadsheet data.

Figure 17-10 Preview of Excel Spreadsheet Data to Load

The success message shown below confirms the number of rows processed.

Figure 17-11 Success Message Confirms Number of Rows Loaded

When Susan, the HR Representative, visits the Employee Directory page, she sees the two new employees, with Employee Name values in uppercase, so the SQL Expression data profile column explained in Augmenting Data Load Profile Columns functioned as expected. The figure shows the Woods HR Employee Directory page, with its Interactive Report filtered to show employees with names FARADAY and NOETHER.

Figure 17-12 Loaded Employees as HR Rep Susan in Employee Directory

17.4.3 Understanding Data Loading Pages#

Understand the features a generated Data Loading page combines to upload, preview, and load data.

A generated Data Loading page integrates the following features:
  • File Upload page item to let the user upload a file
  • Validation to ensure the user only submits expected file types
  • Worksheet selector when spreadsheet has multiple sheets
  • Data Preview to verify the data is parsing correctly
  • Declarative data loading using the native Data Load page process.

17.6.1 Adding XML, CSV, JSON Data Load Definitions#

Add Data Load Definitions for XML, CSV, and JSON files that all load into the same target table.

By running through the Create Data Load Definition wizard three more times, using the XML, CSV, and JSON files from Exploring External Data Examples, you can add the following additional shared components to your initial one for Excel spreadsheets:
  • Load Employees from XML with Static ID load_employees_from_xml
  • Load Employees from CSV with Static ID load_employees_from_csv
  • Load Employees from JSON with Static ID load_employees_from_json

As shown below for the JSON file example, even though each file uses different nomenclature for the fields, they all target the EBA_DEMO_EMP table, so their Map To columns are the same.

Figure 17-21 Creating a Data Load Definition for an Example JSON File

17.6.2 Setting File Upload to Handle Multiple Files#

Configure a File Upload item for multiple files and track processing results in hidden page items.

The page's P33_FILE File Upload page item has Allow Multiple Files enabled. It displays as a Block Dropzone with a custom title and description. Uploaded files are stored only for the duration of the request in the APEX_APPLICATION_TEMP_FILES table.

Tip:

In this context, request means the HTTP POST sent to the APEX server when the user submits the page. Setting Purge File at to End of Request tells APEX to delete the uploaded file from temporary storage after it finishes processing that submit.

Four hidden page items act like local page variables to hold the values of:
  • Number of files processed – P33_FILE_COUNT
  • Number of employee rows processed – P33_PROCESSED_ROWS
  • Number of error rows – P33_ERROR_ROWS
  • Custom success message – P33_SUCCESS_MESSAGE
Figure 17-22 Configuring File Upload Item to Allow Multiple Files

17.6.3 Processing Multiple Uploaded Files#

Process multiple uploaded files with PL/SQL that chooses the right Data Load Definition and expands ZIP archives.

When the user clicks the (Load) button it submits the page and the Load Employees from Files page process executes. It's an Invoke API page process that calls the EMPLOYEES_FROM_FILES procedure in the EBA_DEMO_WOODSHR_LOAD package explained below. The p_file_names IN parameter gets its value from the File Upload page item P33_FILE, and the three OUT parameters return their values into respective hidden page items:
  • p_file_count => P33_FILE_COUNT
  • p_processed_rows => P33_PROCESSED_ROWS
  • p_error_rows => P33_ERROR_ROWS
Figure 17-23 Calling Custom Data Load File Processing with Invoke API Page Process
The app defines two translatable text messages:
  • ONE_FILE_ROWS_PROCESSED => "Loaded 1 file, new employees: %0"
  • MANY_FILES_ROWS_PROCESSED => "Loaded %0 files, new employees: %1"

A subsequent Execute Code page process references these translatable messages to compute the value of the hidden P33_SUCCESS_MESSAGE. It uses APEX_LANG.GET_MESSAGE and CASE expressions with to supply an appropriate number of placeholder values for a conditional translatable text message key.

:P33_SUCCESS_MESSAGE :=
    apex_lang.get_message(
        p_name => case when :P33_FILE_COUNT = 1
                       then 'ONE_FILE_ROWS_PROCESSED'
                       else 'MANY_FILES_ROWS_PROCESSED'
                  end,
        p_params => case when :P33_FILE_COUNT = 1
                         then apex_t_varchar2('0',:P33_PROCESSED_ROWS)
                         else apex_t_varchar2('0',:P33_FILE_COUNT,
                                              '1',:P33_PROCESSED_ROWS)
                  end);
Figure 17-24 Computing a Custom Success Message with Conditional Text

The source for the EMPLOYEES_FOR_FILES procedure appears below. It loops over the uploaded files in temporary storage from the File Upload item passed in, and calls the DATA_LOAD_FOR_FILE helper procedure to perform the data load on the current file.

-- In package eba_demo_woodshr_load
procedure employees_from_files(
    p_file_names      in varchar2,
    p_file_count     out number,
    p_processed_rows out number,
    p_error_rows     out number)
is
begin
    p_file_count     := 0;
    p_processed_rows := 0;
    p_error_rows     := 0;

    -- Loop over uploaded files in temp storage from File Upload item
    for j in (select blob_content, filename, mime_type
                from apex_application_temp_files
               where name in (select column_value
                                from apex_string.split(p_file_names,':')))
    loop
        -- Load the employees from the current file
        data_load_for_file(
            p_content        => j.blob_content,
            p_filename       => j.filename,
            p_mime_type      => j.mime_type,
            p_file_count     => p_file_count,
            p_processed_rows => p_processed_rows,
            p_error_rows     => p_error_rows);
    end loop;
end employees_from_files;

The DATA_LOAD_FOR_FILE procedure looks at the extension of the passed-in file name as well as the MIME Type of the file if supplied to decide the suffix of the Data Load Definition to use. Depending on the match, the l_data_load_def_suffix ends up being csv, json, xml, excel, or zip. If nothing matches, it will be null.

If we're processing a ZIP file, then it calls the DATA_LOAD_FROM_ZIP helper procedure to process the contents of the zip file. Otherwise, if the data load suffix is not null, it appends the suffix to "load_employees_from_" to produce the static ID of the Data Load Definition to use. Finally, it passes this data load definition static id to APEX_DATA_LOADING.LOAD_DATA to perform the data load based on the file profile it specifies.

It keeps a running total of the number of files loaded and employees processed using the processed_rows field value from the t_data_load_result return value.

-- In package eba_demo_woodshr_load
----------------------------------------------
-- Load the employees data using the filename
-- extension or the mime type to determine
-- whether we're processing a zip file, or
-- a CSV, JSON, XML, or Excel file to data load
----------------------------------------------
procedure data_load_for_file(
    p_content        in blob,
    p_filename       in varchar2,
    p_mime_type      in varchar2,
    p_file_count     in out number,
    p_processed_rows in out number,
    p_error_rows     in out number)
is
    c_extension            constant varchar2(255)  := extension_of(p_filename);
    l_data_load_def_suffix          varchar2(255);
    l_result                        apex_data_loading.t_data_load_result;
begin
    l_data_load_def_suffix :=
        case
            when    c_extension in ('txt','csv')
                 or p_mime_type in ('text/plain','text/csv')
            then
                'csv'
            when    c_extension = 'json'
                 or p_mime_type = 'application/json'
            then
                'json'
            when    c_extension = 'xml'
                 or p_mime_type = 'text/xml'
            then
                'xml'
            when    c_extension in ('xls','xlsx')
                 or p_mime_type in ('application/vnd.ms-excel',
                                    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            then
                'excel'
            when    c_extension = 'zip'
                 or p_mime_type = 'application/zip'
            then
                'zip'
        end;
    if l_data_load_def_suffix = 'zip' then
        data_load_from_zip(
            p_zip_content    => p_content,
            p_file_count     => p_file_count,
            p_processed_rows => p_processed_rows,
            p_error_rows     => p_error_rows);
    elsif l_data_load_def_suffix is not null then
        l_result := apex_data_loading.load_data(
                        p_static_id => 'load_employees_from_'||l_data_load_def_suffix,
                        p_data_to_load => p_content);
        p_file_count     := p_file_count + 1;
        p_processed_rows := p_processed_rows + l_result.processed_rows;
        p_error_rows     := p_error_rows + l_result.error_rows;
    end if;
end data_load_for_file;

The DATA_LOAD_FROM_ZIP uses APEX_ZIP.GET_FILES and a FOR loop to process the list of files contained in the zip file. It calls DATA_LOAD_FOR_FILE to get the job done.

-- In package eba_demo_woodshr_load
----------------------------------------------
-- Load the employees data files contained in
-- the supplied zip file blob
----------------------------------------------
procedure data_load_from_zip(
    p_zip_content    in blob,
    p_file_count     in out number,
    p_processed_rows in out number,
    p_error_rows     in out number)
is
    l_files        apex_zip.t_files;
    l_file_content blob;
begin
    -- Get list of files from the zip
    l_files := apex_zip.get_files(p_zip_content);

    -- Process the individual files inside the zip
    for j in 1..l_files.count loop

        -- Get the contents of the current file in the zip file
        l_file_content := apex_zip.get_file_content(p_zip_content,l_files(j));

        -- Load employees from the current file
        data_load_for_file(
            p_content        => l_file_content,
            p_filename       => l_files(j),
            p_mime_type      => null,
            p_file_count     => p_file_count,
            p_processed_rows => p_processed_rows,
            p_error_rows     => p_error_rows);
    end loop;        

17.6.4 Uploading Multiple Data Load Files#

Upload multiple employee data files and load them together, including files inside ZIP archives.

When an HR Rep like Susan visits the Load Employees page, as shown below, she can now pick an Excel file, CSV file, JSON file, and XML file all at once, and click (Load) to perform the bulk employee data load.

Figure 17-25 Selecting Four Different Kinds of Files at Once for Employee Data Loading

The custom, conditional success message confirms that four files were loaded containing eight total new employees.

Figure 17-26 Success Message Confirms Eight Employees Loaded from Four Files

The same works if Susan submits a mix of files and zip files. All the different XML, CSV, JSON, and Excel files containing employee data get loaded according to their respective Data Load Definitions, including ones that were part of any submitted ZIP files.

17.4.3.1 Specifying the File and Uploading It#

Understand how the generated Data Loading page uploads a selected file and stores it temporarily..

The Load Employees from Excel page shown below is a wizard-created page. It contains the P32_FILE File Upload page item configured to display as a Block Dropzone. It stores the uploaded file in the Table APEX_APPLICATION_TEMP_FILES for the duration of the user session. By default, it's set to upload a single file at a time.

Figure 17-13 File Upload Item in Data Loading Page

The Upload a File dynamic action event handler reacts to the P32_FILE File Upload item's Change event. This happens when the user chooses a file to upload. It triggers an immediate page submit using the native Submit Page action. This uploads the file to the server. The figure shows the Submit Page dynamic action step selected in the component tree and highlights the Submit Page action it's configured to perform.

Figure 17-14 Dynamic Action Immediately Submits File Upload

An After Submit computation shown below populates the display only P32_FILE_NAME page item with the uploaded file name. It selects the FILENAME column from the APEX_APPLICATION_TEMP_FILES table using the unique uploaded file name in the P32_FILE File Upload item.

Then, since the page contains no branches to navigate elsewhere the page re-renders after processing the page submit.

Figure 17-15 After Submit Computation Populates Uploaded File Name

17.4.3.2 Validating the Uploaded File Type#

Understand how the generated Data Loading page validates the uploaded file before loading it.

A validation on the P32_FILE File Upload page item ensures only the expected file type is submitted. As shown below, it uses the following PL/SQL code that calls ASSERT_FILE_TYPE in the APEX_DATA_PARSER package to test if the submitted file is an Excel spreadsheet. It passes in the value of P32_FILE_NAME, the File Upload item. It contains the unique uploaded file name that identifies the file in the APEX_APPLICATION_TEMP_FILES table. Notice it references the C_FILE_TYPE_XLSX constant in the same package to indicate the type of file to check. If true, the validation succeeds. If false, it clears the File Upload item by assigning null to it and returns false to signal the validation failed.

if apex_data_parser.assert_file_type(
       p_file_name => :P32_FILE_NAME,
       p_file_type => apex_data_parser.c_file_type_xlsx )
then
    return true;
else
    :P32_FILE := null;
    return false;
end if;
Figure 17-16 Validating Allowed File Types on Submit

17.4.3.3 Letting User Select Worksheet#

Understand how the generated Data Loading page lets users choose a worksheet when an Excel file has more than one.

The P32_XLSX_WORKSHEET select list has a server-side condition so it displays only when the uploaded file contains multiple worksheets. The Function Body type condition below references the unique uploaded file name in P32_FILE in a SQL query that counts the number of worksheets. It joins the APEX_APPLICATION_TEMP_FILES table with the results of the GET_XLSX_WORKSHEETS function in the APEX_DATA_PARSER package. Then, it returns true to display the select list if the sheet count is greater than one.

declare
    l_sheet_count number;
begin
    select count(*)
      into l_sheet_count
      from apex_application_temp_files f,
           table( apex_data_parser.get_xlsx_worksheets(
                     p_content => f.blob_content ) ) p
     where f.name = :P32_FILE;

     -- display if the XSLX file contains multiple worksheets
    return ( l_sheet_count > 1 );
exception
    when others then
        return false;
end;
The select list uses the same function and P32_FILE bind variable in the following query to show the list of worksheet names for the user to pick from:
select p.sheet_display_name,
       p.sheet_file_name
  from apex_application_temp_files f,
       table( apex_data_parser.get_xlsx_worksheets( p_content => f.blob_content ) ) p
 where f.name = :P32_FILE

Since the data to load is different on each sheet, a dynamic action shown below reacts to the value change in the P32_XLSX_WORKSHEET_NAME select list to submit the page. When the page re-renders after this submit, the Preview region displays the data preview for the newly selected sheet. The figure shows the Submit Page dynamic action step selected in the components tree and highlights its Submit Page action.

Figure 17-17 Selecting Worksheet to Load When Multiple Ones Exist

17.4.3.4 Previewing External Data Before Loading#

Understand how the generated Data Loading page previews uploaded data before loading it.

The Preview region is a Classic Report with a server-side condition to display only when the P32_FILE Item is not null. In other words, it shows only after the user uploads a file. Its query below shows up to 100 rows of data from the file using APEX_DATA_PARSER.PARSE to read the data using the file profile in the Data Load Definition with static ID load_employees_from_excel. The query uses the unique uploaded file name in the File Upload page item P32_FILE to access the uploaded spreadsheet BLOB_CONTENT from the APEX_APPLICATION_TEMP_FILES table. It passes in the user-selected sheet name by referencing the P32_XLSX_WORKSHEET_NAME page item.

select p.line_number,
       p.col001, p.col002, p.col003, p.col004, p.col005,
       p.col006, p.col007, p.col008, p.col009, p.col010
       -- add more columns (col011 to col300) here.
  from apex_application_temp_files f,
       table( apex_data_parser.parse(
                  p_content         => f.blob_content,
                  p_file_name       => f.filename,
                  p_xlsx_sheet_name => case when :P32_XLSX_WORKSHEET is not null
                                            then :P32_XLSX_WORKSHEET end,
                  p_file_profile    => apex_data_loading.get_file_profile(
                                          p_static_id => 'load_employees_from_excel'),
                  p_max_rows        => 100 ) ) p
 where f.name = :P32_FILE

The figure shows the Preview classic report region selected in the component tree and highlights its data source SQL query it uses to preview the data from the uploaded file.

Figure 17-18 Previewing the Data to Load with APEX_DATA_PARSER.PARSE

The Preview region has its Heading > Type set to None on the Attributes tab of the Property Editor. As shown below, ensure the Sorting > Default Sequence of the LINE_NUMBER column is set to one (1) with Ascending sort direction so the user sees the data preview in line number order.

Figure 17-19 Ensuring Preview Sorts by Line Number

17.4.3.5 Loading Data with Native Page Process#

Understand how the generated Data Loading page uses a native Data Loading process to load the uploaded file.

After reviewing the data preview, when the user clicks the (Load) button to load the data, it submits the page and executes the Load Data page process. As shown below, its server-side condition ensures it runs only when the LOAD button is pressed.

The Load Data page process is a native Data Loading process type, with its Data Load Definition set to Load Employees from Excel.

While it can also load data from a text area, or a SQL query returning a CLOB or BLOB, here it's set to use the contents of the P32_FILE File Upload item's temporary file. It configures the P32_XSLX_WORKSHEET item to supply the worksheet name, if any.

Tip:

If you configure a Success Message on the Load Data page process, that takes precedence. Otherwise a Data Loading page process shows a default success message indicating the number of rows loaded.

Figure 17-20 Configuring Native Data Load Page Process