Sto cercando di compilare un collega per eseguire alcuni lavori di Oracle e ho avuto un problema. Nel tentativo di scrivere uno script per modificare una colonna nullable, mi sono imbattuto in bella errore ORA-01451:MODIFY COLUMN in oracle - Come verificare se una colonna è annullabile prima di impostare su null?
ORA-01451: column to be modified to NULL cannot be modified to NULL
Questo sta accadendo perché la colonna è già NULL. Abbiamo diversi database che devono essere ascoltati, quindi nella mia ipotesi errata ho pensato che impostarlo su NULL avrebbe dovuto funzionare su tutta la linea per assicurarmi che tutti fossero aggiornati, indipendentemente dal fatto che avessero impostato manualmente questa colonna su nullable o meno. Tuttavia, questo a quanto pare causa un errore per alcune persone che hanno già la colonna come nullable.
Come si verifica se una colonna è già annullabile in modo da evitare l'errore? Qualcosa che avrebbe realizzare questa idea:
IF(MyTable.MyColumn IS NOT NULLABLE)
ALTER TABLE MyTable MODIFY(MyColumn NULL);
Grazie Tony! Ho ottenuto questo lavoro (con una piccola soluzione per chiudere la citazione sull'esecuzione immediata) e ora siamo in affari! –
Suggerirei che l'interrogazione del dizionario dei dati ogni volta che si esegue questo ALTER TABLE sarebbe piuttosto inefficiente, rispetto alla semplice gestione dell'eccezione se si verifica. –
Jeffrey, probabilmente sei corretto, ma questo era per uno script di modifica dello schema, quindi è una situazione una sola volta per database. Una volta che la modifica è stata apportata, non verrà eseguita di nuovo. –