دیتاتایپ JSON در اوراکل 21c

همانطور که می دانید از نسخه 12cR1، دیتابیس اوراکل از JSON پشتیبانی می کند به این معنی که با ارائه چندین تابع، امکان انجام عملیاتی چون اجرای query، ایجاد index و ایجاد view را بر روی فیلدهای JSON Document فراهم می کند.

البته در این نسخه ها(تا قبل از اوراکل 21)، Data Type جدیدی برای JSON معرفی نشده و JSON Documentها باید در نوع داده VARCHAR2، CLOB و یا BLOB ذخیره شوند(نوع داده NCLOB و NVARCHAR2 را هم باید به این مجموعه اضافه کرد) که معمولا نوع داده BLOB برای این کار توصیه می شود(مطالعه مطلب “JSON و دیتابیس اوراکل” پیشنهاد می شود).

SQL> create table tbl_JSON_12c (id number,ettelaat varchar2(4000)  constraint jc1 check (ettelaat is json) );

SQL> insert into tbl_JSON_12c values(2,'{“First_Name”:”Vahid”,”Last_Name”:”Usefzadeh”,”Contact”:{“Email”:”vahidusefzadeh@gmail.com”,”Phone”:”091111111117″}}’);

1 row inserted

SQL> select t.ETTELAAT.Last_Name,t.ETTELAAT.Contact.Email from tbl_JSON_12c t;

LAST_NAME         CONTACT

————–  —————————-

Usefzadeh        vahidusefzadeh@gmail.com

اوراکل در نسخه 21c، نوع داده JSON را معرفی کرده است:

SQL> create table tbl_JSON_21c (id number, ettelaat  json) ;

Table created.

(بیشتر…)

اوراکل21c – بروزرسانی اطلاعات JSON با کمک تابع JSON_TRANSFORM

تابع Json_Transform که در اوراکل نسخه 21c ارائه شد، امکان انجام تغییرات در JSON documentها را فراهم می سازد. این تابع عملکری مشابه با تابع JSON_MERGEPATCH دارد البته با قابلیتهای بسیار بیشتر.

با استفاده از تابع Json_Transform می توان آیتمهای موجود در JSON documentها را UPDATE(SET)، REMOVE و RENAME کرد و یا item جدیدی به آن اضافه نمود.

این تابع می تواند در دستور select و update استفاده شود که استفاده از آن در دستور select صرفا می تواند در خروجی دستور تغییر ایجاد کند و برای بروزرسانی پایدار باید از دستور update استفاده شود.

در ادامه با توضیح عملگرهای SET، INSERT، REMOVE و RENAME بیشتر با تابع Json_Transform آشنا خواهیم شد.

(بیشتر…)

Update بخشی از اطلاعات JSON با کمک تابع JSON_MERGEPATCH – اوراکل 19c

قصد داریم در جدول MYTBL، بخشی از اطلاعات ستون ettelaat که از نوع JSON می باشد را update کنیم به این صورت که مقدار داده first_name، برای id شماره 1، از Vahid به RamTollah تغییر کند:

SQL> select id,ettelaat from mytbl d where id=1;

        ID ETTELAAT

———- ——————————

   1          {

               “first_name“:”Vahid“,

               “last_name“:”Usefzadeh“,

               “Salary“:”500000“,

               “phone“:”09128110000

               }

با انجام بروزرسانی به شیوه رایج در اوراکل، با خطا مواجه خواهیم شد:

SQL> update MYTBL  d set d.ettelaat.first_name =’RamTollah’ where  d.ettelaat.first_name=’Vahid’ and id=1;

ORA-40557: cannot update a JSON value

(بیشتر…)

مقایسه دو مقدار JSON به کمک تابع JSON_EQUAL – اوراکل 18c

اگر دو ستون حاوی اطلاعات JSON را با عملگرهای = و != با هم مقایسه کنیم، این مقایسه صرف نظر از محتوا و بر اساس فرمت اطلاعات انجام خواهد شد برای مثال اطلاعات JSON زیر، محتوای یکسانی دارند اما به دلیل خطوط فاصله بعد از فیلد last_name، فرمت یکسانی ندارند:

SQL>  select count(*)

  from dual

 where ‘{“first_name“:”vahid”,”last_name“:“usefzadeh”}’ =

            ‘{“first_name“:”vahid”,”last_name“:       “usefzadeh”}’;

  COUNT(*)

——–

     0

(بیشتر…)

JSON و دیتابیس اوراکل

از نسخه 12cR1، دیتابیس اوراکل از JSON پشتیبانی می کند به این معنی که با ارائه چندین تابع، امکان انجام عملیاتی چون اجرای query، ایجاد index و ایجاد view بر روی JSON Document را فراهم می سازد به طور مثال می توان با کمک این قابلیت، برای هر یک از فیلدهای موجود در JSON Document ایندکس گذاری کرد.

البته در این نسخه Data Type جدیدی برای JSON معرفی نشده و JSON Documentها باید در نوع داده VARCHAR2، CLOB و یا BLOB ذخیره شوند(نوع داده NCLOB و NVARCHAR2 را هم باید به این مجموعه اضافه کرد) که معمولا نوع داده BLOB برای این کار توصیه می شود.

توجه 1: برای کار با JSON در نسخه های قبلی اوراکل(مثل 11g) هم راهکارهای وجود دارد که یکی از این راهکارها نصب کامپوننت APEX و استفاده از APEX_JSON می باشد.

توجه 2: اوراکل در نسخه 20c نوع داده JSON را برای ذخیره JSON Documentها ارائه کرده است.

(بیشتر…)

نمایش اطلاعات JSON به ساختار رابطه ای(تابع JSON_TABLE)

برای نمایش اطلاعات JSON به صورت relational و همچنین map کردن elementهای استفاده شده در JSON Documentها به یک نوع داده مشخص، می توان از تابع JSON_TABLE استفاده کرد.

به عنوان مثال، در ادامه خواهیم دید که چگونه می توان با کمک تابع JSON_TABLE برای هر کدام از elementهای موجود در JSON Document  جدول myt، نوع داده ای تعریف کرد و این اطلاعات را با ساختار رابطه ای نمایش داد.

(بیشتر…)

نمایش اطلاعات relational به صورت JSON(تابع JSON_OBJECT)

قصد داریم اطلاعات موجود در جدول non_JSON_tbl را به فرمت JSON نمایش دهیم:

SQL> create table non_JSON_tbl(id number,first_name varchar2(100),Last_Name varchar2(100),Email varchar2(100),phone number(12));

Table created

SQL> insert into non_JSON_tbl values(1,’Vahid’,’Usefzadeh’,’vahidusefzadeh@gmail.com’,’09128110897′);

1 row inserted

SQL> commit;

Commit complete

برای این کار می توانیم از تابع JSON_OBJECT استفاده کنیم:

SELECT id,

       JSON_OBJECT(KEY ‘Name‘ VALUE t.first_name,

                   KEY ‘LastName‘ VALUE t.Last_Name) JSON_CONVERT

  FROM non_JSON_tbl t;

        ID           JSON_CONVERT

———- —————————————–

         1 {“Name”:”Vahid”,”LastName”:”Usefzadeh”}

برای نمایش خروجی در دو ستون مجزا می توان کوئری را به صورت زیر نوشت:

SELECT id,

       JSON_OBJECT(KEY ‘Name‘ VALUE t.first_name) JSON_CONVERT1,

       JSON_OBJECT(KEY ‘LastName‘ VALUE t.Last_Name) JSON_CONVERT2

  FROM non_JSON_tbl t;

ID JSON_CONVERT1     JSON_CONVERT2

— —————–               ————————–

  1 {“Name”:”Vahid”}  {“LastName”:”Usefzadeh”}