콘텐츠로 이동

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