versiones usuarios que power numero as400 db2 ibm-midrange db2400

db2 - usuarios - que es ibm i



DB2 encuentra tablas que hacen referencia a mi tabla (2)

[db2-as400] Tengo una tabla ENR_DATA que tiene la columna EnrollmentID como clave principal. Esta columna es referida por muchas tablas como una "clave externa". ¿Hay alguna manera de enumerar todas las tablas que se refieren a EnrollmentID de la tabla ENR_DATA ?



Hay algunas vistas de catálogo que dan solo una parte de la respuesta, y tiene que unirlas todas juntas.

  • SYSCST proporciona una lista de restricciones con el tipo de restricción. Desde aquí podemos seleccionar restricciones de clave externa. TABLE_NAME en esta tabla es la tabla que contiene la clave externa.
  • SYSKEYCST proporciona una lista de columnas para una clave externa, clave principal o restricción única dada junto con la posición ordinal de la columna en la clave y el nombre de la tabla asociada.
  • SYSREFCST proporciona el nombre de la restricción Clave primaria o Única a la que hace referencia una Restricción de clave externa dada.

De estas tres tablas podemos escribir el siguiente SQL:

select cst.constraint_schema, cst.constraint_name, fk.table_schema, fk.table_name, fk.ordinal_position, fk.column_name, pk.table_schema, pk.table_name, pk.column_name from qsys2.syscst cst join qsys2.syskeycst fk on fk.constraint_schema = cst.constraint_schema and fk.constraint_name = cst.constraint_name join qsys2.sysrefcst ref on ref.constraint_schema = cst.constraint_schema and ref.constraint_name = cst.constraint_name join qsys2.syskeycst pk on pk.constraint_schema = ref.unique_constraint_schema and pk.constraint_name = ref.unique_constraint_name where cst.constraint_type = ''FOREIGN KEY'' and fk.ordinal_position = pk.ordinal_position and pk.table_name = ''ENR_DATA'' and pk.column_name = ''ENROLLMENTID'' order by cst.constraint_schema, cst.constraint_name;

Esto le dará los nombres de tabla que hacen referencia a ''ENR_DATA'' a través de una clave externa. Tenga en cuenta que tengo ENROLLMENTID en mayúsculas. Así es como DB2 for i almacena todos los nombres de columna a menos que se citen con "".