====JSON in der 12c / 18 cDatenbank verarbeiten===== **12c / 18c / 19c **\\ Neben der Eigenschaft als Beschreibungssprache für Datenstrukturen zu dienen, setzt sich [[http://www.json.org/|json]] auch immer mehr bei der Datenspeicherung und -übertragung durch. {{ :images:json_frosh.jpg.png?direct&300|Ein Frosch lernt JSON}} Mit der Oracle Datenbank 12c hat auch Oracle einen json Parser in SQL integriert. Ein eigener Datentyp existiert dazu nicht, die Daten werden in VARCHAR2,CLOB oder BLOB gespeichert. Es kann ein Constraint auf die Spalte in der Tabelle mit den Json Daten gelegt werden der üerprüft ob das Dokument auch wirklich wohl geformt ist. === Ein erstes Beispiel ==== Um den Unterschied zwischen traditionellen Datenhandling mit SQL und dem mit JSON aufzuzeigen, legen wir uns zuvor die Inhalte der EMP Tabelle als JSON Strukturen ab. == Anlegen der Tabelle für die JSON Struktur == Eine Tabelle mit einem CLOB Feld für die JSON Daten, diese werden beim Einfügen über eine Constraint auf Gültigkeit geprüft: create table JSON_EMP ( empno NUMBER(11) , emp_value CLOB CONSTRAINT emp_valid_json CHECK (emp_value IS JSON)); Soll ein BLOB Feld zur Datenspeicherung verwendet werden muss bei den Abfragen mit SQL ein Cast auf Json mit "FORMAT JSON" erfolgen! == Daten aus der EMP Tabelle übertragen == Aus dem Emp Daten das Json Dokument pro Eintrag in der Tabelle erzeugen und dann einfügen: insert into JSON_EMP (empno,emp_value) select empno ,'{' ||' "EMPNO":"'||EMPNO||'"' ||' ,"ENAME":"'||ENAME||'"' ||' ,"JOB":"'||JOB||'"' ||' ,"MGR":"'||MGR||'"' ||' ,"SAL":"'||SAL||'"' ||' ,"COMM":"'||COMM||'"' ||' ,"DEPTNO":"'||DEPTNO||'"' ||'}' from emp / commit; === In den Daten nun suchen ==== Im einfachsten Fall können die Json Elemente direkt in SQL referenziert werden: SELECT j.emp_value.ENAME, j.emp_value.DEPTNO FROM JSON_EMP j; Auf die GROSS/klein Schreibung achten! Muss genau zu dem JSON Dokument passen! === Welchen SQL Funktionen stehen uns zur Verfügung?=== ab 12c Release 1 (12.1.0.2) * [[https://docs.oracle.com/database/121/SQLRF/functions093.htm|JSON_VALUE]] * [[http://docs.oracle.com/database/121/SQLRF/functions091.htm#SQLRF56718|JSON_QUERY]] * [[http://docs.oracle.com/database/121/SQLRF/functions092.htm#SQLRF56973|JSON_TABLE]] Abfragen: * [[http://docs.oracle.com/database/121/SQLRF/conditions010.htm#SQLRF56664|JSON_EXISTS]] * [[http://docs.oracle.com/database/121/SQLRF/conditions010.htm#SQLRF56661|IS JSON]] * [[http://docs.oracle.com/database/121/SQLRF/conditions010.htm#SQLRF56963|JSON_TEXTCONTAINS]] Demnächst mehr ==== Quellen==== Allgemein * [[http://www.json.org/|json]] Oracle: * https://docs.oracle.com/database/121/ADXDB/json.htm#ADXDB6254 * https://livesql.oracle.com/apex/livesql/file/tutorial_EDVE861H6UF4Z20EV0RM4DK2G.html Veranstaltungen: * DOAG 2014 - JSON und die Oracle Database 12c - Carsten Czarski Demo: * https://github.com/oracle/json-in-db