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) 사용 | 인자 pktName과 fktName 둘 다 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);