SlideShare une entreprise Scribd logo
1  sur  56
Mark D. Drake, Marco Gralike
Manager, Product Management 
• Server Technology, Oracle Corporation 
• Oracle 25+ years experience 
• XML Infrastructure products in Oracle's 
Server Technology division
Management Consultant 
• Ordina, The Netherlands 
• Oracle 20+ years experience 
• Oracle ACE Director (www.xmldb.nl)
Basic constructs 
(recursive) 
 Base values 
number, string, 
boolean, … 
 Objects { } 
sets of label-value 
pairs 
 Arrays [ ] 
lists of values
New in Oracle Database 12.1.0.2.0 
 Store and manage JSON documents in Database 
▪ JSON documents stored as text 
▪ JSON documents can be indexed 
 Access JSON documents via developer-friendly 
‘Document-Store’ API’s 
 SQL query capabilities over JSON documents for 
reporting and analysis
Allows Oracle RDBMS to be used as a JSON 
Document Store 
 Enables storing, indexing and querying of JSON 
documents 
No new JSON data type 
IS JSON constraint used to ensure a column 
contains valid JSON documents 
 Apply to CLOB, VARCHAR2, RAWand BLOB data 
 Enables use of .dotted notation to navigate JSON 
document structure and access content
Flexible Schema development
JSON data can also be 
 Partitioned 
 Used with Flashback 
 Recovered (when proper backup is in place) 
 Used with Securefile storage 
▪ Smaller storage 
▪ Encryption, Deduplication, Compressed 
 Multiple index options 
 Caching advantages, etc., etc.,…
JSON content is accessible from SQL via 
new operators 
JSON operators use JSON Path 
language to navigate JSON objects 
Proposed extention to SQL standards
The JSON Path language makes it possible to 
address the contents of a JSON document 
 A JSON path expression can address 1 of 4 items 
▪ The entire object, a scalar value, an array, a specific object 
 JSON Path expressions are similar to XPath 
Expressions 
▪ The entire document is referenced by $ 
▪ All JSON path expressions start with a $ symbol 
▪ Key names are separated by a ’.’ (period) 
JSON Path expressions are case sensitive
JSON Path Expression Type Contents 
$.Reference String "ABULL-20120421" 
$.ShippingInstructions.Address.zipcode Number 99236 
$.ShippingInstructions.Address Object 
{ "street": "200 Sporting Green", 
"city": "South San Francisco", 
"state": "CA", 
"zipCode": 99236, 
"country": “USA" 
} 
$LineItems Array 
[ { "ItemNumber" : 1, 
"Part" : { 
"Description" : “Christmas” 
"UPCCode" : 13131092899 } 
}, 
{ "ItemNumber" : 2, 
"Part" : { 
"Description" : “Easter” 
"UPCCode" : 13131092899 } 
]
Compatible with Java Script 
 $.phone[0] 
Wildcards, Multi-Selects, Ranges 
 $.phone[*], $.phone[0,1 5 to 9] 
Predicates 
 .address?(.zip > $zip) 
SQL conversion functions usable in 
predicates 
 .?(to_date(.date) > $date)
JSON_VALUE 
 Return a single scalar value from a JSON Document 
JSON_QUERY 
 Return a JSON Object or JSON Array from a JSON 
Document 
JSON_EXISTS 
 Filter rows based on JSON-PATH expressions 
JSON_TABLE 
 Project in-line, nested relational views from JSON 
Documents 
JSON_TEXTCONTAINS 
 JSON aware full-text searching of JSON Documents 
Proposed extension to SQL standards
Using .dotted notation 
SQL> select j.PO_DOCUMENT 
2 from J_PURCHASEORDER j 
3 where j.PO_DOCUMENT.PONumber = 1600 
4 / 
SQL> select j.PO_DOCUMENT.ShippingInstructions.Address 
2 from J_PURCHASEORDER j 
3 where j.PO_DOCUMENT.PONumber = 1600 
4 /
Can only return a SCALAR value 
SQL> select JSON_VALUE(PO_DOCUMENT, 
2 '$.LineItems[0].Part.UnitPrice' 
3 returning NUMBER(5,3)) 
4 from J_PURCHASEORDER p 
5 where JSON_VALUE(PO_DOCUMENT, 
6 '$.PONumber' returning NUMBER(10)) = 1600 ;
Can only returns anARRAY or OBJECT 
SELECT JSON_QUERY('{a:100, b:200, c:300}', '$.*' WITH WRAPPER) 
AS value 
FROM DUAL; 
VALUE 
-------------------------------------------------------------------------------- 
[100,200,300]
Used in the WHERE clause 
SQL> select count(*) 
2 from J_PURCHASEORDER 
3 where JSON_EXISTS( PO_DOCUMENT 
4 , '$.ShippingInstructions.Address.state') 
5 /
Used in the FROM clause 
Creation of an inline relational view of JSON 
SQL> SELECT m.* 
2 FROM J_PURCHASEORDER p 
3 , JSON_TABLE 
4 ( p.PO_DOCUMENT, '$' 
5 columns 
6 po_rno FOR ORDINALITY, 
7 po_number NUMBER(10) path '$.PONumber' 
8 ) m 
9 WHERE po_number > 1600 and PO_Number < 1605;
SQL> SELECT m.* 
2 FROM J_PURCHASEORDER p 
3 , JSON_TABLE 
4 ( p.PO_DOCUMENT, '$' 
5 columns 
6 po_number NUMBER(10) path '$.PONumber', 
7 reference VARCHAR2(30) path '$.Reference', 
8 requestor VARCHAR2(32) path '$.Requestor', 
9 userid VARCHAR2(10) path '$.User', 
10 center VARCHAR2(16) path '$.CostCenter' 
11 ) m 
12 WHERE po_number > 1600 and PO_Number < 1605;
1 row output for each row in table 
PO_NUMBER REFERENCE REQUSTOR USERID CENTER 
1600 ABULL-20140421 Alexis Bull ABULL A50 
1601 ABULL-20140423 Alexis Bull ABULL A50 
1602 ABULL-20140430 Alexis Bull ABULL A50 
1603 KCHUNG-20141022 Kelly Chung KCHUNG A50 
1604 LBISSOT-20141009 Laura Bissot LBISSOT A50
create or replace view J_PURCHASEORDER_DETAIL_VIEW as 
select d.* 
from J_PURCHASEORDER p, 
JSON_TABLE 
(p.PO_DOCUMENT, '$' 
columns ( 
PO_NUMBER NUMBER(10) path '$.PONumber', 
USERID VARCHAR2(10) path '$.User', 
COSTCENTER VARCHAR2(16) path '$.CostCenter', 
NESTED PATH '$.LineItems[*]' 
columns 
( ITEMNO NUMBER(38) path '$.ItemNumber', 
UNITPRICE NUMBER(14,2) path '$.Part.UnitPrice' 
) ) ) d;
Full-text search of JSON data that is stored in 
a VARCHAR2, BLOB, or CLOB column 
Must be used in conjunction with special 
JSON Oracle Text Index 
Use CTXSYS.JSON_SECTION_GROUP
SQL> SELECT po_document 
2 FROM j_purchaseorder 
3 WHERE JSON_TEXTCONTAINS 
4 ( po_document 
5 , '$.LineItems.Part.Description' 
6 , 'Magic' ); 
Execution path 
|* | DOMAIN INDEX | PO_SEARCH_IDX | | | 4 (0)
Check constraint guarantees that values are 
valid JSON documents 
IS [NOT] JSON predicate 
 Returns TRUE if column value is JSON, FALSE 
otherwise 
 Full parse of the data while validating syntax 
 Tolerant and strict modes 
Use to ensure that the documents stored in a 
column are valid JSON
LAX 
 Default 
STRICT 
 Among others: 
▪ JSON property (key) name and each string value must be enclosed 
in double quotation marks (") 
▪ Fractional numerals must have leading zero ( 0.14 | .14) 
▪ XML DB Developers Guide or JSON Standards (ECMA-404 / 262) 
 More performance intensive than Lax
create table J_PURCHASEORDER 
( ID RAW(16) NOT NULL, 
DATE_LOADED TIMESTAMP(6) WITH TIME ZONE, 
PO_DOCUMENT CLOB 
CHECK (PO_DOCUMENT IS JSON) ) 
insert into J_PURCHASEORDER values(‘0x1’,‘{Invalid JSON Text}'); 
ERROR at line 1: 
ORA-02290: check constraint (DEMO.IS_VALID_JSON) violated
ALL_JSON_COLUMNS 
DBA_JSON_COLUMNS 
USER_JSON_COLUMNS 
Will not show up when 
 Check constraint combines condition IS JSON 
with another condition using logical condition OR 
 “jcol is json OR length(jcol) < 1000” ???
-- Default (lax) 
SQL> SELECT json_column 
2 FROM t 
3 WHERE ( json_column IS JSON); 
-- Explicit 
SQL> SELECT json_column 
2 FROM t 
3 WHERE ( json_column IS JSON (STRICT));
SQL> insert into J_PURCHASEORDER 
2 select SYS_GUID(), 
3 SYSTIMESTAMP, 
4 JSON_DOCUMENT 
5 from STAGING_TABLE 
6 where JSON_DOCUMENT IS JSON; 
SQL> delete from STAGING_TABLE 
2 where DOCUMENT IS NOT JSON;
NULL on ERROR 
 The Default 
 Return NULL instead of raising the error 
ERROR on ERROR 
 Raise the error (no special handling) 
TRUE ON ERROR 
 In JSON_EXISTS 
 Return TRUE instead of raising the error
FALSE ON ERROR 
 In JSON_EXISTS 
 Return FALSE instead of raising the error 
EMPTY ON ERROR 
 In JSON_QUERY 
 Return an empty array ([]) instead of raising the error 
DEFAULT 'literal_value' ON ERROR 
 Return the specified value instead of raising the error
RETURNING clause 
 PRETTY 
▪ Can only be used in JSON_QUERY 
▪ Pretty-print the returned data 
 ASCII 
▪ Can only be used in JSON_VALUE, JSON_QUERY 
▪ Automatically escape all non-ASCII Unicode characters 
in the returned data, using standard ASCII Unicode
JSON_TABLE, JSON_QUERY 
 WITHOUT WRAPPER 
▪ Default, no change 
▪ Raise error, if scalar/multiple values in non JSON result 
 WITH WRAPPER 
▪ Wrap result as a JSON ARRAY [ ] 
 WITH CONDITIONAL WRAPPER 
▪ Wrap result as a JSON ARRAY [ ] 
▪ Don’t wrap result if scalar/multiple values in JSON result
For a single JSON object or array value, it is the same as WITHOUT WRAPPER. 
JSON 
Example 
WITH WRAPPER WITHOUT 
WRAPPER 
WITH CONDITIONAL 
WRAPPER 
{"id": 38327} 
(single object) 
[{"id": 38327}] {"id": 38327} {"id": 38327} 
[42, "a", true] 
(single array) 
[[42, "a", true]] [42, "a", true] [42, "a", true] 
42 [42] Error 
(scalar) 
[42] 
42, "a", true [42, "a", true] Error 
(multiple values) 
[42, "a", true] 
none [] Error 
(no values) 
[]
JSON_TABLE 
 FORMAT JSON 
▪ Forces JSON_QUERY behavior 
▪ Therefore can have an explicit wrapper clause 
 Default 
▪ Projection like JSON_VALUE
sqlldr.sh 
sqlldr userid=json/json control=sqlldr.ctl log=sqlldr.log bad=sqlldr.bad 
filelist.dat 
./data/www.json-generator.com.01.json 
./data/www.json-generator.com.02.json 
./data/www.json-generator.com.03.json 
./data/www.json-generator.com.04.json 
./data/www.json-generator.com.05.json 
./data/www.json-generator.com.06.json 
./data/www.json-generator.com.07.json 
./data/www.json-generator.com.08.json 
./data/www.json-generator.com.09.json 
./data/www.json-generator.com.10.json
sqlldr.ctl 
LOAD DATA 
INFILE 'filelist.dat' 
truncate 
INTO table JSON_DATA 
FIELDS TERMINATED BY ',‘ 
( clob_filename filler char(120) 
, clob_content LOBFILE(clob_filename) TERMINATED BY EOF 
, nclob_filename filler char(120) 
, nclob_content LOBFILE(nclob_filename) TERMINATED BY EOF 
, bfile_filename filler char(120) 
, bfile_content BFILE(CONSTANT "JSON_LOAD", bfile_filename))
create bitmap index COSTCENTER_IDX 
on J_PURCHASEORDER 
(JSON_VALUE (PO_DOCUMENT, '$.CostCenter')); 
create unique index PO_NUMBER_IDX 
on J_PURCHASEORDER 
(JSON_VALUE ( PO_DOCUMENT, '$.PONumber' 
returning NUMBER(10) 
ERROR ON ERROR));
Path Expressions 
Operators 
Functions 
Conditions 
Error Handling 
Returning results 
Loading JSON data 
Indexing JSON data
Oracle Database SQL 
Language Reference 
 JSON Functions 
▪ JSON_QUERY 
▪ JSON_TABLE 
▪ JSON_VALUE 
 JSON Conditions 
▪ IS JSON 
▪ JSON_EXISTS 
▪ JSON_TEXTCONTAINS 
Oracle XMLDB 
Developers Guide 
 JSON in DB 12.1.0.2 
 JSON Path Expressions 
▪ Syntax 
 Indexing JSON 
▪ Syntax 
 Loading JSON 
▪ A Method 
JSON on xmldb.nl
Stanford - Introduction to Databases (JSON) 
Eclipse JSON Editor Plugin 
JSONView addon (Firefox/Chrome) 
JSON Schema 
Get Started With JSON 
www.json-generator.com 
JSON Datasets: www.data.gov

Contenu connexe

Tendances

Data Persistence in Android with Room Library
Data Persistence in Android with Room LibraryData Persistence in Android with Room Library
Data Persistence in Android with Room LibraryReinvently
 
REST Easy with Django-Rest-Framework
REST Easy with Django-Rest-FrameworkREST Easy with Django-Rest-Framework
REST Easy with Django-Rest-FrameworkMarcel Chastain
 
Introduction to Django REST Framework, an easy way to build REST framework in...
Introduction to Django REST Framework, an easy way to build REST framework in...Introduction to Django REST Framework, an easy way to build REST framework in...
Introduction to Django REST Framework, an easy way to build REST framework in...Zhe Li
 
Python Workshop Part 2. LUG Maniapl
Python Workshop Part 2. LUG ManiaplPython Workshop Part 2. LUG Maniapl
Python Workshop Part 2. LUG ManiaplAnkur Shrivastava
 
Angular 2 Essential Training
Angular 2 Essential Training Angular 2 Essential Training
Angular 2 Essential Training Patrick Schroeder
 
реляційна алгебра лекция
реляційна алгебра лекцияреляційна алгебра лекция
реляційна алгебра лекцияvika_kopoty
 
A Short Intorduction to JasperReports
A Short Intorduction to JasperReportsA Short Intorduction to JasperReports
A Short Intorduction to JasperReportsGuo Albert
 
Django Rest Framework - Building a Web API
Django Rest Framework - Building a Web APIDjango Rest Framework - Building a Web API
Django Rest Framework - Building a Web APIMarcos Pereira
 
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...Fermin Galan
 

Tendances (20)

Angular Directives
Angular DirectivesAngular Directives
Angular Directives
 
Data Persistence in Android with Room Library
Data Persistence in Android with Room LibraryData Persistence in Android with Room Library
Data Persistence in Android with Room Library
 
Intro to JSON
Intro to JSONIntro to JSON
Intro to JSON
 
REST Easy with Django-Rest-Framework
REST Easy with Django-Rest-FrameworkREST Easy with Django-Rest-Framework
REST Easy with Django-Rest-Framework
 
JDBC
JDBCJDBC
JDBC
 
Introduction to Django REST Framework, an easy way to build REST framework in...
Introduction to Django REST Framework, an easy way to build REST framework in...Introduction to Django REST Framework, an easy way to build REST framework in...
Introduction to Django REST Framework, an easy way to build REST framework in...
 
Python Workshop Part 2. LUG Maniapl
Python Workshop Part 2. LUG ManiaplPython Workshop Part 2. LUG Maniapl
Python Workshop Part 2. LUG Maniapl
 
Spring framework core
Spring framework coreSpring framework core
Spring framework core
 
SQL
SQLSQL
SQL
 
Mysql:Operators
Mysql:OperatorsMysql:Operators
Mysql:Operators
 
Angular 2 Essential Training
Angular 2 Essential Training Angular 2 Essential Training
Angular 2 Essential Training
 
реляційна алгебра лекция
реляційна алгебра лекцияреляційна алгебра лекция
реляційна алгебра лекция
 
Angular 2
Angular 2Angular 2
Angular 2
 
T-SQL Overview
T-SQL OverviewT-SQL Overview
T-SQL Overview
 
A Short Intorduction to JasperReports
A Short Intorduction to JasperReportsA Short Intorduction to JasperReports
A Short Intorduction to JasperReports
 
Django Rest Framework - Building a Web API
Django Rest Framework - Building a Web APIDjango Rest Framework - Building a Web API
Django Rest Framework - Building a Web API
 
Spring Core
Spring CoreSpring Core
Spring Core
 
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
 
Mongo DB 102
Mongo DB 102Mongo DB 102
Mongo DB 102
 
Vector
VectorVector
Vector
 

Similaire à Starting with JSON Path Expressions in Oracle 12.1.0.2

UKOUG Tech14 - Getting Started With JSON in the Database
UKOUG Tech14 - Getting Started With JSON in the DatabaseUKOUG Tech14 - Getting Started With JSON in the Database
UKOUG Tech14 - Getting Started With JSON in the DatabaseMarco Gralike
 
Oracle Database - JSON and the In-Memory Database
Oracle Database - JSON and the In-Memory DatabaseOracle Database - JSON and the In-Memory Database
Oracle Database - JSON and the In-Memory DatabaseMarco Gralike
 
Going Native: Leveraging the New JSON Native Datatype in Oracle 21c
Going Native: Leveraging the New JSON Native Datatype in Oracle 21cGoing Native: Leveraging the New JSON Native Datatype in Oracle 21c
Going Native: Leveraging the New JSON Native Datatype in Oracle 21cJim Czuprynski
 
Store non-structured data in JSON column types and enhancements of JSON
Store non-structured data in JSON column types and enhancements of JSONStore non-structured data in JSON column types and enhancements of JSON
Store non-structured data in JSON column types and enhancements of JSONAlireza Kamrani
 
Validating JSON -- Percona Live 2021 presentation
Validating JSON -- Percona Live 2021 presentationValidating JSON -- Percona Live 2021 presentation
Validating JSON -- Percona Live 2021 presentationDave Stokes
 
Spray Json and MongoDB Queries: Insights and Simple Tricks.
Spray Json and MongoDB Queries: Insights and Simple Tricks.Spray Json and MongoDB Queries: Insights and Simple Tricks.
Spray Json and MongoDB Queries: Insights and Simple Tricks.Andrii Lashchenko
 
BGOUG15: JSON support in MySQL 5.7
BGOUG15: JSON support in MySQL 5.7BGOUG15: JSON support in MySQL 5.7
BGOUG15: JSON support in MySQL 5.7Georgi Kodinov
 
JSON Data Parsing in Snowflake (By Faysal Shaarani)
JSON Data Parsing in Snowflake (By Faysal Shaarani)JSON Data Parsing in Snowflake (By Faysal Shaarani)
JSON Data Parsing in Snowflake (By Faysal Shaarani)Faysal Shaarani (MBA)
 
JSON in Oracle 18c and 19c
JSON in Oracle 18c and 19cJSON in Oracle 18c and 19c
JSON in Oracle 18c and 19cstewashton
 
Native JSON Support in SQL2016
Native JSON Support in SQL2016Native JSON Support in SQL2016
Native JSON Support in SQL2016Ivo Andreev
 
JSON and the Oracle Database
JSON and the Oracle DatabaseJSON and the Oracle Database
JSON and the Oracle DatabaseMaria Colgan
 
JSON, A Splash of SODA, and a SQL Chaser: Real-World Use Cases for Autonomous...
JSON, A Splash of SODA, and a SQL Chaser: Real-World Use Cases for Autonomous...JSON, A Splash of SODA, and a SQL Chaser: Real-World Use Cases for Autonomous...
JSON, A Splash of SODA, and a SQL Chaser: Real-World Use Cases for Autonomous...Jim Czuprynski
 
PostgreSQL 9.4 JSON Types and Operators
PostgreSQL 9.4 JSON Types and OperatorsPostgreSQL 9.4 JSON Types and Operators
PostgreSQL 9.4 JSON Types and OperatorsNicholas Kiraly
 
Postgre(No)SQL - A JSON journey
Postgre(No)SQL - A JSON journeyPostgre(No)SQL - A JSON journey
Postgre(No)SQL - A JSON journeyNicola Moretto
 
JSON in 18c and 19c
JSON in 18c and 19cJSON in 18c and 19c
JSON in 18c and 19cstewashton
 
JSON Processing in the Database using PostgreSQL 9.4 :: Data Wranglers DC :: ...
JSON Processing in the Database using PostgreSQL 9.4 :: Data Wranglers DC :: ...JSON Processing in the Database using PostgreSQL 9.4 :: Data Wranglers DC :: ...
JSON Processing in the Database using PostgreSQL 9.4 :: Data Wranglers DC :: ...Ryan B Harvey, CSDP, CSM
 
Power JSON with PostgreSQL
Power JSON with PostgreSQLPower JSON with PostgreSQL
Power JSON with PostgreSQLEDB
 

Similaire à Starting with JSON Path Expressions in Oracle 12.1.0.2 (20)

UKOUG Tech14 - Getting Started With JSON in the Database
UKOUG Tech14 - Getting Started With JSON in the DatabaseUKOUG Tech14 - Getting Started With JSON in the Database
UKOUG Tech14 - Getting Started With JSON in the Database
 
Oracle Database - JSON and the In-Memory Database
Oracle Database - JSON and the In-Memory DatabaseOracle Database - JSON and the In-Memory Database
Oracle Database - JSON and the In-Memory Database
 
Going Native: Leveraging the New JSON Native Datatype in Oracle 21c
Going Native: Leveraging the New JSON Native Datatype in Oracle 21cGoing Native: Leveraging the New JSON Native Datatype in Oracle 21c
Going Native: Leveraging the New JSON Native Datatype in Oracle 21c
 
Store non-structured data in JSON column types and enhancements of JSON
Store non-structured data in JSON column types and enhancements of JSONStore non-structured data in JSON column types and enhancements of JSON
Store non-structured data in JSON column types and enhancements of JSON
 
Json
JsonJson
Json
 
Validating JSON -- Percona Live 2021 presentation
Validating JSON -- Percona Live 2021 presentationValidating JSON -- Percona Live 2021 presentation
Validating JSON -- Percona Live 2021 presentation
 
Spray Json and MongoDB Queries: Insights and Simple Tricks.
Spray Json and MongoDB Queries: Insights and Simple Tricks.Spray Json and MongoDB Queries: Insights and Simple Tricks.
Spray Json and MongoDB Queries: Insights and Simple Tricks.
 
BGOUG15: JSON support in MySQL 5.7
BGOUG15: JSON support in MySQL 5.7BGOUG15: JSON support in MySQL 5.7
BGOUG15: JSON support in MySQL 5.7
 
JSON Data Parsing in Snowflake (By Faysal Shaarani)
JSON Data Parsing in Snowflake (By Faysal Shaarani)JSON Data Parsing in Snowflake (By Faysal Shaarani)
JSON Data Parsing in Snowflake (By Faysal Shaarani)
 
JSON in Oracle 18c and 19c
JSON in Oracle 18c and 19cJSON in Oracle 18c and 19c
JSON in Oracle 18c and 19c
 
Json
JsonJson
Json
 
Oh, that ubiquitous JSON !
Oh, that ubiquitous JSON !Oh, that ubiquitous JSON !
Oh, that ubiquitous JSON !
 
Native JSON Support in SQL2016
Native JSON Support in SQL2016Native JSON Support in SQL2016
Native JSON Support in SQL2016
 
JSON and the Oracle Database
JSON and the Oracle DatabaseJSON and the Oracle Database
JSON and the Oracle Database
 
JSON, A Splash of SODA, and a SQL Chaser: Real-World Use Cases for Autonomous...
JSON, A Splash of SODA, and a SQL Chaser: Real-World Use Cases for Autonomous...JSON, A Splash of SODA, and a SQL Chaser: Real-World Use Cases for Autonomous...
JSON, A Splash of SODA, and a SQL Chaser: Real-World Use Cases for Autonomous...
 
PostgreSQL 9.4 JSON Types and Operators
PostgreSQL 9.4 JSON Types and OperatorsPostgreSQL 9.4 JSON Types and Operators
PostgreSQL 9.4 JSON Types and Operators
 
Postgre(No)SQL - A JSON journey
Postgre(No)SQL - A JSON journeyPostgre(No)SQL - A JSON journey
Postgre(No)SQL - A JSON journey
 
JSON in 18c and 19c
JSON in 18c and 19cJSON in 18c and 19c
JSON in 18c and 19c
 
JSON Processing in the Database using PostgreSQL 9.4 :: Data Wranglers DC :: ...
JSON Processing in the Database using PostgreSQL 9.4 :: Data Wranglers DC :: ...JSON Processing in the Database using PostgreSQL 9.4 :: Data Wranglers DC :: ...
JSON Processing in the Database using PostgreSQL 9.4 :: Data Wranglers DC :: ...
 
Power JSON with PostgreSQL
Power JSON with PostgreSQLPower JSON with PostgreSQL
Power JSON with PostgreSQL
 

Plus de Marco Gralike

UKOUG2018 - I Know what you did Last Summer [in my Database].pptx
UKOUG2018 - I Know what you did Last Summer [in my Database].pptxUKOUG2018 - I Know what you did Last Summer [in my Database].pptx
UKOUG2018 - I Know what you did Last Summer [in my Database].pptxMarco Gralike
 
eProseed Oracle Open World 2016 debrief - Oracle Management Cloud
eProseed Oracle Open World 2016 debrief - Oracle Management CloudeProseed Oracle Open World 2016 debrief - Oracle Management Cloud
eProseed Oracle Open World 2016 debrief - Oracle Management CloudMarco Gralike
 
eProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 Database
eProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 DatabaseeProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 Database
eProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 DatabaseMarco Gralike
 
UKOUG Tech15 - Going Full Circle - Building a native JSON Database API
UKOUG Tech15 - Going Full Circle - Building a native JSON Database APIUKOUG Tech15 - Going Full Circle - Building a native JSON Database API
UKOUG Tech15 - Going Full Circle - Building a native JSON Database APIMarco Gralike
 
OakTable World 2015 - Using XMLType content with the Oracle In-Memory Column...
OakTable World 2015  - Using XMLType content with the Oracle In-Memory Column...OakTable World 2015  - Using XMLType content with the Oracle In-Memory Column...
OakTable World 2015 - Using XMLType content with the Oracle In-Memory Column...Marco Gralike
 
UKOUG Tech14 - Using Database In-Memory Column Store with Complex Datatypes
UKOUG Tech14 - Using Database In-Memory Column Store with Complex DatatypesUKOUG Tech14 - Using Database In-Memory Column Store with Complex Datatypes
UKOUG Tech14 - Using Database In-Memory Column Store with Complex DatatypesMarco Gralike
 
Ordina Oracle Open World
Ordina Oracle Open WorldOrdina Oracle Open World
Ordina Oracle Open WorldMarco Gralike
 
An introduction into Oracle VM V3.x
An introduction into Oracle VM V3.xAn introduction into Oracle VM V3.x
An introduction into Oracle VM V3.xMarco Gralike
 
An introduction into Oracle Enterprise Manager Cloud Control 12c Release 3
An introduction into Oracle Enterprise Manager Cloud Control 12c Release 3An introduction into Oracle Enterprise Manager Cloud Control 12c Release 3
An introduction into Oracle Enterprise Manager Cloud Control 12c Release 3Marco Gralike
 
XML Amsterdam - Creating structure in unstructured data
XML Amsterdam - Creating structure in unstructured dataXML Amsterdam - Creating structure in unstructured data
XML Amsterdam - Creating structure in unstructured dataMarco Gralike
 
An AMIS Overview of Oracle database 12c (12.1)
An AMIS Overview of Oracle database 12c (12.1)An AMIS Overview of Oracle database 12c (12.1)
An AMIS Overview of Oracle database 12c (12.1)Marco Gralike
 
Flexibiliteit & Snel Schakelen
Flexibiliteit & Snel SchakelenFlexibiliteit & Snel Schakelen
Flexibiliteit & Snel SchakelenMarco Gralike
 
Hotsos 2013 - Creating Structure in Unstructured Data
Hotsos 2013 - Creating Structure in Unstructured DataHotsos 2013 - Creating Structure in Unstructured Data
Hotsos 2013 - Creating Structure in Unstructured DataMarco Gralike
 
Expertezed 2012 Webcast - XML DB Use Cases
Expertezed 2012 Webcast - XML DB Use CasesExpertezed 2012 Webcast - XML DB Use Cases
Expertezed 2012 Webcast - XML DB Use CasesMarco Gralike
 
BGOUG 2012 - Drag & drop and other stuff - Using your database as a file server
BGOUG 2012 - Drag & drop and other stuff - Using your database as a file serverBGOUG 2012 - Drag & drop and other stuff - Using your database as a file server
BGOUG 2012 - Drag & drop and other stuff - Using your database as a file serverMarco Gralike
 
BGOUG 2012 - XML Index Strategies
BGOUG 2012 - XML Index StrategiesBGOUG 2012 - XML Index Strategies
BGOUG 2012 - XML Index StrategiesMarco Gralike
 
BGOUG 2012 - Design concepts for xml applications that will perform
BGOUG 2012 - Design concepts for xml applications that will performBGOUG 2012 - Design concepts for xml applications that will perform
BGOUG 2012 - Design concepts for xml applications that will performMarco Gralike
 
ODTUG Webcast - Thinking Clearly about XML
ODTUG Webcast - Thinking Clearly about XMLODTUG Webcast - Thinking Clearly about XML
ODTUG Webcast - Thinking Clearly about XMLMarco Gralike
 
UKOUG 2011 - Drag, Drop and other Stuff. Using your Database as a File Server
UKOUG 2011 - Drag, Drop and other Stuff. Using your Database as a File ServerUKOUG 2011 - Drag, Drop and other Stuff. Using your Database as a File Server
UKOUG 2011 - Drag, Drop and other Stuff. Using your Database as a File ServerMarco Gralike
 
XFILES, The APEX 4 version - The truth is in there
XFILES, The APEX 4 version - The truth is in thereXFILES, The APEX 4 version - The truth is in there
XFILES, The APEX 4 version - The truth is in thereMarco Gralike
 

Plus de Marco Gralike (20)

UKOUG2018 - I Know what you did Last Summer [in my Database].pptx
UKOUG2018 - I Know what you did Last Summer [in my Database].pptxUKOUG2018 - I Know what you did Last Summer [in my Database].pptx
UKOUG2018 - I Know what you did Last Summer [in my Database].pptx
 
eProseed Oracle Open World 2016 debrief - Oracle Management Cloud
eProseed Oracle Open World 2016 debrief - Oracle Management CloudeProseed Oracle Open World 2016 debrief - Oracle Management Cloud
eProseed Oracle Open World 2016 debrief - Oracle Management Cloud
 
eProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 Database
eProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 DatabaseeProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 Database
eProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 Database
 
UKOUG Tech15 - Going Full Circle - Building a native JSON Database API
UKOUG Tech15 - Going Full Circle - Building a native JSON Database APIUKOUG Tech15 - Going Full Circle - Building a native JSON Database API
UKOUG Tech15 - Going Full Circle - Building a native JSON Database API
 
OakTable World 2015 - Using XMLType content with the Oracle In-Memory Column...
OakTable World 2015  - Using XMLType content with the Oracle In-Memory Column...OakTable World 2015  - Using XMLType content with the Oracle In-Memory Column...
OakTable World 2015 - Using XMLType content with the Oracle In-Memory Column...
 
UKOUG Tech14 - Using Database In-Memory Column Store with Complex Datatypes
UKOUG Tech14 - Using Database In-Memory Column Store with Complex DatatypesUKOUG Tech14 - Using Database In-Memory Column Store with Complex Datatypes
UKOUG Tech14 - Using Database In-Memory Column Store with Complex Datatypes
 
Ordina Oracle Open World
Ordina Oracle Open WorldOrdina Oracle Open World
Ordina Oracle Open World
 
An introduction into Oracle VM V3.x
An introduction into Oracle VM V3.xAn introduction into Oracle VM V3.x
An introduction into Oracle VM V3.x
 
An introduction into Oracle Enterprise Manager Cloud Control 12c Release 3
An introduction into Oracle Enterprise Manager Cloud Control 12c Release 3An introduction into Oracle Enterprise Manager Cloud Control 12c Release 3
An introduction into Oracle Enterprise Manager Cloud Control 12c Release 3
 
XML Amsterdam - Creating structure in unstructured data
XML Amsterdam - Creating structure in unstructured dataXML Amsterdam - Creating structure in unstructured data
XML Amsterdam - Creating structure in unstructured data
 
An AMIS Overview of Oracle database 12c (12.1)
An AMIS Overview of Oracle database 12c (12.1)An AMIS Overview of Oracle database 12c (12.1)
An AMIS Overview of Oracle database 12c (12.1)
 
Flexibiliteit & Snel Schakelen
Flexibiliteit & Snel SchakelenFlexibiliteit & Snel Schakelen
Flexibiliteit & Snel Schakelen
 
Hotsos 2013 - Creating Structure in Unstructured Data
Hotsos 2013 - Creating Structure in Unstructured DataHotsos 2013 - Creating Structure in Unstructured Data
Hotsos 2013 - Creating Structure in Unstructured Data
 
Expertezed 2012 Webcast - XML DB Use Cases
Expertezed 2012 Webcast - XML DB Use CasesExpertezed 2012 Webcast - XML DB Use Cases
Expertezed 2012 Webcast - XML DB Use Cases
 
BGOUG 2012 - Drag & drop and other stuff - Using your database as a file server
BGOUG 2012 - Drag & drop and other stuff - Using your database as a file serverBGOUG 2012 - Drag & drop and other stuff - Using your database as a file server
BGOUG 2012 - Drag & drop and other stuff - Using your database as a file server
 
BGOUG 2012 - XML Index Strategies
BGOUG 2012 - XML Index StrategiesBGOUG 2012 - XML Index Strategies
BGOUG 2012 - XML Index Strategies
 
BGOUG 2012 - Design concepts for xml applications that will perform
BGOUG 2012 - Design concepts for xml applications that will performBGOUG 2012 - Design concepts for xml applications that will perform
BGOUG 2012 - Design concepts for xml applications that will perform
 
ODTUG Webcast - Thinking Clearly about XML
ODTUG Webcast - Thinking Clearly about XMLODTUG Webcast - Thinking Clearly about XML
ODTUG Webcast - Thinking Clearly about XML
 
UKOUG 2011 - Drag, Drop and other Stuff. Using your Database as a File Server
UKOUG 2011 - Drag, Drop and other Stuff. Using your Database as a File ServerUKOUG 2011 - Drag, Drop and other Stuff. Using your Database as a File Server
UKOUG 2011 - Drag, Drop and other Stuff. Using your Database as a File Server
 
XFILES, The APEX 4 version - The truth is in there
XFILES, The APEX 4 version - The truth is in thereXFILES, The APEX 4 version - The truth is in there
XFILES, The APEX 4 version - The truth is in there
 

Dernier

Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 

Dernier (20)

Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 

Starting with JSON Path Expressions in Oracle 12.1.0.2

  • 1. Mark D. Drake, Marco Gralike
  • 2. Manager, Product Management • Server Technology, Oracle Corporation • Oracle 25+ years experience • XML Infrastructure products in Oracle's Server Technology division
  • 3.
  • 4. Management Consultant • Ordina, The Netherlands • Oracle 20+ years experience • Oracle ACE Director (www.xmldb.nl)
  • 5. Basic constructs (recursive)  Base values number, string, boolean, …  Objects { } sets of label-value pairs  Arrays [ ] lists of values
  • 6.
  • 7. New in Oracle Database 12.1.0.2.0  Store and manage JSON documents in Database ▪ JSON documents stored as text ▪ JSON documents can be indexed  Access JSON documents via developer-friendly ‘Document-Store’ API’s  SQL query capabilities over JSON documents for reporting and analysis
  • 8. Allows Oracle RDBMS to be used as a JSON Document Store  Enables storing, indexing and querying of JSON documents No new JSON data type IS JSON constraint used to ensure a column contains valid JSON documents  Apply to CLOB, VARCHAR2, RAWand BLOB data  Enables use of .dotted notation to navigate JSON document structure and access content
  • 10. JSON data can also be  Partitioned  Used with Flashback  Recovered (when proper backup is in place)  Used with Securefile storage ▪ Smaller storage ▪ Encryption, Deduplication, Compressed  Multiple index options  Caching advantages, etc., etc.,…
  • 11.
  • 12. JSON content is accessible from SQL via new operators JSON operators use JSON Path language to navigate JSON objects Proposed extention to SQL standards
  • 13. The JSON Path language makes it possible to address the contents of a JSON document  A JSON path expression can address 1 of 4 items ▪ The entire object, a scalar value, an array, a specific object  JSON Path expressions are similar to XPath Expressions ▪ The entire document is referenced by $ ▪ All JSON path expressions start with a $ symbol ▪ Key names are separated by a ’.’ (period) JSON Path expressions are case sensitive
  • 14. JSON Path Expression Type Contents $.Reference String "ABULL-20120421" $.ShippingInstructions.Address.zipcode Number 99236 $.ShippingInstructions.Address Object { "street": "200 Sporting Green", "city": "South San Francisco", "state": "CA", "zipCode": 99236, "country": “USA" } $LineItems Array [ { "ItemNumber" : 1, "Part" : { "Description" : “Christmas” "UPCCode" : 13131092899 } }, { "ItemNumber" : 2, "Part" : { "Description" : “Easter” "UPCCode" : 13131092899 } ]
  • 15. Compatible with Java Script  $.phone[0] Wildcards, Multi-Selects, Ranges  $.phone[*], $.phone[0,1 5 to 9] Predicates  .address?(.zip > $zip) SQL conversion functions usable in predicates  .?(to_date(.date) > $date)
  • 16.
  • 17. JSON_VALUE  Return a single scalar value from a JSON Document JSON_QUERY  Return a JSON Object or JSON Array from a JSON Document JSON_EXISTS  Filter rows based on JSON-PATH expressions JSON_TABLE  Project in-line, nested relational views from JSON Documents JSON_TEXTCONTAINS  JSON aware full-text searching of JSON Documents Proposed extension to SQL standards
  • 18. Using .dotted notation SQL> select j.PO_DOCUMENT 2 from J_PURCHASEORDER j 3 where j.PO_DOCUMENT.PONumber = 1600 4 / SQL> select j.PO_DOCUMENT.ShippingInstructions.Address 2 from J_PURCHASEORDER j 3 where j.PO_DOCUMENT.PONumber = 1600 4 /
  • 19. Can only return a SCALAR value SQL> select JSON_VALUE(PO_DOCUMENT, 2 '$.LineItems[0].Part.UnitPrice' 3 returning NUMBER(5,3)) 4 from J_PURCHASEORDER p 5 where JSON_VALUE(PO_DOCUMENT, 6 '$.PONumber' returning NUMBER(10)) = 1600 ;
  • 20. Can only returns anARRAY or OBJECT SELECT JSON_QUERY('{a:100, b:200, c:300}', '$.*' WITH WRAPPER) AS value FROM DUAL; VALUE -------------------------------------------------------------------------------- [100,200,300]
  • 21. Used in the WHERE clause SQL> select count(*) 2 from J_PURCHASEORDER 3 where JSON_EXISTS( PO_DOCUMENT 4 , '$.ShippingInstructions.Address.state') 5 /
  • 22. Used in the FROM clause Creation of an inline relational view of JSON SQL> SELECT m.* 2 FROM J_PURCHASEORDER p 3 , JSON_TABLE 4 ( p.PO_DOCUMENT, '$' 5 columns 6 po_rno FOR ORDINALITY, 7 po_number NUMBER(10) path '$.PONumber' 8 ) m 9 WHERE po_number > 1600 and PO_Number < 1605;
  • 23. SQL> SELECT m.* 2 FROM J_PURCHASEORDER p 3 , JSON_TABLE 4 ( p.PO_DOCUMENT, '$' 5 columns 6 po_number NUMBER(10) path '$.PONumber', 7 reference VARCHAR2(30) path '$.Reference', 8 requestor VARCHAR2(32) path '$.Requestor', 9 userid VARCHAR2(10) path '$.User', 10 center VARCHAR2(16) path '$.CostCenter' 11 ) m 12 WHERE po_number > 1600 and PO_Number < 1605;
  • 24. 1 row output for each row in table PO_NUMBER REFERENCE REQUSTOR USERID CENTER 1600 ABULL-20140421 Alexis Bull ABULL A50 1601 ABULL-20140423 Alexis Bull ABULL A50 1602 ABULL-20140430 Alexis Bull ABULL A50 1603 KCHUNG-20141022 Kelly Chung KCHUNG A50 1604 LBISSOT-20141009 Laura Bissot LBISSOT A50
  • 25. create or replace view J_PURCHASEORDER_DETAIL_VIEW as select d.* from J_PURCHASEORDER p, JSON_TABLE (p.PO_DOCUMENT, '$' columns ( PO_NUMBER NUMBER(10) path '$.PONumber', USERID VARCHAR2(10) path '$.User', COSTCENTER VARCHAR2(16) path '$.CostCenter', NESTED PATH '$.LineItems[*]' columns ( ITEMNO NUMBER(38) path '$.ItemNumber', UNITPRICE NUMBER(14,2) path '$.Part.UnitPrice' ) ) ) d;
  • 26. Full-text search of JSON data that is stored in a VARCHAR2, BLOB, or CLOB column Must be used in conjunction with special JSON Oracle Text Index Use CTXSYS.JSON_SECTION_GROUP
  • 27. SQL> SELECT po_document 2 FROM j_purchaseorder 3 WHERE JSON_TEXTCONTAINS 4 ( po_document 5 , '$.LineItems.Part.Description' 6 , 'Magic' ); Execution path |* | DOMAIN INDEX | PO_SEARCH_IDX | | | 4 (0)
  • 28.
  • 29. Check constraint guarantees that values are valid JSON documents IS [NOT] JSON predicate  Returns TRUE if column value is JSON, FALSE otherwise  Full parse of the data while validating syntax  Tolerant and strict modes Use to ensure that the documents stored in a column are valid JSON
  • 30. LAX  Default STRICT  Among others: ▪ JSON property (key) name and each string value must be enclosed in double quotation marks (") ▪ Fractional numerals must have leading zero ( 0.14 | .14) ▪ XML DB Developers Guide or JSON Standards (ECMA-404 / 262)  More performance intensive than Lax
  • 31. create table J_PURCHASEORDER ( ID RAW(16) NOT NULL, DATE_LOADED TIMESTAMP(6) WITH TIME ZONE, PO_DOCUMENT CLOB CHECK (PO_DOCUMENT IS JSON) ) insert into J_PURCHASEORDER values(‘0x1’,‘{Invalid JSON Text}'); ERROR at line 1: ORA-02290: check constraint (DEMO.IS_VALID_JSON) violated
  • 32. ALL_JSON_COLUMNS DBA_JSON_COLUMNS USER_JSON_COLUMNS Will not show up when  Check constraint combines condition IS JSON with another condition using logical condition OR  “jcol is json OR length(jcol) < 1000” ???
  • 33. -- Default (lax) SQL> SELECT json_column 2 FROM t 3 WHERE ( json_column IS JSON); -- Explicit SQL> SELECT json_column 2 FROM t 3 WHERE ( json_column IS JSON (STRICT));
  • 34. SQL> insert into J_PURCHASEORDER 2 select SYS_GUID(), 3 SYSTIMESTAMP, 4 JSON_DOCUMENT 5 from STAGING_TABLE 6 where JSON_DOCUMENT IS JSON; SQL> delete from STAGING_TABLE 2 where DOCUMENT IS NOT JSON;
  • 35.
  • 36.
  • 37. NULL on ERROR  The Default  Return NULL instead of raising the error ERROR on ERROR  Raise the error (no special handling) TRUE ON ERROR  In JSON_EXISTS  Return TRUE instead of raising the error
  • 38. FALSE ON ERROR  In JSON_EXISTS  Return FALSE instead of raising the error EMPTY ON ERROR  In JSON_QUERY  Return an empty array ([]) instead of raising the error DEFAULT 'literal_value' ON ERROR  Return the specified value instead of raising the error
  • 39.
  • 40.
  • 41.
  • 42.
  • 43. RETURNING clause  PRETTY ▪ Can only be used in JSON_QUERY ▪ Pretty-print the returned data  ASCII ▪ Can only be used in JSON_VALUE, JSON_QUERY ▪ Automatically escape all non-ASCII Unicode characters in the returned data, using standard ASCII Unicode
  • 44. JSON_TABLE, JSON_QUERY  WITHOUT WRAPPER ▪ Default, no change ▪ Raise error, if scalar/multiple values in non JSON result  WITH WRAPPER ▪ Wrap result as a JSON ARRAY [ ]  WITH CONDITIONAL WRAPPER ▪ Wrap result as a JSON ARRAY [ ] ▪ Don’t wrap result if scalar/multiple values in JSON result
  • 45. For a single JSON object or array value, it is the same as WITHOUT WRAPPER. JSON Example WITH WRAPPER WITHOUT WRAPPER WITH CONDITIONAL WRAPPER {"id": 38327} (single object) [{"id": 38327}] {"id": 38327} {"id": 38327} [42, "a", true] (single array) [[42, "a", true]] [42, "a", true] [42, "a", true] 42 [42] Error (scalar) [42] 42, "a", true [42, "a", true] Error (multiple values) [42, "a", true] none [] Error (no values) []
  • 46. JSON_TABLE  FORMAT JSON ▪ Forces JSON_QUERY behavior ▪ Therefore can have an explicit wrapper clause  Default ▪ Projection like JSON_VALUE
  • 47.
  • 48. sqlldr.sh sqlldr userid=json/json control=sqlldr.ctl log=sqlldr.log bad=sqlldr.bad filelist.dat ./data/www.json-generator.com.01.json ./data/www.json-generator.com.02.json ./data/www.json-generator.com.03.json ./data/www.json-generator.com.04.json ./data/www.json-generator.com.05.json ./data/www.json-generator.com.06.json ./data/www.json-generator.com.07.json ./data/www.json-generator.com.08.json ./data/www.json-generator.com.09.json ./data/www.json-generator.com.10.json
  • 49. sqlldr.ctl LOAD DATA INFILE 'filelist.dat' truncate INTO table JSON_DATA FIELDS TERMINATED BY ',‘ ( clob_filename filler char(120) , clob_content LOBFILE(clob_filename) TERMINATED BY EOF , nclob_filename filler char(120) , nclob_content LOBFILE(nclob_filename) TERMINATED BY EOF , bfile_filename filler char(120) , bfile_content BFILE(CONSTANT "JSON_LOAD", bfile_filename))
  • 50.
  • 51.
  • 52. create bitmap index COSTCENTER_IDX on J_PURCHASEORDER (JSON_VALUE (PO_DOCUMENT, '$.CostCenter')); create unique index PO_NUMBER_IDX on J_PURCHASEORDER (JSON_VALUE ( PO_DOCUMENT, '$.PONumber' returning NUMBER(10) ERROR ON ERROR));
  • 53.
  • 54. Path Expressions Operators Functions Conditions Error Handling Returning results Loading JSON data Indexing JSON data
  • 55. Oracle Database SQL Language Reference  JSON Functions ▪ JSON_QUERY ▪ JSON_TABLE ▪ JSON_VALUE  JSON Conditions ▪ IS JSON ▪ JSON_EXISTS ▪ JSON_TEXTCONTAINS Oracle XMLDB Developers Guide  JSON in DB 12.1.0.2  JSON Path Expressions ▪ Syntax  Indexing JSON ▪ Syntax  Loading JSON ▪ A Method JSON on xmldb.nl
  • 56. Stanford - Introduction to Databases (JSON) Eclipse JSON Editor Plugin JSONView addon (Firefox/Chrome) JSON Schema Get Started With JSON www.json-generator.com JSON Datasets: www.data.gov