Oracle 12c JSON Desteği

Herkese Selam,

Bu yazıda sizlere Oracle DB 12c 12.1.0.2 sürümü ile beraber gelen JSON desteğinden bahsedeceğim. Umarım farkındalık anlamında faydalı bir yazı olur.

Oracle 12c 12.1.0.2 sürümü ile beraber JSON tipinde veriyi anlayabilir ve sorgulayabilir hale geldi. Bu özellik benim çok hoşuma gitti çünkü genelde application loglarını DB ye kayıt ettikten sonra bu logları sorgulayabilmek ve analiz edebilmek adına ekstra bir şeyler yazmaya ihtiyacımız oluyordu. Bu özellik ile beraber böyle bir ihtiyaç kalktı.

Şimdi bir örnek ile neler yapabileceğimize bir göz atalım. İlk olarak bir tablo yaratmak ile işe başlayalım.

create table applicationLog
(
appId number,
appName varchar2(30),
appLog clob,
  CONSTRAINT applicationLogCons CHECK (appLog IS JSON)
);

Evet tablomuzu yarattık. Burada dikkat etmemiz gereken satır constraint tanımladığımız son satır. Bu noktada Oracle DB ye appLog kolonunda JSON formatında bir data saklayacağımızı söyledik. Sistem artık burada JSON data tutulacağını biliyor.

Şimdi içeri bir kaç satır ekleyelim.

insert into applicationLog values (1,'WebContent','{
		"ad"  				: "emrah",
		"soyad"				: "mete",
		"tckn"				: "147456741232",
		"dogumTarihi"		: "01.01.1987",
		"bolum"				: "Bilgisayar Muhendisligi",
		"okul"				: "Yildiz Teknik Universitesi",
		"sinif"				: "Mezun",
		"adres"				: {	"ilce"	:"kadikoy",
								"sokak"	:"yurt",
								"numara":"56",
								"il"	:"Istanbul"}
}
');

insert into applicationLog values (2,'WebContent','{
		"ad"  				: "ali",
		"soyad"				: "veli",
		"tckn"				: "98752145232",
		"dogumTarihi"		: "01.01.1989",
		"bolum"				: "Bilgisayar Muhendisligi",
		"okul"				: "İstanbul Teknik Universitesi",
		"sinif"				: "Mezun",
		"adres"				: {	"ilce"	:"kartal",
								"sokak"	:"sehirci",
								"numara":"789",
								"il"	:"Istanbul"}
}
');

insert into applicationLog values (3,'WebContent','{
		"ad"  				: "ahmet",
		"soyad"				: "mehmet",
		"tckn"				: "21352145232",
		"dogumTarihi"		: "01.01.1989",
		"bolum"				: "Bilgisayar Muhendisligi",
		"okul"				: "Orta Doğu Teknik Universitesi",
		"sinif"				: "Mezun",
		"adres"				: {	"ilce"	:"maltepe",
								"sokak"	:"sakinlik",
								"numara":"12",
								"il"	:"Istanbul"}
}
');

commit;

Evet içeriye 3 satır kayıt ekledik ve hepsinin appLog kolonunda JSON formatında bir data mevcut. Eğer bu formata uymayan bir kayıt olsaydı sistem bize hata fırlatacaktı.

Şimdi elimizdeki datayı appLog kolonu üzerinden sorgulayalım. JSON data içerisindeki elementleri sorgumuza nasıl dahil edeceğimiz görelim.
Sorgumuz; appLog içersindeki JSON data içersindeki OKUL elementi içerisinde “Yildiz Teknik Üniversitesi” olan kayıtları getirsin.

select  * from applicationLog t1 where t1.applog.okul='Yildiz Teknik Universitesi';

Untitled
Evet sonuçtanda göreceğiniz üzere JSON data üzerinden sorgulama yapmayı başarabildik. Sorguda dikkat edilmesi gereken nokta; appLog içersindeki her elementi appLog”.” şeklinde kullanabiliyor olmamızdır.

Evet şimdi kullanımı pekiştirme adına bir örnek sorgu daya yazalım. Bu sorgu; appLog kolonundaki data içerisinde bulunan adres elementi içerisindeki ilce elementinde “maltepe” yazan kayitların, “tckn” bilgisini ekrana getirecek.

select  t1.appLog.tckn from applicationLog t1 where t1.applog.adres.ilce='maltepe';

tckn

 

 

Evet yukarıdaki örnekte tablomuzu yaratırken aslında appLog kolonunda JSON formatında bir data tutacağımızı bir constraint tanımlayarak söylemiştik. Şimdi içinde constraint tanımlanmamış bir tablo üzerinde bulunan JSON datayı nasıl sorgulayabiliriz bunabakalım.
Öncelikle bir tablo yaratıp içine JSON formatda data olan 1 kayıt ve JSON formatında data barındırmayan bir kayıt ekliyorum.

create table applicationLog2
(
appId number,
appName varchar2(30),
appLog clob
);

insert into applicationLog2 values (1,'WebContent','{
		"ad"  				: "emrah",
		"soyad"				: "mete",
		"tckn"				: "147456741232",
		"dogumTarihi"		: "01.01.1987",
		"bolum"				: "Bilgisayar Muhendisligi",
		"okul"				: "Yildiz Teknik Universitesi",
		"sinif"				: "Mezun",
		"adres"				: {	"ilce"	:"kadikoy",
								"sokak"	:"yurt",
								"numara":"56",
								"il"	:"Istanbul"}
}
');

insert into applicationLog2 values (2,'WebContent','Bu data JSON degil');

commit;

Evet şimdi appLog kolonunda JSON formatında data olan kayıtları bulalım.

select  * from applicationLog2 t1 where t1.appLog is JSON;

Untitled
“IS JSON” söz deyimini kullanarak appLog kolonunda JSON data içeren kayıtları listeledik.
Şimdi içerisinde JSON data bulunan kayıtların sorguda nasıl kullanılacağına bakalım.

select  JSON_VALUE(t1.appLog, '$.ad') from applicationLog2 t1 where t1.appLog is JSON;

“JSON_VALUE” komutu ile appLog içerisinde bulunan data içindeki elementleri sorgu içine aktif bir şekilde sokabildik.
Aynı şekilde where clause içerisinde de bu şekilde kullanabilirdik.

select  * from applicationLog2 t1 where t1.appLog is JSON and JSON_VALUE(t1.appLog, '$.ad') = 'emrah';

Untitled
Evet yukarıdaki örnekler üzerinden kavrayabildiğimiz üzere Oracle 12 12.1.0.2 sürümü ile JSON desteğinin geliyor olması özellikle uygulama loglarını işlemede elimizi çok kolaylaştırmakta. Bu konu hakkında daha detaylı bilgi edinmek için aşağıdaki linki takip edebilirsiniz. Umarım farkındalık anlamında faydalı bir yazı olmuştur.

 

Kaynaklar

https://docs.oracle.com/database/121/ADXDB/json.htm

 

Advertisements

About ... from Emrah METE

Bilgisayar Mühendisi
This entry was posted in Oracle, Uncategorized and tagged , , , , , , . Bookmark the permalink.

2 Responses to Oracle 12c JSON Desteği

  1. beyhan says:

    sorgunun sonuna yazdığımız where’den farklı olarak nasıkullanılırabilir?

  2. sorgunun where ve projection kısmında kullanılabiliyor olması bir çok problemi çözebilir diye düşünüyorum. Eğer farklı bir probleminiz var ise spesifik olarak nasıl yapılabileceğini düşünebiliriz.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s