콘텐츠로 이동

SQLPrimaryKeys

SQLPrimaryKeys#

단일 테이블의 프라이머리 키를 구성하는 열 이름들을 결과 집합 형태로 반환한다. 이 함수는 단일 호출에서 다중 테이블들의 프라이머리 키들을 반환하는 것은 지원하지 않는다.

Unicode SQLPrimarykeysW() 동작은 SQLPrimarykeys()와 동일하다.

구 문#

SQLRETURN SQLPrimaryKeys (
        SQLHSTMT    stmt,
        SQLCHAR *   cName,
        SQLSMALLINT     cNameLength,
        SQLCHAR *   sName,
        SQLSMALLINT     sNameLength,
        SQLCHAR *   tName,
        SQLSMALLINT     tNameLength );

인 자#

자료유형 인자 사용 설명
SQLHSTMT stmt 입력 명령문 핸들
SQLCHAR * cName 입력 카탈로그 이름
SQLSMALLINT cNameLength 입력 *cName의 문자 개수
SQLCHAR * sName 입력 스키마 이름
SQLSMALLINT sNameLength 입력 *sName의 문자 개수
SQLCHAR * tName 입력 테이블 이름, null pointer일 수 없다. tName은 문자열 탐색 유형을 포함할 수 없다.
SQLSMALLINT tNameLength 입력 *tName의 문자 개수

결괏값#

SQL_SUCCESS
SQL_SUCCESS_WITH_INFO
SQL_INVALID_HANDLE
SQL_ERROR

설 명#

SQLPrimaryKeys()는 TABLE_CAT, TABLE_SCHEM, TABLE_NAME, 그리고 KEY_SEQ에 의해 순서화된 표준 결과 집합 형태로 결과들을 반환한다.

탐색 유형은 스키마 규정자 또는 테이블 이름을 지정하기 위해 사용될 수 없다.

많은 경우에 있어서, SQLPrimaryKeys() 호출이 시스템 카탈로그에 대해 복잡하여 비용이 드는 조회에 맵핑되므로 가끔 사용되어야 하며, 호출을 반복하는 대신 저장된 결과를 사용해야 한다.

다음 테이블은 결과 집합의 열들을 나열한 것이다.

열번호 열 이름 자료유형 설명
1 TABLE_CAT VARCHAR 항상 NULL이 반환
2 TABLE_SCHEM VARCHAR 프라이머리 키 테이블 스키마 이름
3 TABLE_NAME VARCHAR (NOT NULL) 프라이머리 키 테이블 이름
4 COLUMN_NAME VARCHAR (NOT NULL) 1차 프라이머리 키 열 이름
5 KEY_SEQ SMALLINT (NOT NULL) 1부터 시작하는 1차 프라이머리 키의 열 순서 번호
6 PK_NAME VARCHAR 1차 프라이머리 키 이름

[표 2‑2] SQLPrimaryKeys()에 의해 반환되는 열

진 단#

SQLSTATE 설명 부연설명
08S01 통신 회선 장애 (데이터 송수신 실패) Altibase CLI 드라이버와 DB간에 함수 처리가 완료되기 전에 통신 회선 실패
HY000 일반 오류
HY009 유효하지 않은 인자 (null pointer) 사용 tName이 null pointer 임

관련 함수#

SQLBindCol
SQLFetch
SQLStatistics

예 제#

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

if (SQLPrimaryKeys(stmt,
                   NULL, 0,
                   NULL, 0,
                   (char*)"DEMO_META3", SQL_NTS) != SQL_SUCCESS)
{
    execute_err(dbc, stmt, "SQLPrimaryKeys");
    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, &KeySeq, 0, &cbKeySeq);
SQLBindCol(stmt, 6, SQL_C_CHAR, szPkName, STR_LEN, &cbPkName);
while ( (rc = SQLFetch(stmt)) != SQL_NO_DATA)
{
    if ( rc == SQL_ERROR )
    {
        execute_err(dbc, stmt, "SQLPrimaryKeys:SQLFetch");
        break;
    }
    printf("%-20s%-20s%-3d%-20s\n", szTableName,
                szColumnName, KeySeq, szPkName);
}