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 | 

cci_schema_info

설명

스키마 정보를 읽어온다. 성공적으로 수행되었을 경우 결과는 request handle에 의해 관리되고, fetch, getdata를 통해서 결과를 가져올 수 있다. class_name, attr_nameLIKE 절의 패턴 매칭에 의해서 검색해야 할 경우 flag를 설정한다.

CCI_CLASS_NAME_PATTERN_MATCH, CCI_ATTR_NAME_PATTERN_MATCH 두 개의 flag가 사용되며, OR 연산자( | )로 둘 다 설정할 수 있다. 패턴 매칭을 사용할 경우 LIKE 절을 이용하여 검색한다. 예를 들어, class_name이 "athlete"이고 attr_name이 "code"로 끝나는 칼럼에 대한 정보를 검색하고 싶다면, attr_name의 값을 "%code"로 하여 다음과 같이 입력할 수 있다.

cci_schema_info(conn, CCI_SCH_ATTRIBUTE, "athlete", "%code", CCI_ATTR_NAME_PATTERN_MATCH, &error);

type에 대한 레코드의 구성은 아래 표와 같다.

타입에 대한 레코드 구성

타입

칼럼 순서

칼럼 이름

칼럼 타입

CCI_SCH_CLASS

1

NAME

char*

2

TYPE

short
0 : system class
1 : vclass
2 : class
3 : proxy

CCI_SCH_VCLASS

1

NAME

char*

2

TYPE

short
1 : vclass
3 : proxy

CCI_SCH_QUERY_SPEC

1

QUERY_SPEC

char*

CCI_SCH_ATTRIBUTE

1

NAME

char*

2

DOMAIN

int

3

SCALE

int

4

PRECISION

int

5

INDEXED

int
1 : indexed

6

NON_NULL

int
1 : non null

7

SHARED

int
1 : shared

8

UNIQUE

int
1 : unique

9

DEFAULT

void*

10

ATTR_ORDER

int
base : 1

11

CLASS_NAME

char*

12

SOURCE_CLASS

char*

13

IS_KEY

short
1 : key

CCI_SCH_CLASS_ATTRIBUTE
칼럼의 속성이 INSTANCE 혹은 SHARED인 경우. CCI_SCH_ATTRIBUTE의 칼럼과 같은 순서와 이름의 값을 갖는다.

 

 

 

CCI_SCH_CLASS_METHOD

1

NAME

char*

2

RET_DOMAIN

int

3

ARG_DOMAIN

char*

CCI_SCH_METHOD_FILE

1

METHOD_FILE

char*

CCI_SCH_SUPERCLASS

1

CLASS_NAME

char*

2

TYPE

short

CCI_SCH_SUBCLASS

1

CLASS_NAME

char*

2

TYPE

short

CCI_SCH_CONSTRAINT

1

TYPE
0 : unique
1 : index
2 : reverse unique
3 : reverse index

int

2

NAME

char*

3

ATTR_NAME

char*

4

NUM_PAGES

int

5

NUM_KEYS

int

6

PRIMARY_KEY
1 : primary key

short

7

KEY_ORDER

short
base : 1

CCI_SCH_TRIGGER

1

NAME

char*

2

STATUS

char*

3

EVENT

char*

4

TARGET_CLASS

char*

5

TARGET_ATTR

char*

6

ACTION_TIME

char*

7

ACTION

char*

8

PRIORITY

float

9

CONDITION_TIME

char*

10

CONDITION

char*

CCI_SCH_CLASS_PRIVILEGE

1

CLASS_NAME

char*

2

PRIVELEGE

char*

3

GRANTABLE

char*

CCI_SCH_ATTR_PRIVILEGE

1

ATTR_NAME

char*

2

PRIVILEGE

char*

3

GRANTABLE

char*

CCI_SCH_DIRECT_SUPER_CLASS

1

CLASS_NAME

char*

2

SUPER_CLASS_NAME

char*

CCI_SCH_PRIMARY_KEY

1

CLASS_NAME

char*

2

ATTR_NAME

char*

3

KEY_SEQ

short
base : 1

4

KEY_NAME

char*

CCI_SCH_IMPORTED_KEYS
주어진 테이블의 외래 키 칼럼들이 참조하고 있는 기본 키 칼럼들의 정보를 조회하며, 결과는 PKTABLE_NAME 및 KEY_SEQ 순서로 정렬된다.
이 타입을 인자로 지정하면, class_name에는 외래 키 테이블, attr_name에는 NULL을 지정한다.

1

PKTABLE_NAME

char**

2

PKCOLUMN_NAME

char**

3

FKTABLE_NAME

char**

4

FKCOLUMN_NAME

char**

5

KEY_SEQ

char**

6

UPDATE_ACTION
cascade=0
restrict=1
no action=2
set null=3

int*

7

DELETE_ACTION
cascade=0
restrict=1
no action=2
set null=3

int*

8

FK_NAME

char**

9

PK_NAME

char**

CCI_SCH_EXPORTED_KEYS
주어진 테이블의 기본 키 칼럼들을 참조하는 모든 외래 키 칼럼들의 정보를 조회하며, 결과는 FKTABLE_NAME 및 KEY_SEQ 순서로 정렬된다.
이 타입을 인자로 지정하면, class_name에는 기본 키 테이블, attr_name에는 NULL을 지정한다.

1

PKTABLE_NAME

char**

2

PKCOLUMN_NAME

char**

3

FKTABLE_NAME

char**

4

FKCOLUMN_NAME

char**

5

KEY_SEQ

char**

6

UPDATE_ACTION
cascade=0
restrict=1
no action=2
set null=3

int*

7

DELETE_ACTION
cascade=0
restrict=1
no action=2
set null=3

int*

8

FK_NAME

char**

9

PK_NAME

char**

CCI_SCH_CROSS_REFERENCE
주어진 테이블의 기본 키와 주어진 테이블의 외래 키가 상호 참조하는경우, 해당 외래 키 칼럼들의 정보를 조회하며, 결과는 FKTABLE_NAME 및 KEY_SEQ 순서로 정렬된다.
이 타입을 인자로 지정하면, class_name에는 기본 키 테이블, attr_name에는 외래 키 테이블을 지정한다.

1

PKTABLE_NAME

char**

2

PKCOLUMN_NAME

char**

3

FKTABLE_NAME

char**

4

FKCOLUMN_NAME

char**

5

KEY_SEQ

char**

6

UPDATE_ACTION
cascade=0
restrict=1
no action=2
set null=3

int*

7

DELETE_ACTION
cascade=0
restrict=1
no action=2
set null=3

int*

8

FK_NAME

char**

9

PK_NAME

char**

cci_schema_info 함수에서 인자 type은 인자 class_name, attr_name에 대해 LIKE 절의 패턴 매칭을 지원한다.

패턴 매칭을 지원하는 type 및 class_name, attr_name 입력

type

class_name

attr_name

CCI_SCH_CLASS (VCLASS)

문자열

NULL

CCI_SCH_ATTRIBUTE (CLASS ATTRIBUTE)

문자열

문자열 혹은 NULL
(이 값이 NULL이고 flag가 CCI_ATTR_NAME_PATTERN_MATCH이면 해당 테이블의 모든 칼럼에 대한 정보를 출력한다.)

CCI_SCH_CLASS_PRIVILEGE

문자열

NULL

CCI_SCH_ATTR_PRIVILEGE

NULL

문자열

CCI_SCH_PRIMARY_KEY

문자열

NULL

CCI_SCH_TRIGGER

문자열

NULL

패턴 flag가 설정되지 않을 경우 주어진 테이블 이름 또는 칼럼 이름은 동등 조건(=) 매칭을 사용하며, 따라서 NULL이 주어지면 결과는 없다. 패턴 flag가 설정되어 있을 경우 테이블 이름 또는 칼럼 이름이 NULL이면 LIKE 절의 "%"와 동일한 결과를 얻는다. 즉, 모든 칼럼 정보를 출력한다.

참고 CCI_SCH_CLASS, CCI_SCH_VCLASS의 TYPE 칼럼 : proxy 타입이 추가됨. OLEDB, ODBC, PHP에서 사용할 경우 proxy와 vclass를 구분하지 않고 vclass로 보임. 

구문

int cci_schema_info(int conn_handle, T_CCI_SCHEMA_TYPE type, char *class_name, char *attr_name, char flag, T_CCI_ERROR *err_buf)

  • conn_handle : (IN) 연결 핸들
  • type : (IN) 스키마 타입
  • class_name : (IN) 클래스 이름 또는 NULL 
  • attr_name : (IN) 속성 이름 또는 NULL 
  • flag : (IN) 패턴 매칭 flag(CCI_CLASS_NAME_PATTERN_MATCH 또는 CCI_ATTR_NAME_PATTERN_MATCH)
  • err_buf : (OUT) 데이터베이스 에러 버퍼
리턴 값
  • 성공 : 요청 핸들
  • 실패 : 에러 코드
에러 코드
  • CCI_ER_CON_HANDLE
  • CCI_ER_DBMS
  • CCI_ER_COMMUNICATION
  • CCI_ER_NO_MORE_MEMORY
  • CCI_ER_CONNECT
예제

    conn = cci_connect ("localhost", 33000, "demodb", "dba", "");

 

// get all columns’ information of table "athlete"

    req = cci_schema_info(conn, CCI_SCH_ATTRIBUTE, "athlete", NULL, CCI_ATTR_NAME_PATTERN_MATCH, &error);

 

// get info. of table "athlete"’s column "code".

//req = cci_schema_info(conn, CCI_SCH_ATTRIBUTE, "athlete", "code", 0, &error);

    if (req < 0 )

    {

        fprintf(stdout, "(%s, %d) ERROR : %s [%d] ", __FILE__, __LINE__,error.err_msg, error.err_code );

        goto _END;

    }

res_col_info = cci_get_result_info(req, &cmd_type, &col_count);

    if (!res_col_info && col_count == 0)

    {

        fprintf(stdout, "(%s, %d) ERROR : cci_get_result_info ", __FILE__, __LINE__);

        goto _END;

    }

    res = cci_cursor(req, 1, CCI_CURSOR_FIRST, &error);

    if (res == CCI_ER_NO_MORE_DATA)

    {

        goto _END_WHILE;

    }

    if (res < 0)

    {

        fprintf(stdout, "(%s, %d) ERROR : %s [%d] ", __FILE__, __LINE__,error.err_msg, error.err_code );

        goto _END_WHILE;

    }

 

 

    while (1)

    {

        res = cci_fetch(req, &error);

        if (res <  0)

        {

            fprintf(stdout, "(%s, %d) ERROR : %s [%d] ", __FILE__, __LINE__,error.err_msg, error.err_code );

            goto _END_WHILE;

        }

 

        for (i = 1; i <= col_count; i++)

        {

            if ((res = cci_get_data(req, i, CCI_A_TYPE_STR, &buffer, &ind))<0)

            {

                goto _END_WHILE;

            }

            strcat(query_result_buffer, buffer);

            strcat(query_result_buffer, "|");

        }

        strcat(query_result_buffer, " ");

 

        res = cci_cursor(req, 1, CCI_CURSOR_CURRENT, &error);

        if (res == CCI_ER_NO_MORE_DATA)

        {

            goto _END_WHILE;

        }

        if (res < 0)

        {

            fprintf(stdout, "(%s, %d) ERROR : %s [%d] ", __FILE__, __LINE__,error.err_msg, error.err_code );

            goto _END_WHILE;

        }

    }

_END_WHILE:

    res = cci_close_req_handle(req);

    if (res <  0)

        goto _END;

 

_END:

    if (req > 0)

        cci_close_req_handle(req);

    if ( conn > 0)

        res = cci_disconnect(conn, &error);

    if (res < 0)

        fprintf(stdout, "(%s, %d) ERROR : %s [%d] ", __FILE__, __LINE__,error.err_msg, error.err_code );

 

        fprintf(stdout, "Result : %s ", query_result_buffer);

 

    return 0;