Ho un database che ha un vincolo NOT NULL su un campo e desidero rimuovere questo vincolo. Il fattore complicante è che questo vincolo ha un nome definito dal sistema e il nome di quel vincolo è diverso tra il server di produzione, il server di integrazione e i vari database degli sviluppatori. Il nostro processo attuale consiste nell'archiviare gli script di modifica e un'attività automatizzata esegue le query appropriate tramite sqlplus sul database di destinazione, quindi preferirei una soluzione che potrebbe essere inviata direttamente a sqlplus.
Sul mio database, l'SQL per eliminare questo sarebbe:
alter table MYTABLE drop constraint SYS_C0044566
Posso vedere il vincolo quando interrogo la all_constraints
vista:
select * from all_constraints where table_name = 'MYTABLE'
ma non sono sicuro di come il lavoro con la SEARCH_CONDITION
's LONG
tipo di dati o il modo migliore per eliminare in modo dinamico il vincolo guardato-up anche dopo che io so il suo nome.
Quindi, come posso creare uno script di modifica che possa eliminare questo vincolo in base a ciò che è, piuttosto che al suo nome?
EDIT: la risposta di @ Allan è buona, ma sono preoccupato (nella mia mancanza di esperienza Oracle) che potrebbe non essere universalmente vero che qualsiasi vincolo che potrebbe avere un nome generato dal sistema avrà associato ad esso un modo per rimuovere il vincolo senza dover conoscere il suo nome. È vero che ci sarà sempre un modo per evitare di dover conoscere il nome di un vincolo con nome di sistema quando si elimina logicamente quel vincolo?