اوراکل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 آشنا خواهیم شد.

SET: با استفاده از عبارت SET می توان فیلدی را به JSON document اضافه و یا مقدار موجود را بروزرسانی کرد. برای مثال، از طریق کوئری زیر، به ستون ettelaat که حاوی Json Decument است، آیتم City را اضافه می کنیم(البته صرفا در خروجی دستور):

select json_transform(ettelaat,

                      set ‘$.City’ = ‘Tehran}’ returning clob pretty) as data

  from usef.tbl_JSON_21c

 where rownum = 1;

 

{

  “First_Name” : “Vahid”,

  “Last_Name” : “Usefzadeh”,

  “Contact” :

  {

    “Email” : “vahidusefzadeh@gmail.com”,

    “Phone” : “091111111117”

  },

  “City” : “Tehran}”

}

برای بروزرسانی اطلاعات جدول، باید از دستور update به جای دستور select استفاده کنیم:

SQL> update tbl_JSON_21c

  2     set ettelaat = json_transform(ettelaat, set ‘$.City’ = ‘Tehran}’)

  3   where id = 2;

1 row updated

SQL> select json_serialize(t.ettelaat) from tbl_JSON_21c t;

{

  “First_Name” : “Vahid”,

  “Last_Name” : “Usefzadeh”,

  “Contact” :

  {

    “Email” : “vahidusefzadeh@gmail.com”,

    “Phone” : “09128110897”

  },

  “City” : “Tehran}”

}

در صورتی که item از قبل موجود باشد، مقدار قبلی بروزرسانی خواهد شد:

select json_transform(ettelaat,

                      set ‘$.Last_Name’=’Firozjah}’

                      returning clob pretty) as data

from   usef.tbl_JSON_21c

where rownum=1;

{

  “First_Name” : “Vahid”,

  “Last_Name” : “Firozjah}”,

  “Contact” :

  {

    “Email” : “vahidusefzadeh@gmail.com”,

    “Phone” : “091111111117”

  }

}

INSERT: برای درج یک فیلد جدید در JSON DECUMENT می توان از عملگر INSERT استفاده کرد:

select json_transform(ettelaat,

                      insert ‘$.Last_Name2’=’Firozjah}’

                      returning clob pretty) as data

from   usef.tbl_JSON_21c

where rownum=1;

{

  “First_Name” : “Vahid”,

  “Last_Name” : “Usefzadeh”,

  “Contact” :

  {

    “Email” : “vahidusefzadeh@gmail.com”,

    “Phone” : “09128110897”

  },

  “Last_Name2” : “Firozjah}”

}

در زمان استفاده از عبارت INSERT اگر item از قبل موجود باشد، دستور با خطا مواجه خواهد شد:

select json_transform(ettelaat,

                      insert ‘$.Last_Name’=’Firozjah}

                      returning clob pretty) as data

from   usef.tbl_JSON_21c

where rownum=1;

ORA-40763: existing value in JSON_TRANSFORM ()

 

REMOVE: برای حذف یک آیتم از عبارت REMOVE استفاده می شود:

select json_transform(ettelaat,

                      REMOVE ‘$.Last_Name’

                      returning clob pretty) as data

from   usef.tbl_JSON_21c

where rownum=1;

{

  “First_Name” : “Vahid”,

  “Contact” :

  {

    “Email” : “vahidusefzadeh@gmail.com”,

    “Phone” : “09128110897”

  }

}

RENAME: برای تغییر نام یک فیلد می توان از عملگر RENAME استفاده کرد:

select json_transform(ettelaat,

                      rename ‘$.First_Name’ = ‘F_Name’

                      returning clob pretty) as data

from   usef.tbl_JSON_12c_varchar

where rownum=1;

{

  “Last_Name” : “Usefzadeh”,

  “Contact” :

  {

    “Email” : “vahidusefzadeh@gmail.com”,

    “Phone” : “09128110897”

  },

  “F_Name” : “Vahid”

}

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.