콘텐츠로 이동

SQLColumns

SQLColumns#

특정 테이블의 열들의 정보들을 결과 집합 형태로 받을 수 있다.

Unicode SQLColumnsW() 동작은 SQLColumns()와 동일하다.

구 문#

SQLRETURN  SQLColumns (
    SQLHSTMT        stmt,
    SQLCHAR *       cName,
    SQLSMALLINT         cNameLength,
    SQLCHAR *       sName,
    SQLSMALLINT         sNameLength,
    SQLCHAR *       tName,
    SQLSMALLINT         tNameLength,
    SQLCHAR *       colName,
    SQLSMALLINT     colNameLength );

인 자#

자료유형 인자 사용 설명
SQLHSTMT stmt 입력 명령문 핸들
SQLCHAR* cName 입력 카탈로그 이름
SQLSMALLINT cNameLength 입력 *cName의 문자 개수
SQLCHAR * sName 입력 검색할 스키마 이름
SQLSMALLINT sNameLength 입력 *sName의 문자 개수
SQLCHAR * tName 입력 검색할 테이블의 이름
SQLSMALLINT tNameLength 입력 *tName의 문자 개수
SQLCHAR * colName 입력 검색할 열
SQLSMALLINT colNameLength 입력 *colName의 문자 개수

결괏값#

SQL_SUCCESS
SQL_SUCCESS_WITH_INFO
SQL_INVALID_HANDLE
SQL_ERROR

설 명#

이 함수는 전형적으로 데이터베이스 카탈로그에서 테이블 열에 대한 정보를 검색 하기위해 명령문 실행 전에 사용된다. SQLColumns()는 SQLTables()에 의해 반환된 모든 데이터 타입의 데이터를 검색하는데 사용할 수 있다. 대조적으로, 함수 SQLColAttribute()와 SQLDescribeCol()은 결과 집합의 열들을 묘사하고 함수 SQLNumResultCols()는 결과 집합의 열들의 수를 반환한다.

SQLColumns()은 TABLE_CAT, TABLE_SCHEM, TABLE_NAME, 그리고 ORDINAL_POSITION에 의해 순서화된 표준 결과 집합 형태로 결과들을 반환한다.

SQLStatistics()에 의해 반환된 열들 중 몇몇은 SQLColumns()에 의해 반환되지 않는다. 예를 들어, SQLColumns()는 SALARY + BENEFITS 또는 DEPT = 0012 등의 표현식이나 필터에 의해 생성된 인덱스 열들은 반환하지 않는다.

SQLColumns()에 의해 반환 되는 열#

다음 테이블은 결과 집합의 열들을 나열한다.

열 이름 열 번호 자료 유형 설명
TABLE_CAT 1 VARCHAR 항상 NULL 반환
TABLE_SCHEM 2 VARCHAR 스키마 이름; 데이터베이스에 적절하지 않은 경우 NULL
TABLE_NAME 3 VARCHAR (NOT NULL) 테이블 이름
COLUMN_NAME 4 VARCHAR (NOT NULL) 열 이름
DATA_TYPE 5 SMALLINT (NOT NULL) SQL 데이터 타입
TYPE_NAME 6 VARCHAR (NOT NULL) DATA_TYPE에 대응하는 데이터 타입의 이름을 나타내는 문자 스트링
COLUMN_SIZE 7 INTEGER 문자 데이터 타입의 경우, 칼럼의 최대 문자열 길이가 반환된다. Date 데이터 타입의 경우, 이 칼럼은 날짜 값을 문자열로 변환한 값을 표시하는데 필요한 문자의 개수를 반환한다. 숫자 데이터 타입의 경우, 이 값은 숫자의 자리수이다.
BUFFER_LENGTH 8 INTEGER 자료를 저장하는 최대 바이트
DECIMAL_DIGITS 9 SMALLINT 칼럼의 소수점 이하 자리수(scale). scale이 적용될 수 없는 데이터 타입의 경우, NULL이 반환된다.
NUM_PREC_RADIX 10 SMALLINT 숫자형 데이터 타입의 열일 경우 이 값은 10이 반환되며, COLUMN_SIZE와 DECIMAL_DIGITS는 이 열에 허용된 십진 자릿수가 반환된다. 예를 들어 DECIMAL(12,5)인 칼럼의 경우 NUM_PREC_RADIX는 10, COLUMN_SIZE는 12 그리고 DECIMAL_DIGITS는 5가 반환될 것이다.
NULLABLE 11 SMALLINT (NOT NULL) 열이 널 값을 허용하지 않는 경우 SQL_NO_NULLS 허용 할 경우 SQL_NULLABLE
REMARKS 12 VARCHAR 열에 대한 설명 정보
COLUMN_DEF 13 VARCHAR 열의 디폴트 값
SQL_DATA_TYPE 14 SMALLINT (NOT NULL) SQL 데이터 타입
SQL_DATETIME_SUB 15 SMALLINT Date 데이터 타입을 위한 subtype 코드. 이외의 데이터 타입인 경우 null이 반환
CHAR_OCTET_LENGTH 16 INTEGER 문자나 바이너리 데이터 타입 열의 최대 자릿수. 이외의 데이터 타입일 경우 널이 반환
ORDINAL_POSITION 17 INTEGER (NOT NULL) 테이블의 열의 순서 위치. 테이블의 처음 열은 번호가 1이다.
IS_NULLABLE 18 VARCHAR NO : 열이 널들을 포함하지 않을 때. YES : 열이 널들을 포함할 때

진 단#

SQLSTATE 설명 부연설명
08S01 통신 회선 장애 (데이터 송수신 실패) Altibase CLI 드라이버와 데이터베이스 간에 함수 처리가 완료되기 전에 통신 회선 실패
HY000 일반 오류

관련 함수#

SQLBindCol
SQLFetch
SQLStatistics
SQLTables

예 제#

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

if (SQLColumns(stmt,NULL, 0,
               (SQLCHAR *)USERNAME, SQL_NTS,
               (SQLCHAR *)"DEMO_META2", SQL_NTS,
               NULL, 0) != SQL_SUCCESS)
{
    execute_err(dbc, stmt, "SQLColumns");
    SQLFreeStmt(stmt, SQL_DROP);
    return SQL_ERROR;
}

SQLBindCol(stmt, 1, SQL_C_CHAR, szCatalog, STR_LEN, &cbCatalog);
SQLBindCol(stmt, 2, SQL_C_CHAR, szSchema, STR_LEN, &cbSchema);
SQLBindCol(stmt, 3, SQL_C_CHAR, szTableName, STR_LEN,&cbTableName);
SQLBindCol(stmt, 4, SQL_C_CHAR, szColumnName, STR_LEN, &cbColumnName);
SQLBindCol(stmt, 5, SQL_C_SSHORT, &DataType, 0, &cbDataType);
SQLBindCol(stmt, 6, SQL_C_CHAR, szTypeName, STR_LEN, &cbTypeName);
SQLBindCol(stmt, 7, SQL_C_SLONG, &ColumnSize, 0, &cbColumnSize);
SQLBindCol(stmt, 8, SQL_C_SLONG, &BufferLength, 0, &cbBufferLength);
SQLBindCol(stmt, 9, SQL_C_SSHORT, &DecimalDigits, 0, &cbDecimalDigits);
SQLBindCol(stmt, 10, SQL_C_SSHORT, &NumPrecRadix, 0, &cbNumPrecRadix);
SQLBindCol(stmt, 11, SQL_C_SSHORT, &Nullable, 0, &cbNullable);
SQLBindCol(stmt, 17, SQL_C_SLONG, &OrdinalPosition, 0, &cbOrdinalPosition);
SQLBindCol(stmt, 18, SQL_C_CHAR, szIsNullable, STR_LEN, &cbIsNullable);


/* fetches the next rowset of data from the result set and print to stdout */
printf("POSITION\tCOL_NAME\tDATA_TYPE\tPRECISION\tSCALE\tIsNullable\n");
printf("=======================================================================================\n");
while ( (rc = SQLFetch(stmt)) != SQL_NO_DATA)
{
    if ( rc == SQL_ERROR )
    {
        execute_err(dbc, stmt, "SQLColumns:SQLFetch");
        break;
    }
    printf("%-10d\t%-20s%-20s%-10d%-10d%s\n", OrdinalPosition,
            szColumnName, szTypeName, ColumnSize,
            DecimalDigits, szIsNullable);
}