J'ai une base de données qui a une contrainte NOT NULL sur un champ, et je veux supprimer cette contrainte. Le facteur de complication est que cette contrainte a un nom défini par le système, et que le nom de cette contrainte diffère entre le serveur de production, le serveur d'intégration et les différentes bases de données des développeurs. Notre processus actuel consiste à enregistrer des scripts de modification et une tâche automatisée exécute les requêtes appropriées via sqlplus sur la base de données cible. Je préférerais donc une solution qui pourrait être envoyée directement dans sqlplus.
Sur ma propre base de données, le SQL pour faire tomber ceci serait :
alter table MYTABLE drop constraint SYS_C0044566
Je peux voir la contrainte lorsque j'interroge le fichier all_constraints
vue :
select * from all_constraints where table_name = 'MYTABLE'
mais je ne suis pas sûr de savoir comment travailler avec les SEARCH_CONDITION
's LONG
ou la meilleure façon de supprimer dynamiquement la contrainte recherchée, même si je connais son nom.
Donc, comment puis-je créer une modification script qui peut faire tomber cette contrainte en fonction de ce qu'elle est, plutôt que de son nom ?
EDIT : La réponse de @Allan est bonne, mais je crains (en raison de mon manque d'expertise d'Oracle) qu'il ne soit pas universellement vrai que toute contrainte qui pourrait avoir un nom généré par le système sera associée à un moyen de supprimer la contrainte sans avoir à connaître son nom. Est-il vrai qu'il y aura toujours un moyen d'éviter d'avoir à connaître le nom d'une contrainte générée par le système lors de la suppression logique de cette contrainte ?
3 votes
Juste pour satisfaire votre curiosité : La contrainte NOT NULL est la uniquement type de contrainte dans Oracle que vous pouvez supprimer sans avoir besoin de connaître le nom de la contrainte. Pour tous les autres types de contraintes, vous devez connaître le nom de la contrainte.