Una colonna in una tabella ha un valore predefinito di sysdate e voglio cambiarlo in modo che non ottenga alcun valore predefinito, come posso fare?Come rimuovo il valore predefinito da una colonna in oracle?
risposta
ALTER TABLE YourTable MODIFY YourColumn DEFAULT NULL;
L'unico modo per fare ciò che si desidera è ricreare il tavolo.
È abbastanza facile farlo in rospo, è sufficiente fare clic con il tasto destro sul tavolo e selezionare "Ricostruisci tabella". Toad creerà uno script che rinomina la tabella e ricrea una nuova tabella. Lo script ricreerà indici, vincoli, chiavi esterne, commenti, ecc. E popolerà la tabella con i dati.
Basta modificare lo script per rimuovere "default null" dopo la colonna in questione.
Uno può rilasciare la colonna e quindi aggiungerla di nuovo. 'ALTER TABLE mytable DROP COLUMN mycolumn; ALTER TABLE mytable ADD mycolumn DATE; ' –
Questo funziona, l'unico problema è che sposterà la colonna nella parte inferiore dell'elenco. Se si desidera conservare l'ordine delle colonne, rilasciare e ricreare la tabella. –
Joe's answer è corretta nel senso che una colonna con DEFAULT NULL
è funzionalmente equivale ad avere mai definito un valore predefinito per quella colonna in primo luogo: se una colonna non ha un valore predefinito, l'inserimento di una nuova riga senza specificare il valore per quella colonna risulta in NULL
.
Tuttavia, Oracle rappresenta internamente i due casi distintamente, come si può vedere osservando la ALL_TAB_COLUMNS
system view *
Il caso in cui è stata creata una colonna, o
ALTER
ed, conDEFAULT NULL
.:create table foo (bar varchar2(3) default null); select default_length, data_default from all_tab_columns where table_name='FOO'; => default_length data_default -------------- ------------ 4 NULL select dbms_metadata.get_ddl('TABLE','FOO') from dual; => CREATE TABLE "FOO" ( "BAR" VARCHAR(3) DEFAULT NULL … )
No predefinito mai specificato:
create table foo (bar varchar2(3)); select default_length, data_default from all_tab_columns where table_name='FOO'; => default_length data_default -------------- ------------ (null) (null) select dbms_metadata.get_ddl('TABLE','FOO') from dual; => CREATE TABLE "FOO" ( "BAR" VARCHAR(3) … )
Come indicato sopra, v'è un caso importante in cui questa distinzione insignificante fa la differenza nell'uscita Oracle: quando si utilizza DBMS_METADATA.GET_DDL()
per estrarre la definizione della tabella.
Se si utilizza GET_DDL()
per introspezione del database, quindi si otterrà un po 'diverso di uscita DDL per funzionalmente identici tabelle.
Questo è davvero piuttosto fastidioso quando si utilizza GET_DDL()
per il controllo della versione e il confronto tra più istanze di un database e non c'è modo di evitarlo, oltre a modificare manualmente l'output di GET_DDL()
o per ricreare completamente la tabella con nessun valore predefinito.
* Almeno per Oracle 10g, 11g e 12c.
Darei un'occhiata a DROP DEFAULT; Non so se è esattamente uguale a null di default ma sembra più specifico. –
A partire da Oracle 12, non ha 'DROP DEFAULT' ☹. Questo è esattamente il problema e il motivo per cui abbiamo bisogno di aggirarlo con un 'DEFAULT NULL'. (Qualsiasi riferimento a 'DROP DEFAULT' che si trova su oracle.com è probabilmente correlato a MySQL ... che è un database completamente separato ora di proprietà di Oracle.) –
- 1. Trova il valore predefinito per una colonna (Oracle)
- 2. sequenza come valore predefinito per una colonna
- 3. Come modificare una colonna e modificare il valore predefinito?
- 4. sql server: richiama il valore predefinito di una colonna
- 5. Come interrogare una colonna CLOB in Oracle
- 6. sqlite3 cambia colonna valore predefinito
- 7. Come posso modificare il valore predefinito della colonna in PostgreSQL?
- 8. valore predefinito di GUID in per una colonna in mysql
- 9. Imposta il valore predefinito di una colonna intera SQLite
- 10. Come aggiungere un valore predefinito a una colonna già esistente?
- 11. mysql imposta il valore predefinito del campo su un'altra colonna
- 12. Impostazione del valore predefinito per l'utente corrente in Oracle
- 13. Come aggiungere il valore predefinito in SQLite?
- 14. Perché questo DROP COLUMN Oracle altera il valore predefinito di un'altra colonna?
- 15. Imposta condizionatamente una colonna sul valore predefinito in Postgres
- 16. Colonna booleana in HSQLDB con valore predefinito
- 17. Come rimuovo una query da un url?
- 18. Come impostare il valore predefinito per una colonna datetime nello script di migrazione?
- 19. Oracle: specifica il valore predefinito per la colonna del tipo di oggetto
- 20. Come impostare un valore predefinito per una colonna in SQL in base a un'altra colonna
- 21. Posso creare una colonna datetime con valore predefinito in sqlite3?
- 22. Come utilizzare il valore di colonna predefinito da DataBase in Entity Framework?
- 23. Valore predefinito di migrazione sud da un'altra colonna?
- 24. SQLAlchemy imposta il valore predefinito di una colonna a quella di un'altra colonna
- 25. Valore predefinito colonna SQL con Entity Framework
- 26. Da dove viene il valore predefinito mb_internal_encoding()?
- 27. Aggiungi colonna a dataframe con valore predefinito
- 28. Da una colonna nullable
- 29. EntityFramework che non aggiorna la colonna con il valore predefinito
- 30. Doctrine 2.1 - valore predefinito colonna data/ora
Questo non è completamente vero. Non si rimuove il valore predefinito impostato su 'NULL'. Il valore predefinito non può essere rimosso, i documenti Oracle dicono: "Se una colonna ha un valore predefinito, è possibile utilizzare la clausola DEFAULT per modificare l'impostazione predefinita su NULL, ma non è possibile rimuovere completamente il valore predefinito. mai assegnato un valore predefinito, quindi la colonna DATA_DEFAULT della vista del dizionario dati USER_TAB_COLUMNS visualizzerà sempre un valore predefinito o NULL. " –
@ Michael-O È funzionalmente equivalente a quando non c'è 'DEFAULT'? (Se lo è, ci si deve chiedere perché non lo rendano coerente e internamente diano tutto un "DEFAULT" di 'NULL' di default. Come utente finale, non dovrei preoccuparmi di dettagli interni come quello .) – jpmc26
@ jpmc26, hai ragione che sono * funzionalmente * equivalenti.Tuttavia, ci sono casi in cui [influenza l'output dell'introspezione del database, come ho scritto nella mia risposta] (http://stackoverflow.com/a/37265135/20789). (Questo è solo uno dei tanti casi stupidi che mi portano a concludere che Oracle è un database estremamente ostico per programmatori.) –