Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

JSON_TABLE element with multiple values

Manuel VidigalJan 14 2019 — edited Jan 14 2019

Hi all,


DB Version: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

Is this a JSON_TABLE bug, or am I doing something wrong?

When I run the following query:

SELECT role_id,

       menu_id,

       area_id,

       item_id,

       item_permission permission

  FROM json_table('{

  "PERMISSIONS": {

    "ROLE_ID": "3",

    "MENU": [

      {

        "ID": "82",

        "CONTEXT": "SWI",

        "CODE": "search_area_cell",

        "PERMISSION": "TRUE",

        "AREA": [

          {

            "ID": "1",

            "CODE": "area",

            "PERMISSION": [

              "EXPORT",

              "UPDATE",

              "READ"

            ],

            "ITEM": [

              {

                "ID": "1",

                "CODE": "area_name",

                "PERMISSION": [

                  "READ",

                  "UPDATE"

                ]

              },

              {

                "ID": "2",

                "CODE": "area_code",

                "PERMISSION": "READ"

              }

            ]

          },

          {

            "ID": "2",

            "CODE": "cell",

            "PERMISSION": [

              "READ",

              "UPDATE"

            ],

            "ITEM": [

              {

                "ID": "3",

                "CODE": "cell_number"

              },

              {

                "ID": "5",

                "CODE": "cell_status"

              },

              {

                "ID": "4",

                "CODE": "cell_name",

                "PERMISSION": [

                  "READ",

                  "UPDATE"

                ]

              }

            ]

          }

        ]

      }

    ]

  }

}',

                   '$.PERMISSIONS[*]' columns(role_id VARCHAR2(100) path '$.ROLE_ID',

                           NESTED path '$.MENU[*]' columns(menu_id VARCHAR2(100) path '$.ID',

                                   NESTED path '$.AREA[*]' columns(area_id VARCHAR2(100) path '$.ID',

                                           NESTED path '$.ITEM[*]' columns(item_id path '$.ID',

                                                   NESTED path '$.PERMISSION[*]' columns(item_permission path '$'))))))

WHERE item_permission IS NOT NULL;

I get the following result:

ROLE_IDMENU_IDAREA_IDITEM_IDPERMISSION
38211READ
38211UPDATE
38212READ
38224READ, UPDATE

I'm not understanding why the permission for item_id "4" are not getting splitted.

I've found out that if I change the JSON permissions of item 2 from

              {

                "ID": "2",

                "CODE": "area_code",

                "PERMISSION": "READ"

              }

to

              {

                "ID": "2",

                "CODE": "area_code",

                "PERMISSION": ["READ","UPDATE"]

              }


Everything runs as expected.

Thanks in advance.

This post has been answered by Paulzip on Jan 14 2019
Jump to Answer
Comments
Post Details
Added on Jan 14 2019
6 comments
1,243 views