2011-03-05 3 views
1
INSERT INTO SS_ALERT_EVENTS ( ALERT_ID, EVENT_ID, TIME_DURATION, ALERT_EVENT_EFFECT, DATASET_ASSIGN_RULE, KEY_FIELDS_ASSIGN_RULE, SIDE, ALERT_VALIDATION_RULE, UNIQUE_ID) VALUES ('test1', 7 , 0, 1 , NULL, '5b414c4552545f494e535452554d454e542e496e737472756d656e742049445d203a3d205b54524144455f5245504f52542e496e737472756d656e742049445d3b', -1, '5b414c4552542e416374696f6e5d203a3d20313b', 1) 
* 
ERROR at line 1: 
ORA-00001: unique constraint (ESV31SURV.PK_SS_ALERT_EVENTS) violated 

Le champ EVENT_ID est le problème. Mais je veux l'insérer quand même. Cependant, quand j'essaye d'abandonner la contrainte de ce nom, il dit qu'il n'y a pas de telle contrainte. En outre, aucune contrainte de ce type n'est affichée dans la table USER_CONSTRAINTS. Que devrais-je faire?Erreur de contrainte unique Oracle lors de l'insertion

+0

Si vous ne voyez pas un objet, cela ne signifie pas qu'il n'existe pas - cela signifie simplement qu'il a été créé à partir d'un autre schéma. Connectez-vous en tant que 'sys' et regardez à nouveau la liste des contraintes. – zerkms

Répondre

3

La contrainte unique pourrait être en fait une contrainte de clé primaire - du moins c'est ce que le nom suggère. La suppression de la clé primaire d'une table peut avoir de très mauvais effets secondaires. Elle peut casser des applications qui dépendent de cette clé primaire (et vous devrez également supprimer toutes les clés étrangères qui référencent cette table avant de pouvoir la supprimer).

Cette clé primaire a été créée avec un but, donc avant de la laisser tomber aveuglément, vous devriez consulter celui qui a créé ce schéma et assurez-vous que la clé primaire n'est pas nécessaire (ou devrait être redéfinie).

Ceci étant dit ceci: essayez de laisser tomber le PK en utilisant

 
ALTER TABLE SS_ALERT_EVENTS 
    DROP PRIMARY KEY 

Mais s'il vous plaît vérifier si le double ce qui est vraiment une sage décision!

+0

"La contrainte unique est en fait une contrainte de clé primaire - du moins c'est ce que le nom suggère." --- faux. Regardez une fois de plus à la requête. Ce n'est pas une clé primaire, c'est une ** contrainte unique **. – zerkms

+4

@zerkms: une clé primaire ** est ** une contrainte unique. Le fait de violer une contrainte PK va lancer un ORA-0001 tout comme violer une contrainte unique "régulière". Essayez-le, les deux vous donnera exactement la même erreur –

+0

désolé, j'ai besoin de lunettes :-(Dans une raison inconnue, je n'ai pas vu dans la première fois que le nom de la contrainte «ESV31SURV.PK_SS_ALERT_EVENTS» contient le préfixe «PK». +1: – zerkms

Questions connexes