Annotation 사용하기(comment와 유사한)
annotation은 comment와 같이
추가 속성 메타데이터이며
이 정보를 관리하기 위해 사용할 수 있을 듯합니다.
다만 comment와는 다르게 편의를 위해 애플리케이션, 모듈 및 마이크로서비스 간에
메타데이터 정보를 공유할 수 있으며
편의를 위해 데이터베이스에서 중앙 집중식으로
저장하여 사용할 수 있다고 합니다.
annotation을 사용하여 비즈니스 논리, 사용자 인터페이스의 정보를 지정, 저장하거나
데이터베이스 개체에 대한 정보 메타데이터를 저장소와 같이 활용하여 저장하고
이를 중앙 집중식으로 관리하고 보여주기 위해 사용할 수 있는 거 같습니다.
comment와 annotation의 차이점(아래와 같다고 합니다)
1. 인덱스, 프로시저, 트리거, 도메인등 다른 오브젝트에 사용 가능 여부
2. 내용 추가에 용이하다
3. annotation은 하나의 DDL 문으로 여러 annotation을 생성할 수 있다.
4. annotation은 하나의 뷰에서 모든 내용을 조회할 수 있다.
지원하는 오브젝트
1. Tables and Table columns
2. Views and view columns
3. Materialized views and Materialized view columns
4. Indexes
5. Domains and multi-column domain columns
annotation을 추가할려면 annotation을 추가하고자 하는 오브젝트에 대해 create, alter 권한이 있어야 합니다.
Syntax
annotations
::= 'ANNOTATIONS' '(' annotations_list ')'
annotations_list
::= ( 'ADD' | 'DROP' )? annotation ( ',' ( 'ADD' | 'DROP' )? annotation )*
annotation
::= annotation_name annotation_value?
annotation_name
::= identifier
annotation_value
::= character_string_literal
|
사용 방법에 대해서 알아 보겠습니다.
먼저 현재 annotation 정보가 있는지 확인합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
SQL> set lines 200
SQL> set pages 200
SQL> col object_name format a25
SQL> col object_type format a12
SQL> col column_name format a15
SQL> col annotation_name format a20
SQL> col annotation_value format a25
SQL>
SQL> select object_name
2 , object_type
3 , column_name
4 , annotation_name
5 , annotation_value
6 from user_annotations_usage
7 order by annotation_name, annotation_value;
선택된 레코드가 없습니다.
|
annotation을 포함한 테이블을 생성합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
SQL> create table annotation_test
2 (cd_main varchar2(10) annotations(display '메인 코드')
3 ,cd_sub varchar2(10) annotations(display 'ㅋㅋㅋ')
4 ,code_value varchar2(100))
5 annotations(tabname '메인 코드 테이블');
테이블이 생성되었습니다.
SQL> select object_name
2 , object_type
3 , column_name
4 , annotation_name
5 , annotation_value
6 from user_annotations_usage
7 order by annotation_name, annotation_value;
OBJECT_NAME OBJECT_TYPE COLUMN_NAME ANNOTATION_NAME ANNOTATION_VALUE
------------------------- ------------ --------------- -------------------- -------------------------
ANNOTATION_TEST TABLE CD_SUB DISPLAY ㅋㅋㅋ
ANNOTATION_TEST TABLE CD_MAIN DISPLAY 메인 코드
ANNOTATION_TEST TABLE TABNAME 메인 코드 테이블
|
테이블 레벨에서 annotation을 추가하고 삭제해 봅니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
SQL> alter table annotation_test annotations(created 'kwan');
테이블이 변경되었습니다.
SQL> select object_name
2 , object_type
3 , column_name
4 , annotation_name
5 , annotation_value
6 from user_annotations_usage
7 order by annotation_name, annotation_value;
OBJECT_NAME OBJECT_TYPE COLUMN_NAME ANNOTATION_NAME ANNOTATION_VALUE
------------------------- ------------ --------------- -------------------- -------------------------
ANNOTATION_TEST TABLE CREATED kwan
ANNOTATION_TEST TABLE CD_SUB DISPLAY ㅋㅋㅋ
ANNOTATION_TEST TABLE CD_MAIN DISPLAY 메인 코드
ANNOTATION_TEST TABLE TABNAME 메인 코드 테이블
SQL> alter table annotation_test annotations(drop created);
테이블이 변경되었습니다.
SQL> select object_name
2 , object_type
3 , column_name
4 , annotation_name
5 , annotation_value
6 from user_annotations_usage
7 order by annotation_name, annotation_value;
OBJECT_NAME OBJECT_TYPE COLUMN_NAME ANNOTATION_NAME ANNOTATION_VALUE
------------------------- ------------ --------------- -------------------- -------------------------
ANNOTATION_TEST TABLE CD_SUB DISPLAY ㅋㅋㅋ
ANNOTATION_TEST TABLE CD_MAIN DISPLAY 메인 코드
ANNOTATION_TEST TABLE TABNAME 메인 코드 테이블
|
테이블 레벨의 annotation으로 tabdescription을 추가하고 cd_sub 컬럼에 잘못된 annotation을 변경해 줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
SQL> alter table annotation_test annotations(add tabDescription '시스템 메인 코드 테이블');
테이블이 변경되었습니다.
SQL> alter table annotation_test modify cd_sub annotations(drop display, add display '서브 코드');
테이블이 변경되었습니다.
SQL> select object_name
2 , object_type
3 , column_name
4 , annotation_name
5 , annotation_value
6 from user_annotations_usage
7 order by annotation_name, annotation_value;
OBJECT_NAME OBJECT_TYPE COLUMN_NAME ANNOTATION_NAME ANNOTATION_VALUE
------------------------- ------------ --------------- -------------------- -------------------------
ANNOTATION_TEST TABLE CD_MAIN DISPLAY 메인 코드
ANNOTATION_TEST TABLE CD_SUB DISPLAY 서브 코드
ANNOTATION_TEST TABLE TABDESCRIPTION 시스템 메인 코드 테이블
ANNOTATION_TEST TABLE TABNAME 메인 코드 테이블
|
뷰를 생성하면서 뷰 레벨과 뷰컬럼 레벨에서 annotation을 추가해 봅니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
SQL> create or replace view empdept_annotation_test
2 (employee_id annotations (Identity, display 'employee Id', category 'emp info')
3 ,first_name annotations (display 'employee name', category 'emp info')
4 ,last_name
5 ,department_name annotations (category 'emp info'))
6 annotations (title 'employee view')
7 as
8 select e.employee_id, e.first_name, e.last_name, d.department_name
9 from employees e, departments d
10 where e.department_id = d.department_id
11 and salary>1000;
뷰가 생성되었습니다.
SQL> select object_name
2 , object_type
3 , column_name
4 , annotation_name
5 , annotation_value
6 from user_annotations_usage
7 order by annotation_name, annotation_value;
OBJECT_NAME OBJECT_TYPE COLUMN_NAME ANNOTATION_NAME ANNOTATION_VALUE
------------------------- ------------ --------------- -------------------- -------------------------
EMPDEPT_ANNOTATION_TEST VIEW EMPLOYEE_ID CATEGORY emp info
EMPDEPT_ANNOTATION_TEST VIEW DEPARTMENT_NAME CATEGORY emp info
EMPDEPT_ANNOTATION_TEST VIEW FIRST_NAME CATEGORY emp info
EMPDEPT_ANNOTATION_TEST VIEW EMPLOYEE_ID DISPLAY employee Id
EMPDEPT_ANNOTATION_TEST VIEW FIRST_NAME DISPLAY employee name
ANNOTATION_TEST TABLE CD_MAIN DISPLAY 메인 코드
ANNOTATION_TEST TABLE CD_SUB DISPLAY 서브 코드
EMPDEPT_ANNOTATION_TEST VIEW EMPLOYEE_ID IDENTITY
ANNOTATION_TEST TABLE TABDESCRIPTION 시스템 메인 코드 테이블
ANNOTATION_TEST TABLE TABNAME 메인 코드 테이블
EMPDEPT_ANNOTATION_TEST VIEW TITLE employee view
11 행이 선택되었습니다.
|
인덱스를 생성하면서 인덱스에 annotaion 정보를 줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
SQL> create index annotation_test_idx1
2 on annotation_test(cd_main, cd_sub)
3 annotations(Index_Description 'annotation_test Index');
인덱스가 생성되었습니다.
SQL> select object_name
2 , object_type
3 , column_name
4 , annotation_name
5 , annotation_value
6 from user_annotations_usage
7 order by annotation_name, annotation_value;
OBJECT_NAME OBJECT_TYPE COLUMN_NAME ANNOTATION_NAME ANNOTATION_VALUE
------------------------- ------------ --------------- -------------------- -------------------------
EMPDEPT_ANNOTATION_TEST VIEW DEPARTMENT_NAME CATEGORY emp info
EMPDEPT_ANNOTATION_TEST VIEW FIRST_NAME CATEGORY emp info
EMPDEPT_ANNOTATION_TEST VIEW EMPLOYEE_ID CATEGORY emp info
EMPDEPT_ANNOTATION_TEST VIEW EMPLOYEE_ID DISPLAY employee Id
EMPDEPT_ANNOTATION_TEST VIEW FIRST_NAME DISPLAY employee name
ANNOTATION_TEST TABLE CD_MAIN DISPLAY 메인 코드
ANNOTATION_TEST TABLE CD_SUB DISPLAY 서브 코드
EMPDEPT_ANNOTATION_TEST VIEW EMPLOYEE_ID IDENTITY
ANNOTATION_TEST_IDX1 INDEX INDEX_DESCRIPTION annotation_test Index
ANNOTATION_TEST TABLE TABDESCRIPTION 시스템 메인 코드 테이블
ANNOTATION_TEST TABLE TABNAME 메인 코드 테이블
EMPDEPT_ANNOTATION_TEST VIEW TITLE employee view
12 행이 선택되었습니다.
|
위와 같이 새로운 Feature인 annotation을 확인해 봤습니다.
정리하며
오라클의 매뉴얼에는 어플리케이션에서 표시할 수 있는 정보를 관리할 수 있는 용도를 예로 줬습니다.
그렇듯 개발자나 관리자가 해당 정보를 유용하게 사용할 수 있는 내용으로 사용하면 좋을 듯합니다.
그리고 한 곳(dba_annotations_usage)에서 모든 정보를 확인할 수 있어
개발자가 쉽게 참고해서 사용할 수 있을 거 같습니다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
11 | (23c 신기능) GROUP BY 절에 컬럼 별칭이나 포지션 사용 | 명품관 | 2023.04.26 | 992 |
10 | (23c 신기능) UPDATE 문장을 위한 Default 값 NULL 설정 가능 | 명품관 | 2023.04.26 | 647 |
9 | (23c 신기능) PL/SQL 에서 SQL로 Transpiler 자동변환(Automatic PL/SQL to SQL Transpiler) | 명품관 | 2023.04.25 | 283 |
8 | (23c 신기능) INTERVAL 데이터타입에 집계함수와 분석함수 사용 가능 | 명품관 | 2023.04.20 | 389 |
7 | (23c 신기능) 23c에서 개발자를 위해 새로 추가된 DB_DEVELOPER_ROLE role | 명품관 | 2023.04.19 | 280 |
6 | (23c 신기능) IF EXISTS와 IF NOT EXISTS 사용 | 명품관 | 2023.04.18 | 1531 |
» | (23c 신기능) Annotation 사용하기(comment와 유사한) | 명품관 | 2023.04.18 | 236 |
4 | (23c 신기능) Direct Joins for UPDATE and DELETE Statements(직접 조인을 사용한 UPDATE, DELETE) | 명품관 | 2023.04.12 | 224 |
3 | JSON-Relational Duality View 튜토리얼 | 명품관 | 2023.04.10 | 188 |
2 | 오라클 프로세스 prefix가 ora_ 에서 db_로 변경 | 명품관 | 2023.04.06 | 222 |
1 | Oracle Database 23c Free Install with Oracle Linux 8.2(리눅스 8.2 버전에서 오라클 23c 설치) [1] | 명품관 | 2023.04.05 | 1659 |