콘텐츠로 이동

SQLForeignKeys

SQLForeignKeys#

SQLForeignkeys()는 다음을 반환할 수 있다.

  • 특정 테이블의 외래 키들의 목록 (다른 테이블들의 기본 키를 참조하는 특정 테이블의 열들)

  • 특정 테이블의 기본 키를 참조하는 다른 테이블들의 외래 키들의 목록

Unicode SQLForeignKeysW() 동작은 SQLForeignKeys()와 동일하다.

구 문#

SQLRETURN  SQLForeignKeys (
    SQLHSTMT        stmt,   
    SQLCHAR *       pkcName,    
    SQLSMALLINT     pkcNaneLength,      
    SQLCHAR *       pksName,        
    SQLSMALLINT     pksNameLength,      
    SQLCHAR *       pktName, 
    SQLSMALLINT     pktNameLength,      
    SQLCHAR *       fkcName,
    SQLINTEGER      fkcNaneLength,      
    SQLCHAR *       fksName,
    SQLSMALLINT     fksNameLength,
    SQLCHAR *       fktName,
    SQLSMALLINT     fktNameLength);

인 자#

자료유형 인자 사용 설명
SQLHSTMT stmt 입력 명령문 핸들
SQLCHAR* pkcName 입력 기본 키 테이블 카탈로그 이름
SQLSMALLINT pkcNameLength 입력 *pkcName의 문자 개수
SQLCHAR * pksName 입력 검색할 기본 키 테이블 스키마 이름
SQLSMALLINT pksNameLength 입력 *pksName의 문자 개수
SQLCHAR * pktName 입력 검색할 기본 키 테이블 이름
SQLSMALLINT pktNameLength 입력 *pktName의 문자 개수
SQLCHAR * fkcName 입력 외래 키 테이블 카탈로그 이름
SQLSMALLINT fkcNameLength 입력 *fkcName의 문자 개수
SQLCHAR * fksName 입력 검색할 외래 키 테이블 스키마 이름
SQLSMALLINT fksNameLength 입력 *fksName의 문자 개수
SQLCHAR * fktName 입력 검색할 외래 키 테이블 이름
SQLSMALLINT fktNameLength 입력 *fktName의 문자 개수

결괏값#

SQL_SUCCESS
SQL_SUCCESS_WITH_INFO
SQL_INVALID_HANDLE
SQL_ERROR

설 명#

만일 *pktName이 테이블 이름을 가지고 있으면, SQLForeignKeys()는 특정 테이블의 기본 키를 가지고 있는 결과 집합과 기본 키를 참조하는 모든 외래 키를 반환한다. 다른 테이블들내에 외래 키들의 목록은 특정 테이블내에 unique constraints를 가리키는 외래 키들을 포함하지 않는다.

만일 *fktName이 테이블 이름을 가지고 있으면, SQLForeignKeys()는 다른 테이블들의 기본 키를 가리키는 특정 테이블의 모든 외래 키를 가지고 있는 결과 집합과 외래 키가 참조하는 다른 테이블들의 기본 키를 반환한다. 특정 테이블의 외래 키들의 목록은 다른 테이블들내에 unique constraints를 가리키는 외래 키들을 포함하지 않는다.

만일 *pktName과 *fktName 둘다 테이블 이름을 가지고 있으면, SQLForeignKeys는 *fktName에 명시된 테이블의 외래 키들을 반환한다. 여기서 *fktName은 *pktName에 명시된 테이블의 기본 키를 참조한다.

SQLForeignKeys()는 기본 키와 관련 된 외래 키들이 요청되면 FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME, 그리고 KEY_SEQ에 의해 순서화된 표준 결과 집합 형태로 결과들을 반환한다. 또한, 외래 키와 관련 된 기본 키들이 요청되면 PKTABLE_CAT, PKTABLE_SCHEM, PKTABLE_NAME, 그리고 KEY_SEQ에 의해 순서화된 표준 결과 집합 형태로 결과들을 반환한다. 다음 [표 2-1]은 결과 집합의 열들을 나열한다.

열 이름 자료 유형 설명
PKTABLE_CAT 1 VARCHAR 항상 NULL 반환
PKTABLE_SCHEM 2 VARCHAR 기본 키 테이블 스키마 이름
DB에 적절하지 않은 경우 NULL
PKTABLE_NAME 3 VARCHAR (NOT NULL) 기본 키 테이블 이름
PKCOLUMN_NAME 4 VARCHAR (NOT NULL) 기본 키 열 이름.
Altibase CLI 드라이버는 이름을 갖지 않은 열에 대해 빈 문자열을 반환한다.
FKTABLE_CAT 5 VARCHAR 항상 NULL 반환
FKTABLE_SCHEM 6 VARCHAR 외래 키 테이블 스키마 이름
DB에 적절하지 않은 경우 NULL
FKTABLE_NAME 7 VARCHAR (NOT NULL) 외래 키 테이블 이름
FKCOLUMN_NAME 8 VARCHAR (NOT NULL) 외래 키 열 이름.
Altibase CLI 드라이버는 이름을 갖지 않은 열에 대해 빈 문자열을 반환한다.
KEY_SEQ 9 SMALLINT (NOT NULL) 열 순서 번호 (1 부터 시작)
UPDATE_RULE 10 SMALLINT Update 연산 시 외래 키에 SQL_NO_ACTION 적용
DELETE_RULE 11 SMALLINT Delete 연산 시 외래 키에 SQL_NO_ACTION 적용
FK_NAME 12 VARCHAR 외래 키 이름.
DB에 적절하지 않은 경우 NULL
PK_NAME 13 VARCHAR 기본 키 이름.
DB에 적절하지 않은 경우 NULL
DEFERRABILITY 14 SMALLINT SQL_INITIALLY_IMMEDIATE

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

진 단#

SQLSTATE 설명 부연설명
08S01 통신 회선 장애 (데이터 송수신 실패) Altibase CLI 드라이버와 DB간에 함수 처리가 완료되기 전에 통신 회선 실패
HY009 유효하지 않은 인자 (null pointer) 사용 인자 pktNamefktName 둘 다 null 포인터임.
HY090 유효하지 않은 문자열 또는 버퍼 길이 이름 길이 인자들 중 하나의 값이 0보다 작거나 SQL_NTS와 같지 않음.

관련 함수#

SQLBindCol
SQLFetch
SQLPrimaryKeys
SQLStatistics

예 제#

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

if (SQLForeignKeys(stmt,
                       NULL, 0,
                       "SYS", SQL_NTS,
                       "ORDERS", SQL_NTS,
                       NULL, 0,
                       NULL, 0,
                       NULL, 0) != SQL_SUCCESS)
    {
        execute_err(dbc, stmt, "SQLForeignKeys");
        SQLFreeStmt(stmt, SQL_DROP);
        return SQL_ERROR;
    }

    SQLBindCol(stmt, 2, SQL_C_CHAR, szPKSchema, NAME_LEN, &cbPKSchema);
    SQLBindCol(stmt, 3, SQL_C_CHAR, szPKTableName, NAME_LEN,&cbPKTableName);
    SQLBindCol(stmt, 4, SQL_C_CHAR, szPKColumnName, NAME_LEN, &cbPKColumnName);
    SQLBindCol(stmt, 6, SQL_C_CHAR, szFKSchema, NAME_LEN, &cbFKSchema);
    SQLBindCol(stmt, 7, SQL_C_CHAR, szFKTableName, NAME_LEN,&cbFKTableName);
    SQLBindCol(stmt, 8, SQL_C_CHAR, szFKColumnName, NAME_LEN, &cbFKColumnName);
    SQLBindCol(stmt, 9, SQL_C_SSHORT, &KeySeq, 0, &cbKeySeq);