Ich habe eine Datenbank mit einer NOT NULL-Einschränkung für ein Feld und möchte diese Einschränkung entfernen. Der komplizierende Faktor ist, dass diese Einschränkung einen systemdefinierten Namen hat und der Name dieser Einschränkung zwischen dem Produktionsserver, dem Integrationsserver und den verschiedenen Entwicklerdatenbanken unterschiedlich ist. Unser aktueller Prozess ist das Einchecken von Änderungsskripten, und eine automatisierte Aufgabe führt die entsprechenden Abfragen über sqlplus für die Zieldatenbank aus. Daher würde ich eine Lösung bevorzugen, die direkt an sqlplus gesendet werden kann.
In meiner eigenen Datenbank wäre das SQL, um dies zu löschen, Folgendes:
alter table MYTABLE drop constraint SYS_C0044566
Ich kann die Einschränkung sehen, wenn ich die all_constraints
Ansicht abfrage :
select * from all_constraints where table_name = 'MYTABLE'
aber ich bin nicht sicher , wie man die Arbeit mit dem SEARCH_CONDITION
‚s LONG
Datentyp oder wie man am besten dynamisch löschen Sie die nachgeschlagenen up Zwang , auch nachdem ich seinen Namen kennen.
Wie kann ich also ein Änderungsskript erstellen, das diese Einschränkung basierend auf dem, was sie ist, und nicht auf dem Namen aufheben kann?
EDIT: @ Allans Antwort ist gut, aber ich bin besorgt (aufgrund meines Mangels an Oracle-Fachwissen), dass es möglicherweise nicht allgemein gültig ist, dass eine Einschränkung, die möglicherweise einen vom System generierten Namen hat, eine Möglichkeit zum Entfernen des Namens mit sich bringt Einschränkung, ohne den Namen kennen zu müssen. Stimmt es, dass es immer eine Möglichkeit gibt, zu vermeiden, dass der Name einer vom System benannten Einschränkung bekannt sein muss, wenn diese Einschränkung logisch gelöscht wird?