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”}