SlideShare ist ein Scribd-Unternehmen logo
1 von 34
JSON und Oracle12c 
Die Oracle-Datenbank als JSON Document Store 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
Carsten Czarski 
Business Unit Database 
Oracle Deutschland B.V. & Co KG
Oracle12c für Entwickler 
Die Datenbank für alle wichtigen Plattformen 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
JSON 
Ruby 
Oracle ADF Oracle APEX 
Oracle RDS
JSON: JavaScript Object Notation 
• Sehr einfaches Datenaustauschformat 
• Einfachere Konzepte als XML 
• Basiert auf JavaScript-Code 
• Javascript auch auf Server wichtig: 
node.js 
• Breite Unterstützung durch Web-APIs 
– Google, Twitter, Facebook & Co 
• Setzt sich mehr und mehr durch 
{ 
"PONumber" : 1600, 
"Reference" : "ABULL-20140421“, 
"Requestor" : "Alexis Bull“, 
"User" : "ABULL“, 
"CostCenter" : "A50“, 
"ShippingInstructions" : { 
"name" : "Alexis Bull“, 
"Address" : { ... }, 
"Phone" : [ ... ] 
}, 
"Special Instructions" : null, 
"AllowPartialShipment" : true, 
"LineItems" : [{ 
"ItemNumber" : 1, 
"Part" : { 
"Description" : "One Magic Christmas“, 
"UnitPrice" : 19.95, 
"UPCCode" : 13131092899 
}, 
"Quantity" : 9 
}, 
{…} 
] 
} 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Flexible Entwicklung mit JSON 
• Agilität und "Continous Delivery" 
– Änderungen an Datenstrukturen immer häufiger und flexibler 
– Lange Zyklen für Schema-Änderungen werden immer weniger akzeptiert 
Security ...? 
IT Betrieb ...? 
Replikation ...? 
• Ansatz: Ablage als JSON und Parsing zur Query Zeit 
– Einfache Ablage der JSON-Dokumente in einem 'Document Store' 
– Parsing zur Abfragezeit – fehlende Attribute "fehlen dann einfach" 
– NoSQL-Datenbanken, Hadoop Cluster 
Funktionsbibliothek ...? 
Relationale Applikationen ...? 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Relationale Tabellen bleiben wichtig. 
Auf das Zusammenspiel kommt es an. 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
5
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
JSON and SQL Duality 
JSON 
Datenzugriff per 
REST oder 
Native API 
JSON wird in der 
Datenbank gespeichert 
Analysen / Queries per SQL 
Oracle Database 12c 
SQL
Native JSON Unterstützung in der Oracle Datenbank 
 JSON Dokumente speichern und verwalten 
• JSON als Text speichern (VARCHAR2, CLOB, BLOB)  Ohne Schema - volle Flexibilität 
• Kein eigener Datentyp: Nutzung der Standard-Datentypen für Zeichenketten bzw. Binärdaten 
• Indizierung mit einem 'JSON aware' Index 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
 API Zugriff auf JSON 
• REST Services 
• Java API (weitere Programmiersprachen in Planung) 
 SQL Abfragen direkt auf JSON-Dokumente 
 Reporting, Analyse und relationaler Zugriff direkt auf JSON-Dokumente 
 'JSON and SQL duality' 
7 
JSON ermöglicht schemalose Datenhaltung 
in der Oracle-Datenbank ... 
... aber komplett integriert mit der 
relationalen Welt!
SQL Queries auf JSON-Dokumente: JSON Table 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
8
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
SQL Beispiel: JSON_TABLE 
9 
select reference, requestor, costcenter 
from po_json, json_table( 
json, 
'$.PurchaseOrder' 
columns ( 
reference varchar2(30) path '$.Reference', 
requestor varchar2(25) path '$.Requestor', 
costcenter varchar2(4) path '$.CostCenter' 
) 
) 
/
JSON_TABLE für relationale Sichten auf JSON 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
10 
REFERENCE REQUESTOR COST 
--------------------------- ------------------ ---- 
FORD-20021009123336872PDT Gerry B. Ford R20 
JONES-20011127121050471PST Richard J Jones R20 
MARTIN-20011127121050401PST Thomas D. Martin S30 
CLARK-20021009123337764PDT Edward K. Clark A10 
JONES-20011127121042590PST Richard J Jones R20 
MARTIN-20011127121040547PST Thomas D. Martin S30 
JONES-20021009123336602PDT Richard J Jones R20 
WARD-20011127121050511PST Stephen B. Ward S30 
BLAKE-20011127121055689PST David E. Blake S30 
MARTIN-20011127121048889PST Thomas D. Martin S30 
: : :
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
JSON Indizierung 
• Function Based Indizes für … 
– Bekannte Abfragemuster 
– Attribute kommen im JSON nur einmal vor – keine Arrays 
– Basiert auf Function Based Indexes 
• Volltextindizierung von JSON-Dokumenten auf Basis von Oracle TEXT 
– Unbekannte Abfragemuster – inkl. Volltextrecherche 
– Beliebige JSON-Attribute 
– Basiert auf Oracle TEXT
JSON Unterstützung in Oracle12c: Interfaces und APIs 
 Neue 'Document-Store' API für Entwickler 
– REST Webservices 
– Document / Collection APIs für JAVA 
– Unterstützung für andere Sprachen / Frameworks in Arbeit 
• SQL Zugriff uneingeschränkt möglich 
– Treiber wie OCI, JDBC, .NET können sofort mit JSON umgehen 
– SQL/JSON Operatoren erlauben direktes Arbeiten mit SQL 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
REST API für JSON 
• REST Webservice API zur Arbeit mit JSON-Dokumenten: Kein SQL nötig 
• Zwei Deployment-Varianten: 
– Oracle Rest Data Services (aka 'APEX Listener') 
– Oracle XML DB Protokollserver (XML DB) 
• Unterstützt die REST Standardoperationen 
– PUT : Create / Update 
– GET : Retrieve 
– DELETE : Delete 
– POST : JSON Queries, Utility-Funktionen 
• Konfiguration des REST Service wird komplett in der Datenbank gespeichert 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
Roadmap 
• JSON mit SQL-Funktionen generieren 
• JSON Support für PL/SQL 
– Für APEX-Entwickler wird mit APEX 5.0 das Paket APEX_JSON kommen.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
Weitere Informationen 
• Oracle Dokumentation 
– XML DB Developers Guide 
– Kapitel 39: JSON in Oracle Database 
• Blog des Autors: SQL und PL/SQL in Oracle 
– http://sql-plsql-de.blogspot.com 
– Juli 2014: Oracle 12.1.0.2 ist da: Ein Einblick in die JSON-Unterstützung 
15
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
Carsten.Czarski@oracle.com 
http://tinyurl.com/apexcommunity 
http://sql-plsql-de.blogspot.com 
http://plsqlexecoscomm.sourceforge.net 
http://plsqlmailclient.sourceforge.net 
Twitter: @cczarski @oraclebudb
JSON in der Oracle-Datenbank 
Vorgehensweise und Funktionen im Detail 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
17
• Für JSON wird kein eigener Datentyp verwendet 
• Alle Typen, die Text aufnehmen können, sind nutzbar 
VARCHAR2, CLOB, BLOB 
• JSON- und Nicht-JSON Inhalte können in einer Tabelle gemischt werden 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
Schritt 1: Tabelle anlegen 
18 
create table po_json ( 
filename varchar2(200), 
json clob 
);
Schritt 2: JSON Dokumente laden 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
19
Schritt 3: Was ist JSON, was ist nicht JSON 
• SQL Operatoren IS JSON und IS NOT JSON 
• Check Constraint stellt sicher, dass nur noch JSON gespeichert wird 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
20 
select count(*) 
from po_json where json is json; 
select count(*) 
from po_json where json is not json; 
alter table po_json add 
constraint ck_isjson check (json is json);
• SQL Funktionen JSON_EXISTS, JSON_VALUE, JSON_QUERY und JSON_TABLE 
• Arbeitsweise immer gleich 
– JSON-Tabellenspalte oder Literal 
– JSON Pfadausdruck (JSON Path Expression) 
– Returning Klausel 
– Error Handling 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
Schritt 4: SQL Abfragen ... 
21
JSON_QUERY extrahiert JSON "Fragmente" 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
22 
select json_query( 
json, 
'$.PurchaseOrder.ShippingInstructions' 
PRETTY 
) from po_json; 
JSON_QUERY 
-------------------------------------------------------------------------------- 
[ 
{ 
"name" : ["Gerry B. Ford"], 
"address" : ["100 Oracle ParkwayrnRedwood ShoresrnCArn94065rnUSA"], 
"telephone" : ["650 506 7100"] 
} 
] 
1 Zeile wurde ausgewählt.
Im Fehlerfall ... wird NULL zurückgegeben 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
23 
select json_query( 
json, 
'$.PurchaseOrder.ShippingInstrs' 
PRETTY 
) from po_json; 
JSON_QUERY 
-------------------------------------------------------------------------------- 
? 
1 Zeile wurde ausgewählt.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
... oder eine Fehlermeldung. 
24 
select json_query( 
json, 
'$.PurchaseOrder.ShippingInstrs' 
PRETTY ERROR ON ERROR 
) from po_json; 
* 
FEHLER in Zeile 1: 
ORA-40462: Auswertung von JSON_QUERY hat keinen Wert ergeben
JSON_VALUE extrahiert "skalare Werte" 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
25 
select json_value( 
json, 
'$.PurchaseOrder.Reference[0]' 
RETURNING VARCHAR2 
) from po_json where rownum < 10; 
JSON_VALUE 
------------------------------------------------------------------ 
FORD-20021009123336872PDT 
JONES-20011127121050471PST 
MARTIN-20011127121050401PST 
CLARK-20021009123337764PDT 
:
JSON_EXISTS stellt fest, ob ein JSON-Pfad existiert 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
26 
select filename from po_json 
where json_exists( 
json, 
'$.PurchaseOrder.Reference' 
); 
FILENAME 
----------------------------------------------------------------- 
FORD-20021009123336872PDT.js 
JONES-20011127121050471PST.js 
MARTIN-20011127121050401PST.js 
CLARK-20021009123337764PDT.js 
:
JSON_TABLE für relationale Sichten auf JSON 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
27 
select reference, requestor, costcenter 
from po_json, json_table( 
json, 
'$.PurchaseOrder' 
columns ( 
reference varchar2(30) path '$.Reference[0]', 
requestor varchar2(25) path '$.Requestor[0]', 
costcenter varchar2(4) path '$.CostCenter[0]' 
) 
) 
/
JSON_TABLE für relationale Sichten auf JSON 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
28 
REFERENCE REQUESTOR COST 
--------------------------- ------------------ ---- 
FORD-20021009123336872PDT Gerry B. Ford R20 
JONES-20011127121050471PST Richard J Jones R20 
MARTIN-20011127121050401PST Thomas D. Martin S30 
CLARK-20021009123337764PDT Edward K. Clark A10 
JONES-20011127121042590PST Richard J Jones R20 
MARTIN-20011127121040547PST Thomas D. Martin S30 
JONES-20021009123336602PDT Richard J Jones R20 
WARD-20011127121050511PST Stephen B. Ward S30 
BLAKE-20011127121055689PST David E. Blake S30 
MARTIN-20011127121048889PST Thomas D. Martin S30 
: : :
JSON_TABLE für geschachtelte Strukturen 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
29 
select reference, requestor, num, descr, quantity 
From po_json, json_table( 
json, 
'$.PurchaseOrder' 
columns ( 
reference varchar2(30) path '$.Reference[0]', 
requestor varchar2(25) path '$.Requestor[0]', 
CostCenter varchar2(4) path '$.CostCenter[0]', 
nested path '$.LineItems[*].LineItem[*]' columns ( 
num number path '$."u0024".ItemNumber', 
descr varchar2(40) path '$.Description[0]', 
quantity number path '$.Part[0]."u0024"."Quantity"' 
) 
) 
)
JSON_TABLE für relationale Sichten auf JSON 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
30 
REFERENCE REQUESTOR NUM DESCR QUANTITY 
--------------------------- ------------------ ---- ---------------------------------------- -------- 
FORD-20021009123336872PDT Gerry B. Ford 1 Ordet 4 
FORD-20021009123336872PDT Gerry B. Ford 2 The Naked Kiss 3 
FORD-20021009123336872PDT Gerry B. Ford 3 Charade 2 
FORD-20021009123336872PDT Gerry B. Ford 4 Robocop 2 
FORD-20021009123336872PDT Gerry B. Ford 5 Cries and Whispers 4 
FORD-20021009123336872PDT Gerry B. Ford 6 Autumn Sonata 4 
FORD-20021009123336872PDT Gerry B. Ford 7 Getrud 3 
FORD-20021009123336872PDT Gerry B. Ford 8 And the Ship Sails on 1 
FORD-20021009123336872PDT Gerry B. Ford 9 Flesh for Frankenstein 4 
FORD-20021009123336872PDT Gerry B. Ford 10 The Hidden Fortress 2 
FORD-20021009123336872PDT Gerry B. Ford 11 The Importance of Being Earnest 3 
FORD-20021009123336872PDT Gerry B. Ford 12 The Vanishing 4 
FORD-20021009123336872PDT Gerry B. Ford 13 Cries and Whispers 4 
FORD-20021009123336872PDT Gerry B. Ford 14 Beauty and the Beast 2 
FORD-20021009123336872PDT Gerry B. Ford 15 And God Created Woman 1 
: : : : : 
FORD-20021009123336872PDT Gerry B. Ford 16 The Magic Flute 1 
20 Zeilen ausgewählt.
Schritt 5: Volltextindizierung mit Oracle TEXT 
• Erstellung eines Oracle TEXT Index für JSON 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
31 
CREATE INDEX po_search_idx ON po_json (json) 
INDEXTYPE IS CTXSYS.CONTEXT 
PARAMETERS ( 
'section group CTXSYS.JSON_SECTION_GROUP 
SYNC (ON COMMIT)' 
) 
/ 
Index wurde erstellt.
Schritt 5: Volltextindizierung mit Oracle TEXT 
• Erstellung eines Oracle TEXT Index für JSON 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
32 
select filename from po_json 
WHERE json_textcontains( 
json, 
'$.PurchaseOrder.LineItems.LineItem.Description', 
'Magic' 
); 
TURNER-20021009123338565PDT.js 
CLARK-2001112712105223PST.js 
:
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
Weitere Informationen 
• Oracle Dokumentation 
– XML DB Developers Guide 
– Kapitel 39: JSON in Oracle Database 
• Blog des Autors: SQL und PL/SQL in Oracle 
– http://sql-plsql-de.blogspot.com 
– Juli 2014: Oracle 12.1.0.2 ist da: Ein Einblick in die JSON-Unterstützung 
33
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
Carsten.Czarski@oracle.com 
http://tinyurl.com/apexcommunity 
http://sql-plsql-de.blogspot.com 
http://plsqlexecoscomm.sourceforge.net 
http://plsqlmailclient.sourceforge.net 
Twitter: @cczarski @oraclebudb

Weitere ähnliche Inhalte

Andere mochten auch

Powerpoint Horarios Segundo
Powerpoint Horarios SegundoPowerpoint Horarios Segundo
Powerpoint Horarios Segundomarcelo.olarieta
 
Gost 14063 68
 Gost 14063 68 Gost 14063 68
Gost 14063 68Kinlay89
 
Bachelorarbeit_Jakob_Huber_MDH
Bachelorarbeit_Jakob_Huber_MDHBachelorarbeit_Jakob_Huber_MDH
Bachelorarbeit_Jakob_Huber_MDHJakob Huber
 
Piraten programm (1)
Piraten programm (1)Piraten programm (1)
Piraten programm (1)annettjuenger
 
15 Jahre Fellows Biker-Crew, 06.09.2014
15 Jahre Fellows Biker-Crew, 06.09.201415 Jahre Fellows Biker-Crew, 06.09.2014
15 Jahre Fellows Biker-Crew, 06.09.2014Sandra H. Maine Coons
 
Was tun im Social Web?
Was tun im Social Web?Was tun im Social Web?
Was tun im Social Web?Olaf Nitz
 
Social Media und Fische
Social Media und FischeSocial Media und Fische
Social Media und FischeOlaf Nitz
 
IDENTIFICATION LECTURE OF DIFFERENT FIBERS BY DIFFERENT WAYS
IDENTIFICATION LECTURE OF DIFFERENT FIBERS BY DIFFERENT WAYSIDENTIFICATION LECTURE OF DIFFERENT FIBERS BY DIFFERENT WAYS
IDENTIFICATION LECTURE OF DIFFERENT FIBERS BY DIFFERENT WAYSBILAL ABDULLAH
 
Textuality in Fancy
Textuality in Fancy Textuality in Fancy
Textuality in Fancy Gabi Thomas
 
Anleitung google plus für ofw-studenten
Anleitung google plus für ofw-studentenAnleitung google plus für ofw-studenten
Anleitung google plus für ofw-studentenBernd Schmitz
 
Kreatives Kommunikationsleistungs-Portfolio der Agentur Leven
Kreatives Kommunikationsleistungs-Portfolio der Agentur LevenKreatives Kommunikationsleistungs-Portfolio der Agentur Leven
Kreatives Kommunikationsleistungs-Portfolio der Agentur LevenAgentur-Leven
 
Das gemeinnützige Schulprojekt "Fotobuch Landkreis Bamberg"
Das gemeinnützige Schulprojekt "Fotobuch Landkreis Bamberg"Das gemeinnützige Schulprojekt "Fotobuch Landkreis Bamberg"
Das gemeinnützige Schulprojekt "Fotobuch Landkreis Bamberg"Arno Schimmelpfennig
 
Präsentation plug in development
Präsentation plug in developmentPräsentation plug in development
Präsentation plug in developmentxxtesaxx
 
Safety Signs Total Construction
Safety Signs Total ConstructionSafety Signs Total Construction
Safety Signs Total ConstructionSIMON CARTWRIGHT
 

Andere mochten auch (17)

Powerpoint Horarios Segundo
Powerpoint Horarios SegundoPowerpoint Horarios Segundo
Powerpoint Horarios Segundo
 
Gost 14063 68
 Gost 14063 68 Gost 14063 68
Gost 14063 68
 
Mobile-portfolio_de
Mobile-portfolio_deMobile-portfolio_de
Mobile-portfolio_de
 
Bachelorarbeit_Jakob_Huber_MDH
Bachelorarbeit_Jakob_Huber_MDHBachelorarbeit_Jakob_Huber_MDH
Bachelorarbeit_Jakob_Huber_MDH
 
Piraten programm (1)
Piraten programm (1)Piraten programm (1)
Piraten programm (1)
 
Freitag
FreitagFreitag
Freitag
 
15 Jahre Fellows Biker-Crew, 06.09.2014
15 Jahre Fellows Biker-Crew, 06.09.201415 Jahre Fellows Biker-Crew, 06.09.2014
15 Jahre Fellows Biker-Crew, 06.09.2014
 
Was tun im Social Web?
Was tun im Social Web?Was tun im Social Web?
Was tun im Social Web?
 
Social Media und Fische
Social Media und FischeSocial Media und Fische
Social Media und Fische
 
IDENTIFICATION LECTURE OF DIFFERENT FIBERS BY DIFFERENT WAYS
IDENTIFICATION LECTURE OF DIFFERENT FIBERS BY DIFFERENT WAYSIDENTIFICATION LECTURE OF DIFFERENT FIBERS BY DIFFERENT WAYS
IDENTIFICATION LECTURE OF DIFFERENT FIBERS BY DIFFERENT WAYS
 
Textuality in Fancy
Textuality in Fancy Textuality in Fancy
Textuality in Fancy
 
Anleitung google plus für ofw-studenten
Anleitung google plus für ofw-studentenAnleitung google plus für ofw-studenten
Anleitung google plus für ofw-studenten
 
Kreatives Kommunikationsleistungs-Portfolio der Agentur Leven
Kreatives Kommunikationsleistungs-Portfolio der Agentur LevenKreatives Kommunikationsleistungs-Portfolio der Agentur Leven
Kreatives Kommunikationsleistungs-Portfolio der Agentur Leven
 
Das gemeinnützige Schulprojekt "Fotobuch Landkreis Bamberg"
Das gemeinnützige Schulprojekt "Fotobuch Landkreis Bamberg"Das gemeinnützige Schulprojekt "Fotobuch Landkreis Bamberg"
Das gemeinnützige Schulprojekt "Fotobuch Landkreis Bamberg"
 
Präsentation plug in development
Präsentation plug in developmentPräsentation plug in development
Präsentation plug in development
 
Safety Signs Total Construction
Safety Signs Total ConstructionSafety Signs Total Construction
Safety Signs Total Construction
 
Zulia
ZuliaZulia
Zulia
 

Ähnlich wie JSON in der Oracle12c Database

20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatengeKarin Patenge
 
Ist GraphQL das bessere REST
Ist GraphQL das bessere RESTIst GraphQL das bessere REST
Ist GraphQL das bessere RESTMartin Abraham
 
20190604_DOAGDatabase2019_OracleNoSQLDB_for_DBAs
20190604_DOAGDatabase2019_OracleNoSQLDB_for_DBAs20190604_DOAGDatabase2019_OracleNoSQLDB_for_DBAs
20190604_DOAGDatabase2019_OracleNoSQLDB_for_DBAsKarin Patenge
 
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im ÜberblickBig Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im ÜberblickKarin Patenge
 
Sesam (APEX) Öffne Dich
Sesam (APEX) Öffne DichSesam (APEX) Öffne Dich
Sesam (APEX) Öffne DichOliver Lemm
 
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatengeKarin Patenge
 
Wie kommt der Client zur Datenbank?
Wie kommt der Client zur Datenbank?Wie kommt der Client zur Datenbank?
Wie kommt der Client zur Datenbank?Markus Flechtner
 
Ausgewählte PL/SQL Packages (2)
Ausgewählte PL/SQL Packages (2)Ausgewählte PL/SQL Packages (2)
Ausgewählte PL/SQL Packages (2)Ulrike Schwinn
 
REST in Peace - Mit ORDS, Node.JS, ADF, Java oder OSB?
REST in Peace  - Mit ORDS, Node.JS, ADF, Java oder OSB?REST in Peace  - Mit ORDS, Node.JS, ADF, Java oder OSB?
REST in Peace - Mit ORDS, Node.JS, ADF, Java oder OSB?enpit GmbH & Co. KG
 
Ruby on Rails in a metro session
Ruby on Rails in a metro sessionRuby on Rails in a metro session
Ruby on Rails in a metro sessionVirttoo org
 
Hybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19cHybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19cUlrike Schwinn
 
Spezialitäten der Oracle Lizenzierung - DOAG Konferenz 2010 - OPITZ CONSULTI...
Spezialitäten der Oracle Lizenzierung -  DOAG Konferenz 2010 - OPITZ CONSULTI...Spezialitäten der Oracle Lizenzierung -  DOAG Konferenz 2010 - OPITZ CONSULTI...
Spezialitäten der Oracle Lizenzierung - DOAG Konferenz 2010 - OPITZ CONSULTI...OPITZ CONSULTING Deutschland
 
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...OPITZ CONSULTING Deutschland
 
Oracle Database Appliance X4-2
Oracle Database Appliance X4-2Oracle Database Appliance X4-2
Oracle Database Appliance X4-2Ileana Somesan
 
SCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - Winterberg
SCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - WinterbergSCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - Winterberg
SCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - WinterbergOPITZ CONSULTING Deutschland
 
Ecm 5 13_djaafar_jas_forge
Ecm 5 13_djaafar_jas_forgeEcm 5 13_djaafar_jas_forge
Ecm 5 13_djaafar_jas_forgeJasmine Conseil
 
REST mit APEX 18.1
REST mit APEX 18.1REST mit APEX 18.1
REST mit APEX 18.1Oliver Lemm
 
Oracle Database 12c Release 2
Oracle Database 12c Release 2 Oracle Database 12c Release 2
Oracle Database 12c Release 2 oraclebudb
 
Überblick zu Oracle Database 12c Release 2
Überblick zu Oracle Database 12c Release 2Überblick zu Oracle Database 12c Release 2
Überblick zu Oracle Database 12c Release 2Ulrike Schwinn
 

Ähnlich wie JSON in der Oracle12c Database (20)

20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge
 
Ist GraphQL das bessere REST
Ist GraphQL das bessere RESTIst GraphQL das bessere REST
Ist GraphQL das bessere REST
 
20190604_DOAGDatabase2019_OracleNoSQLDB_for_DBAs
20190604_DOAGDatabase2019_OracleNoSQLDB_for_DBAs20190604_DOAGDatabase2019_OracleNoSQLDB_for_DBAs
20190604_DOAGDatabase2019_OracleNoSQLDB_for_DBAs
 
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im ÜberblickBig Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
 
Sesam (APEX) Öffne Dich
Sesam (APEX) Öffne DichSesam (APEX) Öffne Dich
Sesam (APEX) Öffne Dich
 
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
 
Wie kommt der Client zur Datenbank?
Wie kommt der Client zur Datenbank?Wie kommt der Client zur Datenbank?
Wie kommt der Client zur Datenbank?
 
Ausgewählte PL/SQL Packages (2)
Ausgewählte PL/SQL Packages (2)Ausgewählte PL/SQL Packages (2)
Ausgewählte PL/SQL Packages (2)
 
REST in Peace - Mit ORDS, Node.JS, ADF, Java oder OSB?
REST in Peace  - Mit ORDS, Node.JS, ADF, Java oder OSB?REST in Peace  - Mit ORDS, Node.JS, ADF, Java oder OSB?
REST in Peace - Mit ORDS, Node.JS, ADF, Java oder OSB?
 
Ruby on Rails in a metro session
Ruby on Rails in a metro sessionRuby on Rails in a metro session
Ruby on Rails in a metro session
 
Hybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19cHybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19c
 
Spezialitäten der Oracle Lizenzierung - DOAG Konferenz 2010 - OPITZ CONSULTI...
Spezialitäten der Oracle Lizenzierung -  DOAG Konferenz 2010 - OPITZ CONSULTI...Spezialitäten der Oracle Lizenzierung -  DOAG Konferenz 2010 - OPITZ CONSULTI...
Spezialitäten der Oracle Lizenzierung - DOAG Konferenz 2010 - OPITZ CONSULTI...
 
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
 
Oracle Database Appliance X4-2
Oracle Database Appliance X4-2Oracle Database Appliance X4-2
Oracle Database Appliance X4-2
 
HA Datasource
HA DatasourceHA Datasource
HA Datasource
 
SCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - Winterberg
SCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - WinterbergSCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - Winterberg
SCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - Winterberg
 
Ecm 5 13_djaafar_jas_forge
Ecm 5 13_djaafar_jas_forgeEcm 5 13_djaafar_jas_forge
Ecm 5 13_djaafar_jas_forge
 
REST mit APEX 18.1
REST mit APEX 18.1REST mit APEX 18.1
REST mit APEX 18.1
 
Oracle Database 12c Release 2
Oracle Database 12c Release 2 Oracle Database 12c Release 2
Oracle Database 12c Release 2
 
Überblick zu Oracle Database 12c Release 2
Überblick zu Oracle Database 12c Release 2Überblick zu Oracle Database 12c Release 2
Überblick zu Oracle Database 12c Release 2
 

JSON in der Oracle12c Database

  • 1. JSON und Oracle12c Die Oracle-Datenbank als JSON Document Store Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Carsten Czarski Business Unit Database Oracle Deutschland B.V. & Co KG
  • 2. Oracle12c für Entwickler Die Datenbank für alle wichtigen Plattformen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | JSON Ruby Oracle ADF Oracle APEX Oracle RDS
  • 3. JSON: JavaScript Object Notation • Sehr einfaches Datenaustauschformat • Einfachere Konzepte als XML • Basiert auf JavaScript-Code • Javascript auch auf Server wichtig: node.js • Breite Unterstützung durch Web-APIs – Google, Twitter, Facebook & Co • Setzt sich mehr und mehr durch { "PONumber" : 1600, "Reference" : "ABULL-20140421“, "Requestor" : "Alexis Bull“, "User" : "ABULL“, "CostCenter" : "A50“, "ShippingInstructions" : { "name" : "Alexis Bull“, "Address" : { ... }, "Phone" : [ ... ] }, "Special Instructions" : null, "AllowPartialShipment" : true, "LineItems" : [{ "ItemNumber" : 1, "Part" : { "Description" : "One Magic Christmas“, "UnitPrice" : 19.95, "UPCCode" : 13131092899 }, "Quantity" : 9 }, {…} ] } Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
  • 4. Flexible Entwicklung mit JSON • Agilität und "Continous Delivery" – Änderungen an Datenstrukturen immer häufiger und flexibler – Lange Zyklen für Schema-Änderungen werden immer weniger akzeptiert Security ...? IT Betrieb ...? Replikation ...? • Ansatz: Ablage als JSON und Parsing zur Query Zeit – Einfache Ablage der JSON-Dokumente in einem 'Document Store' – Parsing zur Abfragezeit – fehlende Attribute "fehlen dann einfach" – NoSQL-Datenbanken, Hadoop Cluster Funktionsbibliothek ...? Relationale Applikationen ...? Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
  • 5. Relationale Tabellen bleiben wichtig. Auf das Zusammenspiel kommt es an. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 5
  • 6. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | JSON and SQL Duality JSON Datenzugriff per REST oder Native API JSON wird in der Datenbank gespeichert Analysen / Queries per SQL Oracle Database 12c SQL
  • 7. Native JSON Unterstützung in der Oracle Datenbank  JSON Dokumente speichern und verwalten • JSON als Text speichern (VARCHAR2, CLOB, BLOB)  Ohne Schema - volle Flexibilität • Kein eigener Datentyp: Nutzung der Standard-Datentypen für Zeichenketten bzw. Binärdaten • Indizierung mit einem 'JSON aware' Index Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |  API Zugriff auf JSON • REST Services • Java API (weitere Programmiersprachen in Planung)  SQL Abfragen direkt auf JSON-Dokumente  Reporting, Analyse und relationaler Zugriff direkt auf JSON-Dokumente  'JSON and SQL duality' 7 JSON ermöglicht schemalose Datenhaltung in der Oracle-Datenbank ... ... aber komplett integriert mit der relationalen Welt!
  • 8. SQL Queries auf JSON-Dokumente: JSON Table Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 8
  • 9. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | SQL Beispiel: JSON_TABLE 9 select reference, requestor, costcenter from po_json, json_table( json, '$.PurchaseOrder' columns ( reference varchar2(30) path '$.Reference', requestor varchar2(25) path '$.Requestor', costcenter varchar2(4) path '$.CostCenter' ) ) /
  • 10. JSON_TABLE für relationale Sichten auf JSON Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 10 REFERENCE REQUESTOR COST --------------------------- ------------------ ---- FORD-20021009123336872PDT Gerry B. Ford R20 JONES-20011127121050471PST Richard J Jones R20 MARTIN-20011127121050401PST Thomas D. Martin S30 CLARK-20021009123337764PDT Edward K. Clark A10 JONES-20011127121042590PST Richard J Jones R20 MARTIN-20011127121040547PST Thomas D. Martin S30 JONES-20021009123336602PDT Richard J Jones R20 WARD-20011127121050511PST Stephen B. Ward S30 BLAKE-20011127121055689PST David E. Blake S30 MARTIN-20011127121048889PST Thomas D. Martin S30 : : :
  • 11. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | JSON Indizierung • Function Based Indizes für … – Bekannte Abfragemuster – Attribute kommen im JSON nur einmal vor – keine Arrays – Basiert auf Function Based Indexes • Volltextindizierung von JSON-Dokumenten auf Basis von Oracle TEXT – Unbekannte Abfragemuster – inkl. Volltextrecherche – Beliebige JSON-Attribute – Basiert auf Oracle TEXT
  • 12. JSON Unterstützung in Oracle12c: Interfaces und APIs  Neue 'Document-Store' API für Entwickler – REST Webservices – Document / Collection APIs für JAVA – Unterstützung für andere Sprachen / Frameworks in Arbeit • SQL Zugriff uneingeschränkt möglich – Treiber wie OCI, JDBC, .NET können sofort mit JSON umgehen – SQL/JSON Operatoren erlauben direktes Arbeiten mit SQL Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
  • 13. REST API für JSON • REST Webservice API zur Arbeit mit JSON-Dokumenten: Kein SQL nötig • Zwei Deployment-Varianten: – Oracle Rest Data Services (aka 'APEX Listener') – Oracle XML DB Protokollserver (XML DB) • Unterstützt die REST Standardoperationen – PUT : Create / Update – GET : Retrieve – DELETE : Delete – POST : JSON Queries, Utility-Funktionen • Konfiguration des REST Service wird komplett in der Datenbank gespeichert Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
  • 14. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Roadmap • JSON mit SQL-Funktionen generieren • JSON Support für PL/SQL – Für APEX-Entwickler wird mit APEX 5.0 das Paket APEX_JSON kommen.
  • 15. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Weitere Informationen • Oracle Dokumentation – XML DB Developers Guide – Kapitel 39: JSON in Oracle Database • Blog des Autors: SQL und PL/SQL in Oracle – http://sql-plsql-de.blogspot.com – Juli 2014: Oracle 12.1.0.2 ist da: Ein Einblick in die JSON-Unterstützung 15
  • 16. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Carsten.Czarski@oracle.com http://tinyurl.com/apexcommunity http://sql-plsql-de.blogspot.com http://plsqlexecoscomm.sourceforge.net http://plsqlmailclient.sourceforge.net Twitter: @cczarski @oraclebudb
  • 17. JSON in der Oracle-Datenbank Vorgehensweise und Funktionen im Detail Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 17
  • 18. • Für JSON wird kein eigener Datentyp verwendet • Alle Typen, die Text aufnehmen können, sind nutzbar VARCHAR2, CLOB, BLOB • JSON- und Nicht-JSON Inhalte können in einer Tabelle gemischt werden Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Schritt 1: Tabelle anlegen 18 create table po_json ( filename varchar2(200), json clob );
  • 19. Schritt 2: JSON Dokumente laden Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 19
  • 20. Schritt 3: Was ist JSON, was ist nicht JSON • SQL Operatoren IS JSON und IS NOT JSON • Check Constraint stellt sicher, dass nur noch JSON gespeichert wird Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 20 select count(*) from po_json where json is json; select count(*) from po_json where json is not json; alter table po_json add constraint ck_isjson check (json is json);
  • 21. • SQL Funktionen JSON_EXISTS, JSON_VALUE, JSON_QUERY und JSON_TABLE • Arbeitsweise immer gleich – JSON-Tabellenspalte oder Literal – JSON Pfadausdruck (JSON Path Expression) – Returning Klausel – Error Handling Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Schritt 4: SQL Abfragen ... 21
  • 22. JSON_QUERY extrahiert JSON "Fragmente" Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 22 select json_query( json, '$.PurchaseOrder.ShippingInstructions' PRETTY ) from po_json; JSON_QUERY -------------------------------------------------------------------------------- [ { "name" : ["Gerry B. Ford"], "address" : ["100 Oracle ParkwayrnRedwood ShoresrnCArn94065rnUSA"], "telephone" : ["650 506 7100"] } ] 1 Zeile wurde ausgewählt.
  • 23. Im Fehlerfall ... wird NULL zurückgegeben Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 23 select json_query( json, '$.PurchaseOrder.ShippingInstrs' PRETTY ) from po_json; JSON_QUERY -------------------------------------------------------------------------------- ? 1 Zeile wurde ausgewählt.
  • 24. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | ... oder eine Fehlermeldung. 24 select json_query( json, '$.PurchaseOrder.ShippingInstrs' PRETTY ERROR ON ERROR ) from po_json; * FEHLER in Zeile 1: ORA-40462: Auswertung von JSON_QUERY hat keinen Wert ergeben
  • 25. JSON_VALUE extrahiert "skalare Werte" Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 25 select json_value( json, '$.PurchaseOrder.Reference[0]' RETURNING VARCHAR2 ) from po_json where rownum < 10; JSON_VALUE ------------------------------------------------------------------ FORD-20021009123336872PDT JONES-20011127121050471PST MARTIN-20011127121050401PST CLARK-20021009123337764PDT :
  • 26. JSON_EXISTS stellt fest, ob ein JSON-Pfad existiert Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 26 select filename from po_json where json_exists( json, '$.PurchaseOrder.Reference' ); FILENAME ----------------------------------------------------------------- FORD-20021009123336872PDT.js JONES-20011127121050471PST.js MARTIN-20011127121050401PST.js CLARK-20021009123337764PDT.js :
  • 27. JSON_TABLE für relationale Sichten auf JSON Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 27 select reference, requestor, costcenter from po_json, json_table( json, '$.PurchaseOrder' columns ( reference varchar2(30) path '$.Reference[0]', requestor varchar2(25) path '$.Requestor[0]', costcenter varchar2(4) path '$.CostCenter[0]' ) ) /
  • 28. JSON_TABLE für relationale Sichten auf JSON Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 28 REFERENCE REQUESTOR COST --------------------------- ------------------ ---- FORD-20021009123336872PDT Gerry B. Ford R20 JONES-20011127121050471PST Richard J Jones R20 MARTIN-20011127121050401PST Thomas D. Martin S30 CLARK-20021009123337764PDT Edward K. Clark A10 JONES-20011127121042590PST Richard J Jones R20 MARTIN-20011127121040547PST Thomas D. Martin S30 JONES-20021009123336602PDT Richard J Jones R20 WARD-20011127121050511PST Stephen B. Ward S30 BLAKE-20011127121055689PST David E. Blake S30 MARTIN-20011127121048889PST Thomas D. Martin S30 : : :
  • 29. JSON_TABLE für geschachtelte Strukturen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 29 select reference, requestor, num, descr, quantity From po_json, json_table( json, '$.PurchaseOrder' columns ( reference varchar2(30) path '$.Reference[0]', requestor varchar2(25) path '$.Requestor[0]', CostCenter varchar2(4) path '$.CostCenter[0]', nested path '$.LineItems[*].LineItem[*]' columns ( num number path '$."u0024".ItemNumber', descr varchar2(40) path '$.Description[0]', quantity number path '$.Part[0]."u0024"."Quantity"' ) ) )
  • 30. JSON_TABLE für relationale Sichten auf JSON Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 30 REFERENCE REQUESTOR NUM DESCR QUANTITY --------------------------- ------------------ ---- ---------------------------------------- -------- FORD-20021009123336872PDT Gerry B. Ford 1 Ordet 4 FORD-20021009123336872PDT Gerry B. Ford 2 The Naked Kiss 3 FORD-20021009123336872PDT Gerry B. Ford 3 Charade 2 FORD-20021009123336872PDT Gerry B. Ford 4 Robocop 2 FORD-20021009123336872PDT Gerry B. Ford 5 Cries and Whispers 4 FORD-20021009123336872PDT Gerry B. Ford 6 Autumn Sonata 4 FORD-20021009123336872PDT Gerry B. Ford 7 Getrud 3 FORD-20021009123336872PDT Gerry B. Ford 8 And the Ship Sails on 1 FORD-20021009123336872PDT Gerry B. Ford 9 Flesh for Frankenstein 4 FORD-20021009123336872PDT Gerry B. Ford 10 The Hidden Fortress 2 FORD-20021009123336872PDT Gerry B. Ford 11 The Importance of Being Earnest 3 FORD-20021009123336872PDT Gerry B. Ford 12 The Vanishing 4 FORD-20021009123336872PDT Gerry B. Ford 13 Cries and Whispers 4 FORD-20021009123336872PDT Gerry B. Ford 14 Beauty and the Beast 2 FORD-20021009123336872PDT Gerry B. Ford 15 And God Created Woman 1 : : : : : FORD-20021009123336872PDT Gerry B. Ford 16 The Magic Flute 1 20 Zeilen ausgewählt.
  • 31. Schritt 5: Volltextindizierung mit Oracle TEXT • Erstellung eines Oracle TEXT Index für JSON Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 31 CREATE INDEX po_search_idx ON po_json (json) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ( 'section group CTXSYS.JSON_SECTION_GROUP SYNC (ON COMMIT)' ) / Index wurde erstellt.
  • 32. Schritt 5: Volltextindizierung mit Oracle TEXT • Erstellung eines Oracle TEXT Index für JSON Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 32 select filename from po_json WHERE json_textcontains( json, '$.PurchaseOrder.LineItems.LineItem.Description', 'Magic' ); TURNER-20021009123338565PDT.js CLARK-2001112712105223PST.js :
  • 33. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Weitere Informationen • Oracle Dokumentation – XML DB Developers Guide – Kapitel 39: JSON in Oracle Database • Blog des Autors: SQL und PL/SQL in Oracle – http://sql-plsql-de.blogspot.com – Juli 2014: Oracle 12.1.0.2 ist da: Ein Einblick in die JSON-Unterstützung 33
  • 34. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Carsten.Czarski@oracle.com http://tinyurl.com/apexcommunity http://sql-plsql-de.blogspot.com http://plsqlexecoscomm.sourceforge.net http://plsqlmailclient.sourceforge.net Twitter: @cczarski @oraclebudb

Hinweis der Redaktion

  1. create table po_json (filename varchar2(200), json clob) /