Work with JSON Documents in Autonomous Database
Autonomous Database supports JavaScript Object Notation (JSON) data natively in the database. You can use NoSQL-style APIs to develop applications that use JSON document collections without needing to know Structured Query Language (SQL) or how the documents are stored in the database.
Oracle provides two sets of such APIs:
-
Simple Oracle Document Access (SODA)
-
Oracle Database API for MongoDB (also called the MongoDB API)
For example, this SODA for Java code opens a collection of cart
documents, carts
, then inserts and saves a new document:
OracleCollection coll = db.openCollection("carts");
// Insert and save a cart document.
OracleDocument doc = db.createDocumentFromString(
"{\"customerId\":123, \"items\":[...]}");
coll.save(doc);
And this code finds a document that has a field customerId
with a value of 123
.
// Find and retrieve a document having customerID 123.
doc = coll.find().filter("{\"customerId\"}:123").getOne();
Although SODA and the MongoDB API are your main ways of working with JSON documents when developing applications, the data in JSON collections, like other database data, can be accessed from outside an application, including using SQL and database clients such as Java Database Connectivity (JDBC), Oracle Call Interface, and Microsoft .NET Framework. For information about access using SQL see Oracle Tools for Database Access.
Oracle SQL and PL/SQL provide additional ways to use JSON data, beyond what is provided by SODA and the MongoDB API. All Oracle Autonomous Databases fully support the SQL/JSON standard, for example. See Oracle Database JSON Developer’s Guide for complete information.
And because collections are backed by ordinary database tables and views, you can take advantage of all sorts of standard Oracle Database features, for use with the content of JSON documents.
With Autonomous JSON Database a collection can only contain JSON data. But you can combine (join) JSON data in collections with other data (JSON or non-JSON) that is not in a collection, in arbitrarily complex ways. Then, using features such as Oracle Machine Learning, you can analyze the data and create reports.
SODA and the MongoDB API give you fast, flexible, scalable application development without losing the ability to leverage SQL for analytics, machine learning, and reporting. There are no restrictions on the types of SQL queries that you can express over JSON data.
As a simple example of using SQL with a collection, here is a query that
gets the customerId
values of all documents in collection
carts
. (Database column json_document
of table
carts
underlies collection carts
.)
SELECT c.json_document.customerId FROM carts c;
And assuming fields unitPrice
and quantity
,
this next query applies SQL aggregate function sum
to the result of
applying multiplication operator *
to those field values for each
document. That is, sum
aggregates the products of unit price and quantity across all documents of the
collection. (See https://github.com/oracle-quickstart/oci-cloudnative/blob/master/src/carts/sql/examples.sql
for more such examples.)
SELECT sum(c.json_document.unitPrice.number()
*
c.json_document.quantity.number())
FROM carts c;
In Autonomous Database, JSON data can be
stored in Oracle's native binary format, OSON. OSON format is always used for
JSON data in a collection. For other JSON data, which you store directly in a relational
column of type BLOB
, Oracle recommends that you specify OSON format for
that column using a check constraint of IS JSON FORMAT OSON
with
CREATE TABLE
. For example:
CREATE TABLE my_table (id NUMBER, json_doc BLOB
CHECK (json_doc IS JSON FORMAT OSON))
If your database is release 19 or earlier and you use SQL/JSON function
json_query
to retrieve JSON data stored in OSON format, then by
default (no RETURNING
clause) native binary JSON values are
automatically serialized to textual format (VARCHAR2(4000)
).
But if you retrieve an entire JSON document then no such automatic
serialization takes place. If you want the document in textual format then use SQL/JSON
function json_serialize
to serialize it. Here's an example:
SELECT json_serialize(c.json_document) FROM carts c;
SODA drivers are available for several languages and frameworks: Java, Node.js, Python, C (using Oracle Call Interface), PL/SQL, and REST. SODA for REST maps SODA operations to Uniform Resource Locator (URL) patterns, so it can be used with most programming languages.
Note:
If you use SODA to access collections in Oracle Database 19c, Oracle
recommends that you use the instant client for Oracle Database 21c or later, in
order to smooth migration to the use of JSON
data type when your
database is upgraded to release 21 or greater.
To get started with SODA or the MongoDB API, see the following:
-
Oracle video Demonstration: Using Autonomous Transaction Processing (ATP) Service as a JSON Document Store, which covers the examples shown here, and more, using an Always Free Autonomous Database
-
Overview of SODA in Oracle Database Introduction to Simple Oracle Document Access (SODA)
-
Overview of SODA Filter Specifications (QBEs) in Oracle Database Introduction to Simple Oracle Document Access (SODA)
-
Overview of Oracle Database API for MongoDB in Oracle Database API for MongoDB
For complete information, see the following: