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