Skip to main content

JSON in Oracle Database: resources to get you started



I am (finally) diving in to explore and then write about using JSON in Oracle Database 12c - with SQL (Releases 1 and 2) and - more to the point for me - with PL/SQL (based on enhancements in Release 2).

Expect to see posts on this blog, articles in Oracle Magazine, quizzes and workouts at the Oracle Dev Gym, and more, in 2018.

To that end, I have been collecting links to useful resources on this topic, and I realized that you might benefit from that list just as much as I will. So why not share it now? :-)

Before exploring Oracle-specific resources, visit json.org to learn more about JSON itself.

Oracle Documentation

Let's start with the official source of truth: our doc set.

First and foremost, we have the Database JSON Developer's Guide, which covers how to store, generate, view, manipulate, manage, search, and query JSON.

And here are some specific links you might find handy:

Basic SQL/JSON Path Expression Syntax

The basic syntax of a SQL/JSON path expression is presented. It is composed of a context item followed by zero or more object or array steps, depending on the nature of the context item, followed optionally by a function step. Examples are provided.

JSON Data Guide

Lets you discover information about the structure and content of JSON documents stored in Oracle Database. Easily one of the coolest "added value" features of our implementation of JSON support.

Using PL/SQL with JSON Data

Explore the new types added in PL/SQL for JSON manipulation, and learn about how best to leverage SQL JSON features in PL/SQL.

Oracle Product Development

1. LiveSQL Tutorial by Mark Drake, Principal Product Manager

Make is the PM for XMLDB and for JSON in the database. He has put together a truly fantastic tutorial on LiveSQL that steps you through all the latest features for both SQL and PL/SQL in the 12.2 release. Here are the modules in the tutorial:


This is undoubtedly your best starting point for getting up to speed on JSON in Oracle Database.

Note: you will need to have an Oracle account to access the tutorial.

2. Top 10 Tips for JSON Processing in Database by Beda Hammerschmidt, Consulting Member of Technical Staff

Beda is the primary developer for JSON features in Oracle Database. So his command of the features is top-notch, and his understanding of JSON goes deep.

This video is long, but well worth the time for anyone wanting to get started right with this feature set.

3. Beda's blog on JSON, where as he puts it "I explain things in small steps." Perfect! :-)

Tim Hall / ORACLE-BASE

Tim Hall is no slouch when it comes to keeping up with the latest in Oracle Database - and offering clear, easy-to-follow articles on new features. JSON is no exception. The following two articles should give you a solid jumpstart on deploying JSON columns and related functionality in your applications.

JSON Support in Oracle Database 12c Release 1

SQL/JSON Functions in Oracle Database 12c Release 2

PL/SQL Object Types for JSON in Oracle Database 12c Release 2

Darryl Hurley / Implestrat

Darryl's been working with Oracle Database for a couple of decades, with a big focus on SQL and PL/SQL. He's helped me with several of my books, and has also written quizzes for Oracle Dev Gym.  After encountering resistance by UI developers in his organization to using Oracle Database for JSON-based development, he decided to get up to speed on this functionality - and share what he's learned with the community.

We recently held a CodeTalk session on this topic. Check out the video of our conversation and his demonstrations here.

Darryl is also in the midst of publishing a series of posts re: JSON on his blog.

And There's More

Here are a number of other links to blog posts, videos, code samples, and more on JSON in Oracle Database.

Github Examples by Gerald Venzl, Senior Principal Product Manager, Oracle Corporation

JSON in Motion, an Oracle Magazine article on 12.1 JSON by the ever-informative and -entertaining Arup Nanda, Oracle ACE Director

Run with JSON, an Oracle Magazine article on 12.2 JSON by Arup Nanda, Oracle ACE Director

JSON in Oracle Database with Examples, a blog post by Nimish Garg, Oracle ACE Associate

Well, you won't have learned a darned thing about JSON in Oracle Database simply by reading this blog post. But hopefully it can serve as a launch point for your exploration and education on this topic.

And if you've found some other outstanding content that you think I should add to this post, please let me know!

Comments

  1. Hi Steven,

    I've been playing arround with json in Oracle 12.2, but I get an ORA-06512 error when I try to execute the following block...

    CREATE SEARCH INDEX IDX_JSON_RAW ON JSON_RAW(DOCUMENTO) FOR JSON;
    / -- worked ok

    DECLARE
    V_CLOB CLOB;
    BEGIN
    V_CLOB := DBMS_JSON.GET_INDEX_DATAGUIDE(tablename => 'JSON_RAW',
    jcolname => 'DOCUMENTO',
    format => DBMS_JSON.FORMAT_HIERARCHICAL,
    pretty => DBMS_JSON.PRETTY);
    DBMS_OUTPUT.PUT_LINE(V_CLOB);
    DBMS_JSON.CREATE_VIEW(viewname => 'DOCUMENTOS',
    tablename => 'JSON_RAW',
    jcolname => 'DOCUMENTO',
    dataguide => V_CLOB);
    END;
    /

    Error report -
    ORA-00904: : invalid identifier
    ORA-06512: at "XDB.DBMS_JSON", line 559
    ORA-06512: at "XDB.DBMS_JSON", line 977
    ORA-06512: at line 9
    00904. 00000 - "%s: invalid identifier"
    *Cause:
    *Action:

    Any ideas why am I getting this error????

    Thanks in advance
    Marcelo

    ReplyDelete
    Replies
    1. Please provide the DDL for the table json_raw.

      Delete
    2. When I run the following statements, I get "ORA-40594: invalid data guide" (still sorting that out), but not invalid identifier.

      CREATE TABLE json_raw
      (
      documento CLOB CONSTRAINT ensure_json CHECK (documento IS JSON));
      /

      CREATE SEARCH INDEX IDX_JSON_RAW ON JSON_RAW(DOCUMENTO) FOR JSON
      /

      DECLARE
      v_clob CLOB;
      BEGIN
      v_clob :=
      dbms_json.get_index_dataguide (
      tablename => 'JSON_RAW',
      jcolname => 'DOCUMENTO',
      format => dbms_json.format_hierarchical,
      pretty => dbms_json.pretty);
      DBMS_OUTPUT.put_line (v_clob);
      dbms_json.create_view (viewname => 'DOCUMENTOS',
      tablename => 'JSON_RAW',
      jcolname => 'DOCUMENTO',
      dataguide => v_clob);
      END;
      /

      Delete
  2. Hi Steven,

    We process a JSON data structure coming from a rest interface (ORDS) and use JSON_OBJECT in order to validate the payload:

    l_json_obj := JSON_OBJECT_T.parse(json_entity);
    l_key_list := l_json_obj.get_keys;

    We need to transform the "key-values" into a pl/sql collection row. What is the best approach to to this? I want to avoid using SQL PIVOT and complex if-else. It would be nice to get an advice.

    Thanks in advance
    Reinhard

    ReplyDelete
  3. Reinhard,

    Can't you iterate through the array of keys, get the value for that key and populate the array? Does this script help?

    https://livesql.oracle.com/apex/livesql/file/content_GEZHJ12HQW7ACN66WST0HAKYN.htmlZ

    (sorry, I may be missing your challenge here)

    ReplyDelete
  4. Hi Steven,

    I have recently completed a project to migrate Tabular data from a DB2 platform into an Oracle Database that will store the vast bulk to its data in JSON format. To help my organisation achieve that migration I have built some tools (All Oracle PL/SQL based tools) that I have convinced my company to allow me to Open Source. I hope you won't think it too cheeky if I mention that these tools are available for free under the Apache 2 license from FINOS : https://github.com/finos/exodus

    ReplyDelete
  5. This is fantastic, Christian. Thanks for providing this to the community. Do you have a Twitter account you can use to announce this?

    ReplyDelete
    Replies
    1. I don't really use Twitter, but I did announce this on UK Oracle User Group (UKOUG) through Linked-In.

      The announcement:-

      Announcing the release of EXODUS JSON Open Source Migration Tools for Oracle PL/SQL Developers.

      Exodus is a mapping, documenting, and migration tool that has been especially designed with Oracle PL/SQL developers in mind, with particular focus on transporting tabular data into a JSON centric storage paradigm. If you are comfortable with Oracle PL/SQL then all your mapping and migration code can be constructed here without the need for non-Oracle external tools. There is no magic “black box” behaviour. All of the auto-generated code (also in PL/SQL) is made available and viewable from within the tool, and because it’s in a language that seasoned Oracle developers are expert in, there will be no unexpected surprises with the technical approach.

      Delete

Post a Comment

Popular posts from this blog

Quick Guide to User-Defined Types in Oracle PL/SQL

A Twitter follower recently asked for more information on user-defined types in the PL/SQL language, and I figured the best way to answer is to offer up this blog post. PL/SQL is a strongly-typed language . Before you can work with a variable or constant, it must be declared with a type (yes, PL/SQL also supports lots of implicit conversions from one type to another, but still, everything must be declared with a type). PL/SQL offers a wide array of pre-defined data types , both in the language natively (such as VARCHAR2, PLS_INTEGER, BOOLEAN, etc.) and in a variety of supplied packages (e.g., the NUMBER_TABLE collection type in the DBMS_SQL package). Data types in PL/SQL can be scalars, such as strings and numbers, or composite (consisting of one or more scalars), such as record types, collection types and object types. You can't really declare your own "user-defined" scalars, though you can define subtypes  from those scalars, which can be very helpful from the p

The differences between deterministic and result cache features

 EVERY once in a while, a developer gets in touch with a question like this: I am confused about the exact difference between deterministic and result_cache. Do they have different application use cases? I have used deterministic feature in many functions which retrieve data from some lookup tables. Is it essential to replace these 'deterministic' key words with 'result_cache'?  So I thought I'd write a post about the differences between these two features. But first, let's make sure we all understand what it means for a function to be  deterministic. From Wikipedia : In computer science, a deterministic algorithm is an algorithm which, given a particular input, will always produce the same output, with the underlying machine always passing through the same sequence of states.  Another way of putting this is that a deterministic subprogram (procedure or function) has no side-effects. If you pass a certain set of arguments for the parameters, you will always get

My two favorite APEX 5 features: Regional Display Selector and Cards

We (the over-sized development team for the PL/SQL Challenge - myself and my son, Eli) have been busy creating a new website on top of the PLCH platform (tables and packages): The Oracle Dev Gym! In a few short months (and just a part time involvement by yours truly), we have leveraged Oracle Application Express 5 to create what I think is an elegant, easy-to-use site that our users will absolutely love.  We plan to initially make the Dev Gym available only for current users of PL/SQL Challenge, so we can get feedback from our loyal user base. We will make the necessary adjustments and then offer it for general availability later this year. Anyway, more on that as the date approaches (the date being June 27, the APEX Open Mic Night at Kscope16 , where I will present it to a packed room of APEX experts). What I want to talk about today are two features of APEX that are making me so happy these days: Regional Display Selector and Cards. Regional Display Sel