Comment puis-je obtenir contrainte détails du nom dans Informix?
Lors de la programmation d'une opération importante (beaucoup de insertions, suppressions, mises à jour) et qui viole une contrainte dans Informix (v10, mais il devrait s'appliquer à d'autres versions de trop), j'ai un pas très utile de message en disant, par exemple, j'ai violé contrainte r190_710. Comment puis-je savoir à quelle table(s) clé(s) sont couverts par une certaine contrainte, je ne connais que le nom de?
OriginalL'auteur user39039 | 2008-11-26
Vous devez vous connecter pour publier un commentaire.
Tony Andrews suggéré (pointant vers un autre point de fin de l'URL):
Informix catalogue du système est décrit dans ce manuel.
La SysConstraints tableau est le point de départ de l'analyse d'une contrainte, très certainement; vous de trouver le nom de la contrainte dans le tableau, et à partir de là, vous pouvez trouver les autres détails.
Cependant, vous devez également regarder les autres tables, et non pas seulement (ou même directement) SysIndices.
Par exemple, j'ai beaucoup de contraintes not NULL sur les tables dans ma base de données. Pour ceux-ci, le type de contrainte est 'N' et il n'y a pas besoin de chercher ailleurs pour plus d'informations.
Une contrainte de type " P " indique une clé primaire; qui aurait besoin de plus d'analyse par le biais du SysIndexes vue ou SysIndices table. De même, une contrainte de type " U " indique une contrainte unique et a besoin de plus d'informations à partir de la SysIndexes vue ou SysIndices table.
Une contrainte de type " C "indique une contrainte de vérification; le texte (et un binaire compilé forme) de la contrainte est trouvé dans la SysChecks table (avec des types" T " et " B " pour les données; les données sont plus ou moins codé avec en Base 64, mais sans le '=' padding à la fin et à l'aide de différents personnages pour 62 et 63).
Enfin, une contrainte de type " R " indique une contrainte d'intégrité référentielle. Vous utilisez le SysReferences de table pour savoir qui de la table est référencée, et que vous utilisez SysIndexes ou SysIndices pour établir des indices sur le référencement et de tables de référence sont utilisés, et de ce que vous pouvez découvrir les colonnes concernées. Cela peut être assez poilue!
OriginalL'auteur Jonathan Leffler
Colonnes dans une table avec une contrainte sur eux
Veuillez noter que cela ne vous donnera pas de contrainte de VÉRIFICATION parce que sysconstraints.idxname est toujours la valeur null pour VÉRIFIER les contraintes
OriginalL'auteur cab
J'ai été en utilisant la requête suivante pour obtenir plus d'informations sur les différents types de contraintes.
Il est basé sur certains de la spéléologie dans les tables système et plusieurs explications sur le catalogue du système.
sysconstraints.constrtype indique le type de la contrainte:
OriginalL'auteur Otherside
De Informix Guide de SQL: Référence il semble que vous devriez regarder le catalogue du système tables SYSCONSTRAINTS et SYSINDICES.
OriginalL'auteur Tony Andrews
De surf à http://www.iiug.org (International Informix Groupe d'Utilisateurs), j'ai trouvé la pas-si-facile solution.
(1) Obtenir contrainte référentielle des données à partir du nom de la contrainte (vous pouvez obtenir toutes les contraintes d'une table par le remplacement de "ET sc.constrname = ?" par "ET saint.tabname ALLUMETTES ?"). Cette déclaration sélectionne certains plus de champs que nécessaire ici, car ils pourraient être intéressantes dans d'autres situations.
(2) Utiliser le part1-part16 pour déterminer la colonne qui est affecté par la contrainte: la partie[n] contenant une valeur différente de 0 contient le numéro de colonne de la colonne. Utilisation (3) pour trouver le nom de la colonne.
Si constrtype est " R " (référencement) utilisez l'instruction suivante pour trouver les pièces de la table de référence:
(3) le tabid et rtabid (pour le référencement de contraintes) à partir de (1) peut maintenant être utilisé pour obtenir les colonnes des tables comme ça:
(4) Si le constrtype est "C", puis obtenir la vérification des informations de ce type:
Assez poilue en effet
OriginalL'auteur user39039
pour obtenir le tableau touchés par la contrainte "r190_710":
OriginalL'auteur Santiago Taba
Si votre contrainte est nommé
constraint_c6
, voici comment vider sa définition (bien sorte, vous avez encore besoin de concaténer les lignes, comme ils vont être séparés par des espaces):OriginalL'auteur ekarak