Veritabanı İçerisindeki JSON Değerlerin Karşılaştırılması

Herkese Selam,

Bu yazıda Oracle 18c ile beraber gelen bazı yeni SQL fonksyonlarından bahsedeceğim umarım farkındalık anlamında faydalı bir yazı olur.

Bilindiği üzere Oracle 18c geçtiğimiz Şubat ayında duyuruldu ve kullanıcılara Cloud ortamlarda kullanımlarına açıldı. Bu gelişmeyi takiben Oracle, LiveSQL platformu üzerinden de son kullanıcıların denemeleri üzerine yeni sürümü kullanıma açtı.

Bu yazıya konu olan fonksiyon denemelerini LiveSQL platformu üzerinden gerçekleştireceğim.

Yazımıza konu olan yeni SQL fonksyonları veritabanına kaydettiğimiz json içeriklerin içerik kontrollerini yapıp jsonların uyuşup uyuşmadığını anlayabilmektedir. Mevcut alt yapı ile jsonların içerik kontrollerini yapabilmek için karmaşık sql sorguları geliştirmemiz gerekirken yeni geliştirilen fonskyonlar ile bu kontrol oldukça hızlı ve kolay yapılabilmektedir.

Şimdi bir kaç farklı senaryo deneyerek neler yapabildiğimize bir bakalım.  Öncelikle işe örnek bir tablo ve veri oluşturarak başlayalım.

CREATE TABLE comp_json_values
(
   json_val_1   VARCHAR2 (2000),
   json_val_2   VARCHAR2 (2000),
   use_case_desc VARCHAR2(2000)
);

INSERT INTO comp_json_values
     VALUES (
               '{"key":"k1","value":"v1"}',
               '{"key":"k1","value":"v1"}',
               'Exactly Same');

INSERT INTO comp_json_values
     VALUES (
               '{"key":"k1","value":"v1"}',
               '{"key":"k1" ,  "value":"v1"   }',
               'Exactly Same but having whitespaces');    

INSERT INTO comp_json_values
     VALUES (
               '{"key":"k1","value":"v1"}',
               '{"key":"k2","value":"v2"}',
               'Format:Same - Order:Same - Values:Different');

INSERT INTO comp_json_values
     VALUES (
               '{"key":"k1","value":"v1"}',
               '{"key":"k2","value":"v2","value2":"v3"}',
               'Format:Different - Order:Different - Values:Different');

INSERT INTO comp_json_values
     VALUES (
               '{"key":"k1","value":"v1"}',
               '{"value":"v1","key":"k1"}',
               'Format:Same - Order:Different - Values:Same');

INSERT INTO comp_json_values
     VALUES (
               '{"key":"k1","value":"v1"}',
               '{"value":"v21","key":"k21"}',
               'Format:Same - Order:Different - Values:Different');

INSERT INTO comp_json_values
     VALUES (
               '{"key":"k1","value":"v1"}',
               '{"value2":"v2","key2":"k2"}',
               'Format:Different - Order:Different - Values:Different');

COMMIT;

select * from comp_json_values;

Şimdi yeni alt yapının sunmuş olduğu fonksiyonlar ile json veriyi kontrol edelim. Hangi senaryoda ne gibi sonuçlar alıyoruz.

SELECT json_val_1,
       json_val_2,
       use_case_desc,
       CASE
          WHEN json_equal (json_val_1, json_val_2) THEN 'Match'
          ELSE 'Mismatch'
       END
          json_comp
FROM comp_json_values;

Bu alt yapıyı CASE..WHEN ile kullanabildiğimiz gibi WHERE cümlesinde de kullanabiliyoruz.

SELECT json_val_1, json_val_2, use_case_desc
  FROM comp_json_values
 WHERE json_equal (json_val_1, json_val_2);

select json_val_1, 
       json_val_2, 
       use_case_desc
from comp_json_values
where not json_equal(json_val_1,json_val_2);

Yeni alt yapı ile gelen  yeni fonksiyonlar aynı zamanda PL/SQL içerisinde de basit bir şekilde kullanılabilmektedir.

 

Advertisements

About ... from Emrah METE

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

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 )

Google+ photo

You are commenting using your Google+ 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 )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.