Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 8.2.1 |  CUBRID 8.3.0 |  CUBRID 8.3.1 |  CUBRID 8.4.0 |  CUBRID 8.4.1 |  CUBRID 8.4.3 |  CUBRID 9.0.0 | 

DB_ATTRIBUTE

데이터베이스 내에서 현재 사용자가 접근 권한을 가진 클래스에 대해 그 속성 정보를 보여준다.

속성명

데이터 타입

설명

attr_name

VARCHAR (255)

속성명

class_name

VARCHAR (255)

속성이 속한 클래스명

attr_type

VARCHAR (8)

인스턴스 속성이면 ‘INSTANCE’, 클래스 속성이면 ‘CLASS’, 공유 속성이면 ‘SHARED’

def_order

INTEGER

클래스에서 속성이 정의된 순서로 0부터 시작함. 상속받은 속성이면 그 상위 클래스에서 정의된 순서임.

from_class_name

VARCHAR (255)

상속받은 속성이면 그 속성이 정의되어 있는 상위 클래스명이 설정되며, 그렇지 않으면 NULL

from_attr_name

VARCHAR (255)

상속받은 속성이며, 이름 충돌이 발생하여 이를 해결하기 위해 그 속성명이 바뀐 경우, 상위 클래스에 정의된 원래 이름임. 그 이외에는 모두 NULL

data_type

VARCHAR (9)

속성의 데이터 타입(_db_attribute의 'CUBRID가 지원하는 데이터 타입' 표의 '의미' 중 하나)

prec

INTEGER

데이터 타입의 전체 자릿수. 전체 자릿수가 명시되지 않은 경우 0임

scale

INTEGER

데이터 타입의 소수점 이하의 자릿수. 소수점 이하의 자릿수가 명시되지 않은 경우 0임

code_set

INTEGER

문자열 타입인 경우, 문자셋(_db_attribute의 'CUBRID가 지원하는 문자셋' 표의 '값' 중 하나). 스트링 타입이 아닌 경우 0.

domain_class_name

VARCHAR (255)

데이터 타입이 객체 타입인 경우 그 도메인 클래스명. 객체 타입이 아닌 경우 NULL

default_value

VARCHAR (255)

기본값으 로서 그 데이터 타입에 관계없이 모두 문자열로 저장. 기본값이 없으면 NULL, 기본값이 NULL이면 'NULL'로 표현됨. 데이터 타입이 객체 타입이면 ‘volume id | page id | slot id ’, 컬렉션 타입이면 ‘ {element 1, element 2, …}’로 표현됨.

is_nullable

VARCHAR (3)

not null 제약이 설정되어 있으면 'NO', 그렇지 않으면 'YES'

정의

CREATE VCLASS db_attribute (
attr_name, class_name, attr_type, def_order, from_class_name, from_attr_name, data_type, prec, scale, code_set, domain_class_name, default_value, is_nullable)
AS
SELECT a.attr_name, c.class_name,
       CASE WHEN a.attr_type = 0 THEN 'INSTANCE'
            WHEN a.attr_type = 1 THEN 'CLASS'
            ELSE 'SHARED' END,
       a.def_order, a.from_class_of.class_name, a.from_attr_name, t.type_name,
       d.prec, d.scale, d.code_set, d.class_of.class_name, a.default_value,
       CASE WHEN a.is_nullable = 0 THEN 'YES' ELSE 'NO' END
FROM _db_class c, _db_attribute a, _db_domain d, _db_data_type t
WHERE a.class_of = c AND d.object_of = a AND d.data_type = t.type_id AND
        (CURRENT_USER = 'DBA' OR
        {c.owner.name} subseteq (
                SELECT set{CURRENT_USER} + coalesce(sum(set{t.g.name}), set{})
                from db_user u, table(groups) as t(g)
                where u.name = CURRENT_USER ) OR
        {c} subseteq (
SELECT sum(set{au.class_of})
                FROM _db_auth au
                WHERE {au.grantee.name} subseteq (
                            SELECT set{CURRENT_USER} + coalesce(sum(set{t.g.name}), set{})
                            from db_user u, table(groups) as t(g)
                            where u.name = CURRENT_USER ) AND
                                    au.auth_type = 'SELECT'));

예제 1

다음 예제에서는 클래스 event의 속성과 각 데이터 타입을 검색한다.

SELECT attr_name, data_type, domain_class_name
FROM db_attribute
WHERE class_name = 'event'
ORDER BY def_order;
  attr_name             data_type             domain_class_name
==================================================================
  'code'                'INTEGER'             NULL
  'sports'              'STRING'              NULL
  'name'                'STRING'              NULL
  'gender'              'CHAR'                NULL
  'players'             'INTEGER'             NULL

예제 2

다음 예제에서는 클래스 female_event와 그 상위 클래스의 속성을 검색한다.

SELECT attr_name, from_class_name
FROM db_attribute
WHERE class_name = 'female_event'
ORDER BY def_order;
  attr_name             from_class_name
============================================
  'code'                'event'
  'sports'              'event'
  'name'                'event'
  'gender'              'event'
  'players'             'event'

예제 3

다음 예제에서는 현재 사용자가 소유하고 있는 클래스 중에서 속성명이 name과 유사한 클래스를 검색한다. (사용자는 PUBLIC)

SELECT a.class_name, a.attr_name
FROM db_class c join db_attribute a ON c.class_name = a.class_name
WHERE c.owner_name = CURRENT_USER AND attr_name like '%name%'
ORDER BY 1;
  class_name            attr_name
============================================
  'athlete'             'name'
  'code'                'f_name'
  'code'                's_name'
  'event'               'name'
  'female_event'        'name'
  'nation'              'name'
  'stadium'             'name'