13.7.5.1 Understanding the JSON_TABLE Query

The APEX engine turns a REST Data Source's JSON response payload into rows and column using the Data Profile information.

It dynamically produces a SELECT statement using the JSON_TABLE() operator to map JSON data into relational query results. For example, in a REST Data Source based on an Employees REST API, assume its Data Profile defines three columns:

Table 13-3 Data Profile Columns

Name Data Type Format Mask Selector
EMPNO NUMBER   empno
ENAME VARCHAR2   ename
HIREDATE DATE YYYY-MM-DD"T"HH24:MI:SS"Z" hiredate
At runtime, the APEX engine retrieves a JSON response payload that looks like this:
{
    "items": [
        {
            "empno": 7839,
            "ename": "KING",
            "job": "PRESIDENT",
            "mgr": null,
            "hiredate": "1981-11-17T00:00:00Z",
            "sal": 5000,
            "comm": null,
            "deptno": 10
        },
        ⋮
        {
            "empno": 7788,
            "ename": "SCOTT",
            "job": "ANALYST",
            "mgr": 7566,
            "hiredate": "1982-12-09T00:00:00Z",
            "sal": 3000,
            "comm": null,
            "deptno": 20
        }
    ]
}
It then uses the above response_payload CLOB in a SQL statement like the following:
select "EMPNO",
       "ENAME",
       "HIREDATE"
from (
    select *
    from (
    /* Cast extracted data to declared data type here */
    select to_number("EMPNO")                    as "EMPNO",
           "ENAME"                               as "ENAME",
           to_date("HIREDATE",
                   'YYYY-MM-DD"T"HH24:MI:SS"Z"') as "HIREDATE"
        from
            /* Use the row selector and column selectors here */ 
            json_table ( response_payload format json,'$."items"[*]'
                columns (
                    "EMPNO"    varchar2 ( 4000 ) path '$."empno"',
                    "ENAME"    varchar2 ( 4000 ) path '$."ename"',
                    "HIREDATE" varchar2 ( 4000 ) path '$."hiredate"'
                )
            )
    )
)
This statement produces the relational result:
     EMPNO ENAME      HIREDATE 
---------- ---------- ---------
      7839 KING       17-NOV-81
      7698 BLAKE      01-MAY-81
      7782 CLARK      09-JUN-81
      7566 JONES      02-APR-81
      7788 SCOTT      09-DEC-82