در نسخه های قبل از 23c، از طریق قابلیت comment می توانیم برای objectهایی نظیر table ، table column، materialized view، view کامنت و یا توضیحاتی را ثبت کنیم. comment گذاری با محدودیتهایی هم همراه است برای مثال امکان دسته بندی کامنتها وجود ندارد و به طور کلی همه توضیحات در یک متن طولانی ثبت خواهند شد.
در اوراکل 23c قابلیت Annotation که شباهتهای زیادی به قابلیت comment دارد، ارائه شد که بر اساس آن می توانیم برای objectهایی نظیر table, view, materialized view, index و column توضیحاتی را به صورت دسته بندی شده و بر اساس name و value ثبت کنیم.
برای هر کدام از این objectها می توان تعداد زیادی Annotation_name و Annotation_value تعریف کرد و هر Annotation باید حداقل شامل یک Annotation_name باشد ولی الزامی به تعریف Annotation_value وجود ندارد.
*در نحوه نامگذاری Annotation_nameها محدودیتی وجود ندارد.
SQL> create table STD ( id number annotations (DESCRIPTION1 'student ID',Description2 ‘coooode daneshjoiieee!!’), name varchar2(20) annotations(Description ‘Full Name for students’) ) annotations (DESCRIPTION ‘Student Table’); Table created
کامنتهای ثبت شده برای جدول STD را می توان در ویوی USER_ANNOTATIONS_USAGE مشاهده کرد:
SQL> select object_name,column_name,annotation_name,annotation_value from USER_ANNOTATIONS_USAGE;
OBJEC COLUMN_NAM ANNOTATION_NAME ANNOTATION_VALUE ----- ---------- ------------------------- ------------------------- STD DESCRIPTION Student Table STD ID DESCRIPTION1 student ID STD ID DESCRIPTION2 coooode daneshjoiieee!! STD NAME DESCRIPTION Full Name for students
*دو ویوی user_annotation_values و user_annotations هم می توانند اطلاعات خلاصه تری را در این زمینه نمایش دهند.
امکان حذف Annotationها هم وجود دارد:
SQL> alter table STD modify (id annotations (drop DESCRIPTION1)); Table altered
SQL> select object_name,column_name,annotation_name,annotation_value from USER_ANNOTATIONS_USAGE;
OBJEC COLUMN_NAM ANNOTATION_NAME ANNOTATION_VALUE ----- ---------- ------------------------- ------------------------- STD DESCRIPTION Student Table STD ID DESCRIPTION2 coooode daneshjoiieee!! STD NAME DESCRIPTION Full Name for students
در قسمت زیر چند مثال از نحوه اضافه کردن Annotation را مشاهده خواهید کرد:
SQL> alter table STD annotations (add name1 'value1',name2 'value2',name3 'value3'); Table altered
select object_name,column_name,annotation_name,annotation_value from USER_ANNOTATIONS_USAGE;
OBJEC COLUMN_NAM ANNOTATION_NAME ANNOTATION_VALUE ----- ---------- ------------------------- ------------------------- STD NAME1 value1 STD NAME2 value2 STD NAME3 value3 STD DESCRIPTION Student Table STD ID DESCRIPTION2 coooode daneshjoiieee!! STD NAME DESCRIPTION Full Name for students
SQL> alter table STD modify (name annotations (add N1 'V1',N2 'V2',N3)); Table altered
SQL> select object_name,column_name,annotation_name,annotation_value from USER_ANNOTATIONS_USAGE order by 2,3;
OBJEC COLUMN_NAM ANNOTATION_NAME ANNOTATION_VALUE ----- ---------- ------------------------- ------------------------- STD ID DESCRIPTION2 coooode daneshjoiieee!! STD NAME DESCRIPTION Full Name for students STD NAME N1 V1 STD NAME N2 V2 STD NAME N3 STD DESCRIPTION Student Table STD NAME1 value1 STD NAME2 value2 STD NAME3 value3
همانطور که در ابتدای این متن اشاره شد، علاوه بر table و column می توانیم از این قابلیت برای objectهای دیگر نظیر view هم استفاده کنیم که در ادامه مثالی از آن را می بینیم:
SQL> create or replace view v1 2 (test1 annotations (name1 'value1'), 3 test2 annotations (name2 'value2')) 4 as 5 select 'test2','test1' from dual; View created
SQL> select object_name,column_name,annotation_name,annotation_value from USER_ANNOTATIONS_USAGE where object_name='V1';
OBJECT_NAME COLUMN_NAME ANNOTATION_NAME ANNOTATION_VALUE --------------- --------------- -------------------- -------------------- V1 TEST1 NAME1 value1 V1 TEST2 NAME2 value2