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);
}