콘텐츠로 이동

SQLColAttribute

SQLColAttribute#

결과 집합의 열에 대한 속성을 가져오며 열의 수를 판별하는데 사용한다.

Unicode SQLColAttributeW() 동작은 SQLColAttribute()와 동일하다.

구 문#

SQLRETURN  SQLColAttribute (
    SQLHSTMT        stmt,
    SQLSMALLINT         columnNumber,
    SQLSMALLINT         fieldIdentifier,
    SQLCHAR *       charAttributePtr,
    SQLSMALLINT     bufferLength,
    SQLSMALLINT *       stringLengthPtr,
    SQLPOINTER*     numericAttributePtr );

인 자#

자료유형 인자 사용 설명
SQLHSTMT stmt 입력 명령문 핸들
SQLSMALLINT columnNumber 입력 결과 집합에서의 column의 순서, 1부터 시작
SQLSMALLINT fieldIdentifier 입력 알고자 하는 정보의 식별자 SQL_DESC_CASE_SENSITIVE, SQL_DESC_CATALOG_NAME, SQL_DESC_COUNT, SQL_DESC_DISPLAY_SIZE, SQL_DESC_LABEL, SQL_DESC_LENGTH, SQL_DESC_NAME, SQL_DESC_NULLABLE, SQL_DESC_PRECISION, SQL_DESC_SCALE, SQL_DESC_SCHEMA_NAME, SQL_DESC_TABLE_NAME, SQL_DESC_TYPE, SQL_DESC_TYPE_NAME, SQL_DESC_UNSIGNED
SQLCHAR * charAttributePtr 출력 columnNumber 행의 fieldIdentifier 필드가 문자열인 경우 반환된 데이터를 저장할 버퍼의 포인터, 필드 값이 정수이면 사용 안함
SQLSMALLINT bufferLength 입력 *charAttributePtr의 문자 개수, *charAttributePtr가 정수이면 무시
SQLSMALLINT * stringLengthPtr 출력 *charAttributePtr에 반환되는 총 문자열의 바이트 길이(null-termination을 제외)의 포인터
SQLPOINTER* numericAttributePtr 출력 columnNumber 행의 fieldIdentifier 필드 안의 값이 반환될 정수 버퍼의 포인터

결괏값#

SQL_SUCCESS
SQL_INVALID_HANDLE
SQL_ERROR

설 명#

SQLDescribeCol()과 같은 특정 인수 집합을 리턴하는 대신, SQLColAttribute()를 사용하여 특정 열에 대해 수신하려는 속성을 지정할 수 있다. 원하는 정보가 스트링이면 charAttributePtr에 반환된다. 원하는 정보가 숫자이면 numericAttributePtr에 반환된다.

열은 번호 (왼쪽에서 오른쪽으로, 1부터 번호가 매겨짐)에 의해 식별되며 다른 순서로도 설명될 수 있다.

결과 집합의 존재 여부를 판별하기위해 SQLColAttribute()를 호출하기 전에 SQLNumResultCols()를 호출한다.

애플리케이션이 다양한 속성(자료유형과 길이 등)을 모를 경우 SQLBindCol()을 호출하기 전에 이 함수(또는 SQLDescribeCol())를 호출해야 한다.

fieldIdentifier 설명자 유형#

다음 테이블은 SQLColAttribute()에 의해 반환된 설명자 유형을 나열한 것이다.

설명자 (fieldIdentifier) 유형 설명
SQL_DESC_AUTO_UNIQUE_VALUE SQLINTEGER 칼럼의 유형이 자동 증가 데이터인지 여부 SQL_TRUE:증가 SQL_FALSE:불가
SQL_DESC_BASE_COLUMN_NAME SQLCHAR * 결과 집합(result set) 칼럼의 기본 칼럼 이름
SQL_DESC_BASE_TABLE_NAME SQLCHAR * 칼럼이 있는 기본 테이블의 이름
SQL_DESC_CASE_SENSITIVE SQLINTEGER 대소문자 구별 유무
SQL_DESC_CATALOG_NAME SQLCHAR * 칼럼을 포함하는 테이블의 카탈로그
SQL_DESC_CONCISE_TYPE SQLINTEGER 간결한 데이터 유형. datetime과 interval 데이터 타입은 간결한 형태를 반환
SQL_DESC_COUNT SQLINTEGER 결과 집합의 칼럼 개수를 반환
SQL_DESC_DISPLAY_SIZE SQLINTEGER 칼럼의 데이터를 보여주는데 필요한 최대 문자 수
SQL_DESC_FIXED_PREC_SCALE SQLLEN 칼럼에 데이터 소스마다 다른 fixed precision과 0이 아닌 scale을 포함하고 있는지 여부 SQL_TRUE:포함 SQL_FALSE불포함
SQL_DESC_LABEL SQLCHAR * 칼럼의 레이블. 레이블이 없으면 칼럼 이름을 반환하며, 레이블과 칼럼 이름이 모두 없다면 빈 문자열을 반환
SQL_DESC_LENGTH SQLINTEGER 칼럼의 문자열 또는 바이너리 데이터 타입의 최대값 또는 실제 문자열의 길이
SQL_DESC_LITERAL_PREFIX SQLCHAR * 해당 데이터 타입을 리터럴로 사용할 때 인식되는 접두부 문자
SQL_DESC_LITERAL_SUFFIX SQLCHAR * 해당 데이터 타입을 리터럴로 사용할 때 인식되는 접미부 문자
SQL_DESC_LOCAL_TYPE_NAME SQLCHAR * 데이터 타입에 대한 로컬화된 (자국어) 이름
SQL_DESC_NAME SQLCHAR * 칼럼의 이름
SQL_DESC_NULLABLE SQLINTEGER 칼럼이 NULL을 포함할 수 있는지 여부 SQL_NULLABLE:NULL을 포함할 수 있음 SQL_NO_NULLS:NULL을 포함할 수 없음 SQL_NULLABLE_UNKNOWN: 알 수 없음
SQL_DESC_OCTET_LENGTH SQLLEN 문자열 또는 이진 데이터 타입의 길이 (단위: 바이트)
SQL_DESC_PRECISION SQLINTEGER 칼럼의 정밀도 속성
SQL_DESC_SCALE SQLINTEGER 칼럼의 소수자리 수 속성
SQL_DESC_SCHEMA_NAME SQLCHAR * 칼럼을 포함하는 테이블의 스키마
SQL_DESC_SEARCHABLE SQLINTEGER SQL_PRED_NONE:칼럼을 WHERE절에서 사용할 수 없는 경우 (ODBC 2.x의 SQL_UNSEARCHABLE와 동일) SQL_PRED_CHAR: 칼럼을 WHERE절에서 LIKE 조건만 사용할 수 있는 경우 (ODBC 2.x의 SQL_LIKE_ONLY와 동일) SQL_PRED_BASIC: 칼럼을 WHERE절에서 LIKE 조건을 제외한 모든 비교 연산자와 사용할 수 잇는 경우(ODBC 2.x의 SQL_EXCEPT_LIKE와 동일) SQL_PRED_SEARCHABLE: 칼럼을 WHERE절에서 모든 비교 연산자와 함께 사용할 수 있는 경우
SQL_DESC_TABLE_NAME SQLCHAR * 테이블 이름
SQL_DESC_TYPE SQLINTEGER SQL 데이터 타입
SQL_DESC_TYPE_NAME SQLCHAR * 데이터베이스 타입 이름
SQL_DESC_UNNAMED SQLINTEGER SQL_NAMED: 칼럼의 이름 또는 칼럼의 별명이 있는 경우 SQL_UNNAMED: 칼럼의 이름 또는 칼럼의 별명이 없는 경우
SQL_DESC_UNSIGNED SQLINTEGER 칼럼이 UNSIGNED인지 여부
SQL_DESC_UPDATABLE SQLINTEGER 결과 집합(result set) 칼럼의 데이터가 갱신 가능한지 여부를 반환. SQL_ATTR_READONLY: 읽기 전용 SQL_ATTR_WRITE: 읽기 쓰기 가능 SQL_ATTR_READWRITE_UNKNOWN: 갱신 가능 여부 알 수 없음

진 단#

SQLSTATE 설명 부연설명
07009 유효하지 않은 열 번호 columnNumber가 0 이거나 결과 집합의 column의 수 보다 큼
HY000 일반 오류

관련 함수#

SQLBindCol
SQLDescribeCol  
SQLFetch

예 제#

< $ALTIBASE_HOME/sample/SQLCLI/demo_meta8.cpp 참고 >

sprintf(query,"SELECT * FROM DEMO_META8");
if (SQLExecDirect(stmt, (SQLCHAR *)query, SQL_NTS) != SQL_SUCCESS)
{
    execute_err(dbc, stmt, query);
    SQLFreeStmt(stmt, SQL_DROP);
    return SQL_ERROR;
}

SQLNumResultCols(stmt, &columnCount);

for ( i=0; i<columnCount; i++ )
{
    SQLColAttribute(stmt, i+1,
                    SQL_DESC_NAME,
                    columnName, sizeof(columnName), &columnNameLength,
                    NULL);
    SQLColAttribute(stmt, i+1,
                    SQL_DESC_TYPE,
                    NULL, 0, NULL,
                    &dataType);
    if (dataType == SQL_NUMERIC)
    {
        SQLColAttribute(stmt, i+1,
                        SQL_DESC_PRECISION,
                        NULL, 0, NULL,
                        &precision);
    }
    else
    {
        SQLColAttribute(stmt, i+1,
                        SQL_DESC_LENGTH,
                        NULL, 0, NULL,
                        &columnSize);
    }
    SQLColAttribute(stmt, i+1,
                    SQL_DESC_SCALE,
                    NULL, 0, NULL,
                    &scale);
    SQLColAttribute(stmt, i+1,
                    SQL_DESC_NULLABLE,
                    NULL, 0, NULL,
                    &nullable);
}