یکی از ویژگیهای جدید Oracle Database 23c دامنهها – یا SQL Domains یا Application Domains یا Usage Domains است.
به طور خلاصه هر نامی که وجود دارد – تاکید بر این است که Domains برای کمک به توسعه برنامه های کاربردی – تضمین کیفیت داده ها و سازگاری داده ها هستند.
یک schema ممکن است جداول زیادی با ستونهایی داشته باشد که نشانیهای ایمیل را در خود جای داده است، مانند ایمیلهای صورتحساب، ایمیلهای فاکتور و ایمیلهای تماس با مشتری. چالش این بود که چگونه می توان از سازگاری چنین ستون هایی در کل برنامه اطمینان حاصل کرد.
اجازه دهید برخی از نکات اصلی مربوط به دامنه پایگاه داده Oracle 23 را بررسی کنیم.
به ستون LAST_UPDATE_DATE در پایگاه داده Oracle 19c توجه کنید. حتی اگر ستون با مقدار SYSDATE به روز می شود، به دلیل اینکه نوع داده در هر یک از ۳ جدول (DATE، TIMESTAMP، TIMESTAMP WITH TIME ZONE) متفاوت است، مقادیر ستون متفاوت است.
SQL*Plus: Release 19.0.0.0.0 – Production on Mon Oct 23 23:14:42 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Tue Oct 17 2023 21:18:33 -04:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.3.0.0.0
SQL> create table mydate_1
۲ (last_update_date date);
Table created.
SQL> create table mydate_2
۲ (last_update_date timestamp);
Table created.
SQL> create table mydate_3
(last_update_date TIMESTAMP WITH TIME ZONE);
Table created.
SQL> insert into mydate_1
۲ values
۳ (sysdate);
۱ row created.
SQL> insert into mydate_2
۲ values
۳ (sysdate);
۱ row created.
SQL> insert into mydate_3
۲ values
۳ (sysdate);
۱ row created.
SQL> commit;
Commit complete.
SQL> select * from mydate_1;
LAST_UPDATE_DATE
—————–
۲۳-OCT-23
SQL> select * from mydate_2;
LAST_UPDATE_DATE
—————————————————————————
۲۳-OCT-23 11.24.34.000000 PM
SQL> select * from mydate_3;
LAST_UPDATE_DATE
—————————————————————————
۲۳-OCT-23 11.24.44.000000 PM -04:00
اجازه دهید مثالی ببینیم که چگونه در Oracle Database 23c، یک Domain میتواند ایجاد شود و سپس به ستونهای جدول اختصاص داده شود – برنامهها و توسعهدهندگان میتوانند این مقادیر را ذخیره کنند. این باعث می شود اطمینان حاصل شود که آنها به طور مداوم در جداول و برنامه ها مدیریت می شوند.
دامنه INSERT_TIMESTAMP را ایجاد کنید و دامنه را به ستون LAST_UPDATE_DATE اختصاص دهید.
توجه: ما یک نوع داده را به ستون اختصاص نمی دهیم – اما دامنه را اختصاص می دهیم!
ستون LAST_UPDATE_DATE هم محدودیت NOT NULL و هم نوع داده TIMESTAMP را که به دامنه اختصاص داده شده است به ارث می برد.
[oracle@db23c ~]$ sqlplus demo/Oracle_4U@freepdb1
SQL*Plus: Release 23.0.0.0.0 – Production on Wed Oct 25 23:22:16 2023
Version 23.3.0.23.09
Copyright (c) 1982, 2023, Oracle. All rights reserved.
Last Successful login time: Wed Oct 25 2023 23:21:36 -04:00
Connected to:
Oracle Database 23c Free Release 23.0.0.0.0 – Develop, Learn, and Run for Free
Version 23.3.0.23.09
SQL> create domain insert_timestamp as
timestamp
default systimestamp
not null
;
Domain created.
SQL> create table mydate_1
(last_update_date domain insert_timestamp);
Table created.
SQL> create table mydate_2
(last_update_date domain insert_timestamp);
Table created.
SQL> create table mydate_3
(last_update_date domain insert_timestamp);
Table created.
SQL> desc mydate_1
Name Null? Type
—————————————– ——– —————————-
LAST_UPDATE_DATE NOT NULL TIMESTAMP(6) DEMO.INSERT_TIM ESTAMP
جهت دریافت خدمات مشاوره، آموزش و نگهداری پایگاه داده اوراکل با ما در ارتباط باشد
سطرها در ۳ جدول مختلف با ستون LAST_UPDATE_DATE درج می شوند.
توجه داشته باشید که داده های ستونی که از Domain استفاده می کند در هر ۳ جدول یکسان است.
[oracle@db23c ~]$ sqlplus demo/Oracle_4U@freepdb1
SQL*Plus: Release 23.0.0.0.0 – Production on Wed Oct 25 23:26:49 2023
Version 23.3.0.23.09
Copyright (c) 1982, 2023, Oracle. All rights reserved.
Last Successful login time: Wed Oct 25 2023 23:22:16 -04:00
Connected to:
Oracle Database 23c Free Release 23.0.0.0.0 – Develop, Learn, and Run for Free
Version 23.3.0.23.09
SQL> insert into mydate_1
۲ values
۳ (sysdate);
۱ row created.
SQL> insert into mydate_2
۲ values
۳ (sysdate);
۱ row created.
SQL> insert into mydate_3
۲ values
۳ (sysdate);
۱ row created.
SQL> commit;
Commit complete.
SQL> select * from mydate_1;
LAST_UPDATE_DATE
—————————————————————————
۲۵-OCT-23 11.30.45.000000 PM
SQL> select * from mydate_2 ;
LAST_UPDATE_DATE
—————————————————————————
۲۵-OCT-23 11.31.43.000000 PM
SQL> select * from mydate_3 ;
LAST_UPDATE_DATE
—————————————————————————
۲۵-OCT-23 11.32.08.000000 PM
به برخی از data dictionary views توجه کنید که می توانند برای دریافت اطلاعات بیشتر در مورد Domain های مورد استفاده در پایگاه داده استفاده شوند.
SQL> select domain_name(last_update_date) from mydate_1 where rownum =1;
DOMAIN_NAME(LAST_UPDATE_DATE)
—————————————-
DEMO.INSERT_TIMESTAMP
SQL> col name format a20
SQL> set long 50000
SQL> select name, SEARCH_CONDITION from all_domain_constraints where domain_name=’INSERT_TIMESTAMP’;
NAME
——————–
SEARCH_CONDITION
——————————————————————————–
SYS_DOMAIN_C0023
“INSERT_TIMESTAMP” IS NOT NULL
SQL> select object_name from user_objects where object_type=’DOMAIN’;
OBJECT_NAME
——————————————————————————–
INSERT_TIMESTAMP
SQL> select column_name, domain_owner, domain_name from user_tab_columns where table_name = ‘MYDATE_1’;
COLUMN_NAME DOMAIN_OWNER DOMAIN_NAME
——————– ——————– ——————–
LAST_UPDATE_DATE DEMO INSERT_TIMESTAMP
SQL> select name,cols,builtin from user_domains;
NAME COLS BUILTIN
—————————————- ———- ———–
INSERT_TIMESTAMP ۱ FALSE