Bir alanda NOT NULL kısıtlaması olan bir veritabanım var ve bu kısıtlamayı kaldırmak istiyorum. Karmaşıklaştıran faktör, bu kısıtlamanın sistem tanımlı bir ada sahip olması ve bu kısıtlamanın adının üretim sunucusu, bütünleştirme sunucusu ve çeşitli geliştirici veritabanları arasında farklılık göstermesidir. Mevcut sürecimiz değişiklik betiklerini kontrol etmektir ve otomatik bir görev, hedef veritabanına karşı sqlplus aracılığıyla uygun sorguları yürütür, bu nedenle doğrudan sqlplus'a gönderilebilecek bir çözümü tercih ederim.
Kendi veritabanımda, bunu bırakacak SQL:
alter table MYTABLE drop constraint SYS_C0044566
all_constraints
Görünümü sorguladığımda kısıtlamayı görebiliyorum:
select * from all_constraints where table_name = 'MYTABLE'
ancak SEARCH_CONDITION
'ın LONG
veri türüyle nasıl çalışacağımdan veya aranan kısıtlamayı adını bildikten sonra bile dinamik olarak en iyi nasıl sileceğimden emin değilim .
Öyleyse, bu kısıtlamayı adından ziyade ne olduğuna bağlı olarak kaldırabilecek bir değişiklik komut dosyasını nasıl oluşturabilirim?
DÜZENLEME: @ Allan'ın cevabı iyi bir cevap, ancak (Oracle uzmanlığımdan yoksun olduğum için) sistem tarafından oluşturulmuş bir ada sahip olabilecek herhangi bir kısıtlamanın onunla ilişkilendirilmiş olabileceği evrensel olarak doğru olmayabilir adını bilmek zorunda kalmadan kısıtlama. Bu kısıtlamayı mantıksal olarak kaldırırken sistem tarafından adlandırılan bir kısıtın adını bilmek zorunda kalmamak için her zaman bir yol olacağı doğru mu?