SQLProcedureColumns
SQLProcedureColumns#
명시된 프로시저에 대해 결과 집합을 구성하고 있는 열들 뿐만 아니라 입력과 출력 매개변수들의 목록을 결과 집합의 형태로 반환한다.
Unicode SQLProcedureColumnsW() 동작은 SQLProcedureColumns()와 동일하다.
구 문#
SQLRETURN SQLProcedureColumns (
SQLHSTMT stmt,
SQLCHAR * cName,
SQLSMALLINT cNameLength,
SQLCHAR * sName,
SQLSMALLINT sNameLength,
SQLCHAR * pName,
SQLSMALLINT pNameLength,
SQLCHAR * colName,
SQLSMALLINT colNameLength );
인 자#
자료유형 | 인자 | 사용 | 설명 |
---|---|---|---|
SQLHSTMT | stmt | 입력 | 명령문 핸들 |
SQLCHAR * | cName | 입력 | 프로시저 카탈로그 이름 |
SQLSMALLINT | cNameLength | 입력 | *cName의 문자 개수 |
SQLCHAR * | sName | 입력 | 프로시저 스키마 이름 |
SQLSMALLINT | sNameLength | 입력 | *sName의 문자 개수 |
SQLCHAR * | pName | 입력 | 프로시저 이름, null pointer일 수 없다. pName은 문자열 탐색 유형을 포함할 수 없다. |
SQLSMALLINT | pNameLength | 입력 | *pName의 문자 개수 |
SQLCHAR * | colName | 입력 | 열 이름 |
SQLSMALLINT | colNameLength | 입력 | *colName의 문자 개수 |
결괏값#
SQL_SUCCESS
SQL_SUCCESS_WITH_INFO
SQL_INVALID_HANDLE
SQL_ERROR
설 명#
이 함수는 프로시저 매개변수들과 프로시저에 의해 반환된 결과 집합(들)을 구성하는 열들을 검색하기 위하여 명령문 실행 전에 사용된다.
SQLProcedureColumns()은 PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME, 그리고 COLUMN_TYPE에 의해 순서화된 표준 결과 집합 형태로 결과들을 반환한다.
열 이름들은 각 프로시저에 대해 다음 순서로 반환된다.
-
반환 값의 이름
-
프로시저를 호출하는데 있어서 각 매개변수의 이름들(호출 순서)
-
프로시저에서 반환된 결과 집합의 각 열의 이름들 (열 순서)
SQLProcedureColumns()에 의해 반환되는 열은 [표 2-3]과 같다.
이름 | 번호 | 자료 유형 | 설명 |
---|---|---|---|
PROCEDURE_CAT | 1 | VARCHAR | 항상 NULL 반환 |
PROCEDURE _SCHEM | 2 | VARCHAR | 프로시저 스키마 이름 DB에 적절하지 않은 경우 NULL |
PROCEDURE _NAME | 3 | VARCHAR (NOT NULL) | 프로시저 이름 |
COLUMN_NAME | 4 | VARCHAR (NOT NULL) | 프로시저 열 이름. Altibase CLI 드라이버는 이름을 갖지 않은 열에 대해 빈 문자열을 반환한다. |
COLUMN_TYPE | 5 | SMALLINT (NOT NULL) | 매개변수 또는 결과 집합 열로서 프로시저 열을 정의 - SQL_PARAM_INPUT: 프로시저 열이 입력 매개변수임 - SQL_PARAM_INPUT_OUTPUT: 프로시저 열이 입/출력 매개변수임 - SQL_PARAM_OUTPUT: 프로시저 열이 출력 매개변수임 |
DATA_TYPE | 6 | SMALLINT (NOT NULL) | SQL 데이터 타입 |
TYPE_NAME | 7 | VARCHAR (NOT NULL) | DB에 대응하는 데이터 타입의 이름 |
COLUMN_SIZE | 8 | INTEGER | 열의 크기. 열의 크기가 적합치 않으면 NULL 이 반환됨 |
BUFFER_LENGTH | 9 | INTEGER | 자료를 저장하는 최대 바이트 |
DECIMAL_DIGITS | 10 | SMALLINT | 열의 소수자리 수 소수자리 수를 적용할 수 없는 데이터 타입은 널이 반환 |
NUM_PREC_RADIX | 11 | SMALLINT | Numeric 데이터 타입인 경우 10, COLUMN_SIZE와 DECIMAL_DIGITS의 값은 이 열에 허용되는 십진 자릿수가 주어진다. 예를 들어 DECIMAL(12,5) 열은 NUM_PREC_RADIX가 10, COLUMN_SIZE가 12 그리고 DECIMAL_DIGITS의 값 5를 반환할 수 있다. |
NULLABLE | 12 | SMALLINT (NOT NULL) | 프로시저 열이 널 값을 허용하지 않는 경우 SQL_NO_NULLS 허용 할 경우 SQL_NULLABLE |
REMARKS | 13 | VARCHAR | 프로시저 열에 대한 설명 정보 |
COLUMN_DEF | 14 | VARCHAR | 열의 디폴트 값. 이 열이 작은 따옴표로 묶여 있다면 이 값은 스트링, 널이 디폴트로 지정되어 있으면 이 열은 작은 따옴표로 묶인 단어가 아니라 단어 NULL을 반환, 디폴트 값이 잘림이 없이 나타낼 수 없다면 이 열은 작은 따옴표가 없는 TRUNCATED를 포함, 디폴트 값이 지정 되어있지 않으면 이 열은 NULL COLUMN_DEF 값은 새로운 열 정의를 생성하는데 사용될 수 있다. (TRUNCATED 값을 가지고 있을 때를 제외) |
SQL_DATA_TYPE | 15 | SMALLINT (NOT NULL) | SQL 데이터 타입 |
SQL_DATETIME_SUB | 16 | SMALLINT | Date 데이터 타입을 위한 subtype 코드. 이외의 데이터 타입인 경우 ∅이 반환 |
CHAR_OCTET_LENGTH | 17 | INTEGER | 문자나 바이너리 데이터 타입 열의 최대 자릿수 |
ORDINAL_POSITION | 18 | INTEGER (NOT NULL) | 프로시저 정의에 있어서 매개변수의 순서 위치 (1부터 증가) |
IS_NULLABLE | 19 | VARCHAR | - NO : 열이 널들을 포함하지 않을 때. - YES : 열이 널들을 포함할 때 |
[표 2‑3] SQLProcedureColumns()에 의해 반환되는 열
진 단#
SQLSTATE | 설명 | 부연설명 |
---|---|---|
HY000 | 일반 오류 | |
HY009 | 유효하지 않은 인자 (null pointer) 사용 | cName이 null pointer 임 |
관련 함수#
SQLBindCol
SQLFetch
SQLProcedures
예 제#
< $ALTIBASE_HOME/sample/SQLCLI/demo_meta6.cpp 참고 >
if (SQLProcedureColumns(stmt,
NULL, 0,
NULL, 0,
"DEMO_META6_PROC", SQL_NTS,
NULL, 0) != SQL_SUCCESS)
{
execute_err(dbc, stmt, "SQLProcedureColumns");
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, szProcName, STR_LEN,&cbProcName);
SQLBindCol(stmt, 4, SQL_C_CHAR, szColumnName, STR_LEN, &cbColumnName);
SQLBindCol(stmt, 5, SQL_C_SSHORT, &ColumnType, 0, &cbColumnType);
SQLBindCol(stmt, 7, SQL_C_CHAR, szTypeName, STR_LEN, &cbTypeName);
SQLBindCol(stmt, 8, SQL_C_SLONG, &ColumnSize, 0, &cbColumnSize);
SQLBindCol(stmt, 10, SQL_C_SSHORT, &DecimalDigits, 0, &cbDecimalDigits);
SQLBindCol(stmt, 11, SQL_C_SSHORT, &NumPrecRadix, 0, &cbNumPrecRadix);
SQLBindCol(stmt, 18, SQL_C_SLONG, &OrdinalPosition, 0, &cbOrdinalPosition);