Oracle 23c جدیدترین نسخه پایگاه داده Oracle، ابزارهای پیشرفتهای را برای کار با دادههای JSON معرفی کرده است. یکی از این ابزارها، رویه JSON_TYPE_CONVERTIBLE_CHECK در بسته DBMS_JSON است که برای بررسی و تایید قابلیت تبدیل ستونهای JSON مبتنی بر متن به نوع دادهی JSON استفاده میشود. در این مقاله به نحوه استفاده از این رویه و حل مشکلات متداول در این فرآیند میپردازیم.
قبل از Oracle 21c، دادههای JSON به صورت متن ذخیره میشدند، معمولاً در ستونهایی با انواع دادههای BLOB، CLOB یا VARCHAR2. با معرفی نوع دادهی JSON در Oracle 21c، نیاز به تبدیل این ستونها به نوع دادهی جدید برای بهبود عملکرد و کارایی احساس شد. این فرآیند میتواند با روشهای مختلفی انجام شود:
با این حال، پیش از شروع تبدیل، باید مطمئن شویم که دادههای موجود در ستونها برای تبدیل مناسب هستند.
راه حل: استفاده از DBMS_JSON.JSON_TYPE_CONVERTIBLE_CHECK
در Oracle 23c، رویه JSON_TYPE_CONVERTIBLE_CHECK به بسته DBMS_JSON اضافه شده است. این رویه به شما اجازه میدهد تا قبل از شروع فرآیند تبدیل، قابلیت تبدیل دادههای JSON مبتنی بر متن را بررسی کنید.
PROCEDURE JSON_TYPE_CONVERTIBLE_CHECK
PROCEDURE JSON_TYPE_CONVERTIBLE_CHECK
Argument Name Type In/Out Default?
—————————— ———————– —— ——–
OWNER VARCHAR2 IN
TABLENAME VARCHAR2 IN
COLUMNNAME VARCHAR2 IN
STATUSTABLENAME VARCHAR2 IN
FASTCHECK BOOLEAN IN DEFAULT
APPENDSTATUS BOOLEAN IN DEFAULT
ایجاد جدول تست
drop table if exists json_data_precheck purge;
drop table if exists json_data purge;
create table json_data (
id number generated always as identity,
data clob
);
افزودن دادههای JSON به جدول تست
insert into json_data (data)
values (null);
insert into json_data (data)
values (‘{}’);
insert into json_data (data)
values (‘{“product”:”banana”, “quantity”:10}’);
commit;
اجرای رویه JSON_TYPE_CONVERTIBLE_CHECK
begin
dbms_json.json_type_convertible_check(
owner => ‘testuser1’,
tablename => ‘json_data’,
columnname => ‘data’,
statustablename => ‘json_data_precheck’
);
end;
/
select * from json_data_precheck;
نتایج نشان میدهد که فرآیند تبدیل بدون خطا تکمیل شده است.
افزودن رکورد مشکلدار و اجرای مجدد رویه
insert into json_data (data)
values (‘banana’);
commit;
drop table if exists json_data_precheck purge;
begin
dbms_json.json_type_convertible_check(
owner => ‘testuser1’,
tablename => ‘json_data’,
columnname => ‘data’,
statustablename => ‘json_data_precheck’
);
end;
/
این بار نتایج نشان میدهد که یک خطا وجود دارد.
اصلاح دادههای مشکلدار و اجرای مجدد رویه
update json_data
set data = ‘{“product”:”banana”, “quantity”:1}’
where id = 4;
commit;
drop table if exists json_data_precheck purge;
begin
dbms_json.json_type_convertible_check(
owner => ‘testuser1’,
tablename => ‘json_data’,
columnname => ‘data’,
statustablename => ‘json_data_precheck’
);
end;
/
پس از تایید صحت دادهها، میتوانید فرآیند تبدیل را انجام دهید:
alter table json_data add (
data2 json
);
update json_data
set data2 = JSON(data);
alter table json_data drop column data;
alter table json_data rename column data2 to data;
اکنون نوع دادهی ستون JSON است و حاوی دادههای تبدیل شده میباشد.
رویه JSON_TYPE_CONVERTIBLE_CHECK در Oracle 23c ابزاری قدرتمند برای بررسی و تبدیل دادههای JSON مبتنی بر متن به نوع دادهی JSON است. این رویه به شما کمک میکند تا قبل از شروع فرآیند تبدیل، اطمینان حاصل کنید که دادههای شما برای این تبدیل مناسب هستند و مشکلات احتمالی را پیش از تبدیل برطرف کنید. این مقاله به شما نشان داد که چگونه میتوانید از این ابزار استفاده کنید و فرآیند تبدیل را به طور کامل مدیریت کنید.