SQLForeignKeys--Obtener la lista de columnas de clave foránea

Finalidad

Especificación: CLI de DB2 2.1 ODBC 1.0

SQLForeignKeys() devuelve información sobre claves foráneas para la tabla especificada. La información se devuelve en un conjunto resultante de SQL, que se puede procesar utilizando las mismas funciones que se utilizan para recuperar un conjunto resultante generado por una consulta. PKCatalogName, NameLength1, PKSchemaName, NameLength2, FKCatalogName, NameLength4, FKSchemaName y NameLength5 se ignoran. Las columnas 1, 2, 5, 6, 12 y 13 del conjunto resultante devuelto son siempre una serie de longitud cero. Las columnas 10, 11 y 14 del conjunto resultante devuelto son siempre cero.

Sintaxis

SQLRETURN   SQLForeignKeys  (
                  SQLHSTMT          StatementHandle,  /* hstmt */
                  SQLCHAR      *FAR PKCatalogName,    /* szPkCatalogName */
                  SQLSMALLINT       NameLength1,      /* cbPkCatalogName */
                  SQLCHAR      *FAR PKSchemaName,     /* szPkSchemaName */
                  SQLSMALLINT       NameLength2,      /* cbPkSchemaName */
                  SQLCHAR      *FAR PKTableName,      /* szPkTableName */
                  SQLSMALLINT       NameLength3,      /* cbPkTableName */
                  SQLCHAR      *FAR FKCatalogName,    /* szFkCatalogName */
                  SQLSMALLINT       NameLength4       /* cbFkCatalogName */
                  SQLCHAR      *FAR FKSchemaName,     /* szFkSchemaName */
                  SQLSMALLINT       NameLength5,      /* cbFkSchemaName */
                  SQLCHAR      *FAR FKTableName,      /* szFkTableName */
                  SQLSMALLINT       NameLength6);     /* cbFkTableName */
 

Argumentos de la función

Tabla 58. Argumentos de SQLForeignKeys

Tipo de datos Argumento Uso Descripción
SQLHSTMT StatementHandle entrada Descriptor de contexto de sentencia.
SQLCHAR* PKCatalogName entrada Calificador de catálogo de la tabla de claves primarias. DB2 Everyplace no tiene en cuenta este campo.
SQLSMALLINT NameLength1 entrada Longitud de PKCatalogName. DB2 Everyplace no tiene en cuenta este campo.
SQLCHAR* PKSchemaName entrada Calificador de esquema de la tabla de claves primarias. DB2 Everyplace no tiene en cuenta este campo.
SQLSMALLINT NameLength2 entrada Longitud de PKSchemaName. DB2 Everyplace no tiene en cuenta este campo.
SQLCHAR* PKTableName entrada Nombre de la tabla donde reside la clave primaria.
SQLSMALLINT NameLength3 entrada Longitud de PKTableName.
SQLCHAR* FKCatalogName entrada Calificador de catálogo de la tabla donde reside la clave foránea. DB2 Everyplace no tiene en cuenta este campo.
SQLSMALLINT NameLength4 entrada Longitud de FKCatalogName. DB2 Everyplace no tiene en cuenta este campo.
SQLCHAR* FKSchemaName entrada Calificador de esquema de la tabla donde reside la clave foránea. DB2 Everyplace no tiene en cuenta este campo.
SQLSMALLINT NameLength5 entrada Longitud de FKSchemaName. DB2 Everyplace no tiene en cuenta este campo.
SQLCHAR* FKTableName entrada Nombre de la tabla donde reside la clave foránea.
SQLSMALLINT NameLength6 entrada Longitud de FKTableName.

Uso

Si PKTableName contiene un nombre de tabla y FKTableName es una serie de caracteres vacía, SQLForeignKeys() devuelve un conjunto resultante que contiene la clave primaria de la tabla especificada y todas las claves foráneas (en otras tablas) que hacen referencia a la clave primaria.

Si FKTableName contiene un nombre de tabla y PKTableName es una serie de caracteres vacía, SQLForeignKeys() devuelve un conjunto resultante que contiene todas las claves foráneas de la tabla especificada y las claves primarias (en otras tablas) a las que hacen referencia.

Si tanto PKTableName como FKTableName contienen nombres de tablas, SQLForeignKeys() devuelve las claves foráneas de la tabla especificada en FKTableName que hacen referencia a la clave primaria de la tabla especificada en PKTableName. El resultado debe ser una sola clave como máximo.

Si se solicitan las claves foráneas asociadas a una clave primaria, el conjunto resultante se ordena de acuerdo con FKTABLE_NAME y ORDINAL_POSITION. Si se solicitan las claves primarias asociadas a una clave foránea, el conjunto resultante se ordena de acuerdo con PKTABLE_NAME y ORDINAL_POSITION.

Las columnas VARCHAR del conjunto resultante de las funciones de catálogo se han declarado con un atributo de longitud máxima 128 para que sea coherente los límites de SQL92.

Aunque en futuros releases de SQL se pueden añadir nuevas columnas y modificarse los nombres de las columnas existentes, la posición de las columnas actuales no cambiará.

El conjunto resultante contiene las columnas siguientes:

Columna 1 PKTABLE_CAT (VARCHAR(128))
Siempre es una serie de longitud cero.

Columna 2 PKTABLE_SCHEM (VARCHAR(128))
Siempre es una serie de longitud cero.

Columna 3 PKTABLE_NAME (VARCHAR(128) no nulo)
Nombre de la tabla donde reside la clave primaria.

Columna 4 PKCOLUMN_NAME (VARCHAR(128) no nulo)
Nombre de la columna de clave primaria.

Columna 5 FKTABLE_CAT (VARCHAR(128))
Siempre es una serie de longitud cero.

Columna 6 FKTABLE_SCHEM (VARCHAR(128))
Siempre es una serie de longitud cero.

Columna 7 FKTABLE_NAME (VARCHAR(128) no nulo)
Nombre de la tabla donde reside la clave foránea.

Columna 8 FKCOLUMN_NAME (VARCHAR(128) no nulo)
Nombre de la columna de clave foránea.

Columna 9 ORDINAL_POSITION (SMALLINT no nulo)
Posición ordinal de la columna en la clave, comenzando en 1.

Columna 10 UPDATE_RULE (SMALLINT)
Esto es siempre cero.

Columna 11 DELETE_RULE (SMALLINT)
Esto es siempre cero.

Columna 12 FK_NAME (VARCHAR(128))
Siempre es una serie de longitud cero.

Columna 13 PK_NAME (VARCHAR(128))
Siempre es una serie de longitud cero.

Columna 14 DEFERRABILITY (SMALLINT)
Esto es siempre cero.

Los nombres de columna utilizados por CLI de DB2 siguen el estilo de especificación de X/Open para CLI CAE. El tipo, contenido y orden de las columnas son idénticos a los definidos para el conjunto resultante SQLForeignKeys() en ODBC.

Códigos de retorno

Diagnósticos

Tabla 59. SQLSTATE de SQLForeign

SQLSTATE Descripción Explicación
24000 Estado no válido del cursor. Ya hay un cursor abierto para el descriptor de contexto de sentencia.
40003 08S01 Error en el enlace de comunicaciones. El enlace de comunicaciones entre la aplicación y la fuente de datos se interrumpió antes de finalizar la función.
HY001 Error de asignación de memoria. CLI de DB2 no puede asignar la memoria necesaria para ejecutar o finalizar la función.
HY009 Valor no válido de argumento. Los argumentos PKTableName y FKTableName eran ambos punteros nulos.
HY010 Error de secuencia de función. Se llama a la función mientras se produce una operación de datos en ejecución (SQLPrepare() o SQLExecDirect()).
HY014 No hay más descriptores de contexto. CLI de DB2 no puede asignar un descriptor de contexto debido a recursos internos.
HY090 Longitud no válida de la serie de caracteres o del almacenamiento intermedio. El valor de uno de los argumentos de longitud de nombre es menor que 0, pero no igual a SQL_NTS

Restricciones

Ninguna.

Consulta relacionada