oracle - contrainte d'intégrité violée - enregistrement enfant trouvé
J'ai un énorme procédure stockée pl/sql, où nous faisons quelques suppressions aussi longtemps que les insertions.
La procédure commence par l'énoncé
EXECUTE IMMEDIATE 'SET CONSTRAINTS ALL DEFERRED'
Et à la dernière commit
déclaration-je recevoir ORA-02292: contrainte d'intégrité AAA violé.
Les questions, c'est que je ne sais pas lequel des énoncés qui cause exactement, car j'ai à la fois la suppression de la table parent (avant les enfants) et les insertions dans la table enfant avant de parent.
J'ai essayé de chercher sur google, mais partout il est dit que 02292 se passe lorsque j'essaie de supprimer uniquement.
Pourrait cette erreur arrive lorsque j'essaie d'insérer une valeur dans la table enfant, mais il n'y a pas cette entrée dans le parent?
Aussi, quelle est la différence entre 02292 et 02291?
Oui, je sais qu'il y a de gros problèmes avec ces données-modèle (écrits par d'autres personnes bien sûr), mais c'était ok avant, et il a commencé à échouer maintenant. J'ai donc besoin de savoir ce qu'il provoque. Était-ce parce que des délétions ou des insertions en particulier.
OriginalL'auteur javagirl | 2012-06-15
Vous devez vous connecter pour publier un commentaire.
ORA-02292 indique que l'erreur s'est produite parce que A) la contrainte n'a pas À SUPPRIMER l'alinéa spécifié, et B) vous avez supprimé une ligne de la table de maître qui avait correspondance des références dans la table enfant. Vos choix sont à modifier la contrainte donc on DELETE CASCADE ou pour s'assurer que tous les enfants des enregistrements sont supprimés avant la suppression du maître. Ma préférence serait d'ajouter SUR DELETE CASCADE, mais je suppose qu'il peut y avoir des raisons de ne pas le faire. Voir ORA-02292.
ORA-02291 est en quelque sorte l'opposé de celle-ci. ORA-02291 seront soulevées si vous tentez d'insérer une ligne dans une table d'enfant, mais la clé des valeurs de champ sur votre nouvelle ligne enfant, comme spécifié dans la contrainte n'existe pas dans la table maître. Voir ORA-02291.
OriginalL'auteur Bob Jarvis
Si vous souhaitez désactiver la contrainte du nom de résoudre ORA-02292.
Chercher le nom de la table associée à cette contrainte
SELECT owner, table_name FROM dba_constraints WHERE constraint_name = '{CONSTRAINT_NAME}';
Désactiver la contrainte (cette commande doit être exécutée par un utilisateur admin)
ALTER TABLE {TABLE_NAME} DISABLE constraint {CONSTRAINT_NAME} cascade;
OriginalL'auteur Lorenzo Lerate