콘텐츠로 이동

SQLDescribeCol

SQLDescribeCol#

결과 집합에서 한 열의 이름, 데이터 형, 십진 숫자, nullability를 돌려준다.

Unicode SQLDescribeColW() 동작은 SQLDescribeCol()와 동일하다.

구 문#

SQLRETURN SQLDescribeCol (
    SQLHSTMT        stmt,
    SQLSMALLINT         col,
    SQLCHAR *       name,
    SQLSMALLINT         nameMax,
    SQLSMALLINT *       nameLength,
    SQLSMALLINT *       type,
    SQLINTEGER *        precision,
    SQLSMALLINT *       scale,
    SQLSMALLINT *       nullable );

인 자#

자료유형 인자 사용 설명
SQLHSTMT stmt 입력 명령문 핸들
SQLSMALLINT col 입력 1 부터 시작하는 매개변수 마커 순서
SQLCHAR* name 출력 열 이름의 포인터
SQLSMALLINT nameMax 입력 *name의 문자 개수
SQLSMALLINT * nameLength 출력 *name에 반환 가능한 총 바이트 수 (null-termination byte 제외)
SQLSMALLINT * type 출력 열의 SQL 데이터 타입의 포인터
SQLINTEGER * precision 출력 데이터베이스에 대한 열 크기의 포인터 열 크기가 결정될 수 없다면 Altibase CLI 드라이버는 0을 반환
SQLSMALLINT * scale 출력 데이터베이스에 대한 열의 십진 숫자의 개수의 포인터 십진 숫자의 개수가 결정될 수 없거나 적절하지 않으면 Altibase CLI 드라이버는 0을 반환
SQLSMALLINT * nullable 출력 열이 null이 허용 되는지를 보여주는 값의 포인터
SQL_NO_NULLS: 열이 NULL을 허용하지 않음
SQL_NULLABLE: 열은 NULL을 허용

결괏값#

SQL_SUCCESS
SQL_SUCCESS_WITH_INFO
SQL_INVALID_HANDLE
SQL_ERROR

설 명#

애플리케이션은 전형적으로 SQLPrepare()를 호출 한 후에 그리고 SQLExecute()를 호출 하기 전에 SQLDescribeCol()을 호출한다. 또한 애플리케이션은 SQLExecDirect()를 호출 한 후에 SQLDescribeCol()를 호출할 수 있다.

SQLDescribeCol()은 SELECT 문에 의해 생성된 열의 이름, 타입, 그리고 길이를 검색한다. 만약 열이 표현식이면 *name은 표현식이다.

진 단#

SQLSTATE 설명 부연설명
01004 자료가 잘림 버퍼 *name이 전체 열 이름을 반환할 만큼 크지 않아서 열 이름이 잘림 잘리지 않은 열 이름의 길이는 *nameLength로 반환된다.
07009 유효하지 않은 설명자 인덱스 명시된 col 값이 0임 명시된 col 값이 결과 집합의 열의 개수보다 큼
HY000 일반 오류
HY090 유효하지 않은 문자열 또는 버퍼 길이 명시된 nameMax 값이 0 보다 작음

SQLDescribeCol()이 SQLPrepare() 후, SQLExecute() 전에 호출됐을 때 SQLPrepare()나 SQLExecute()에 의해 반환될 수 있는 모든 SQLSTATE를 반환할 수 있다.

관련 함수#

SQLBindCol
SQLColAttribute
SQLFetch
SQLNumResultCols
SQLPrepare

예 제#

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

sprintf(query,"SELECT * FROM DEMO_EX1");
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++ )
{
    SQLDescribeCol(stmt, i+1,
                   (SQLCHAR *)columnName, sizeof(columnName), &columnNameLength,
                   &dataType, &columnSize, &scale, &nullable);
    printf("columnName = %s, nullable = %d\n", columnName, nullable);
}