Oracle - JSON Value
Pendahuluan
ini tentang Jason Voorhees kah ? karakter antagonis di film Freddy vs Jason ?
Gambar diambil dari sini
Ooh, tentu tidak, ini tentang JSON (JavaScript Object Notation), yaitu tentang salah satu format data dalam bentuk text.
Format data dalam bentuk text ini biasanya digunakan untuk pertukaran data antara sistem.
RFC atau spesifikasi standarnya bisa dilihat di sini
Misalnya kita lihat di waktu browser internet kita menerima data dari server. Umumnya sekarang berbentuk JSON.
Contohnya :
{
"nama": "Anonim",
"alamat": {
"namaJalan": "Jl. Patriot X No. 5",
"kelurahan": "Anoa 1",
"kecamatan": "Nabati",
"kota": "Omnivora"
},
"pekerjaan": "Pegawai Swasta",
"access": [
"read-data",
"modify-data"
]
}
Kita mendapatkan data informasi seseorang lengkap dengan data alamat rumahnya, dan aksesnya untuk sebuah sistem dalam bentuk JSON.
Data diatas sebenarnya adalah data biasa, kemungkinan besar adalah data yang disimpan di database.
Kemudian diconstruct dalam bentuk JSON agar nanti dengan mudah di terima di sisi FrontEnd dan diparsing sesuai dengan kebutuhan.
Apapun namanya, akan tetapi JSON itu sebenarnya memang diperuntukkan untuk mentransfer data antara satu sistem dengan sistem lain.
Format JSON ini secara umum lebih disukai daripada XML, binary format, Protobuf, atau format lain yang lebih rumit, lebih spesifik terhadap framework/library yang mendukung format tersebut.
Hal ini karena JSON sifatnya memang dalam bentuk text yang mudah diinterpretasi, lebih simple dan mudah dibaca.
Apalagi kalau dilakukan pemrosesan di sisi frontend yang memakai Javascript, maka tidak diperlukan library tambahan untuk melakukan pemrosesan JSON.
Kalau isinya data, tentunya bisa dipakai sebagai database dong ?
Tentu saja, kita bisa saja menyimpan data yang kita inginkan dalam bentuk JSON di server, atau server database.
Tapi karena datanya JSON sudah dalam bentuk yang objek dan biasanya dalam bentuk yang ter-aggregasi, maka secara konsep tidak cocok dengan database relasional / RDBMS, seperti Oracle, MySQL, SQL Server, PostgreSQL, dll, dimana selama ini semua data harus di- normalisasi kan, dan data harus dipisah-pisah dalam bagian-bagian terpisah sesuai entitasnya.
Makanya dari awal JSON Cocoknya dengan database No-SQL yang memang dari awal tidak mensyaratkan normalisasi data.
MongoDB, DynamoDB, Cassandra, CouchDB, dan database berjenis No-SQL lebih cocok untuk menyimpan JSON sebagai data alami/natural bagi mereka.
Aggregasi –> pengumpulan sejumlah benda yang terpisah-pisah menjadi satu .
Kalau kita lihat data JSON diatas, merupakan kombinasi antara data user dengan data kelurahan, kecamatan, provinsi, dan data akses untuk sistem.
Kalau kita lihat di database relasional, maka data JSON diatas mungkin akan tersimpan dalam minimal 3 table terpisah.
Dunia berubah dan beradaptasi, termasuk database.
Penggunaan JSON yang semakin marak seiring dengan berkembangnya pertukaran data antara sistem dengan sistem REST, microservice, dan kecenderungan untuk menyimpan data dalam bentuk schema-less (tidak perlu normalisasi, tidak perlu skema dan aturan kaku dalam menyimpan dan mengambil data, tidak rumit, dll) memaksa database relasional untuk mengadopsi tipe data dalam bentuk JSON ini.
Oleh karena itu kita lihat di database MySQL, PostgreSQL, SQL Server mengadopsi tipe data JSON ini.
Termasuk salah satunya juga Oracle, semenjak Oracle Release 12c, tahun 2013.
Walaupun secara data JSON ini secara internal disimpan sebagai tipe data text , seperti VARCHAR2, NVARCHAR, CLOB (Character Large Object), BLOB(Binary Large Object).
Database relasional/RDBM ini sebenarnya menambahkan fungsionalitas tambahan untuk bisa memproses data JSON di kolom text tersebut, sehingga bisa dengan mudah diambil datanya, diindex, dan ditampilkan.
Sementara datanya sendiri sebenarnya masih dalam bentuk text.
Yaaa, dari awal sebenarnya JSON merupakan format data dalam bentuk text juga. Jadi tidak ada yang aneh sebenarnya.
JSON value di database Oracle
Di database Oracle, data dalam bentuk JSON disimpan menggunakan tipe data VARCHAR2, CLOB, dan BLOB.
Seperti yang dijelaskan diatas sebelumnya, JSON sebenarnya merupakan text biasa dengan format tertentu.
Tidak seperti XML di Oracle, yang mempunyai tipe data sendiri yaitu XMLType.
Tetapi untuk data berbentuk JSON ini, Oracle merekomendasikan selalu menggunakan constraint is_json di script DDL nya agar memastikan bahwa data JSON yang dimasukkan merupakan format JSON yang valid.
Bagaimana mengakses data dalam bentuk JSON di database Oracle ?
Mengakses data dalam bentuk JSON dapat dilakukan dalam 3 cara :
1. Menggunakan fungsi json_value,json_query, atau json_value
misalnya :
Dari data JSON diatas kita simpan misalnya di table CONSUMER di kolom INFO_JSON
select JSON_VALUE(INFO_JSON ,'$.alamat.namaJalan') namaJalan,
JSON_VALUE(INFO_JSON, '$.nama') namaUser
from CONSUMER
2. Menggunakan fungsi json_exists,is json, is not json, json_textcontains
Misalnya :
select count(*)
from CONSUMER
where JSON_EXISTS(INFO_JSON ,'$.alamat.namaJalan')
3. Menggunakan notasi dot untuk mengakses langsung datanya.
Contohnya :
select consumer.INFO_JSON.alamat.namaJalan namaJalan,
consumer.INFO_JSON.nama namaUser,
from CONSUMER consumer
Referensi : https://docs.oracle.com/database/121/ADXDB/json.htm#ADXDB6251