2013-03-27 33 views
7

Ho una tabella denominata CUSTOMER, con poche colonne. Uno di questi è Customer_ID.Modificare una colonna in NULL - Oracle

Inizialmente Customer_ID colonna WILL NOT accettare valori NULL.

Ho apportato alcune modifiche dal livello di codice, in modo che la colonna Customer_ID accetti i valori NULL per impostazione predefinita.

Ora il mio requisito è che, devo ancora fare in modo che questa colonna accetti i valori NULL.

Per questo ho aggiunto l'esecuzione della query di seguito:

ALTER TABLE Customer MODIFY Customer_ID nvarchar2(20) NULL 

sto ottenendo il seguente errore:

ORA-01451 error, the column already allows null entries so 
therefore cannot be modified 

Questo perché già ho fatto la colonna Customer_ID di accettare NULL valori.

C'è un modo per verificare se la colonna accetterà i valori NULL prima di eseguire la query sopra ... ??

+2

È possibile trovare la risposta qui: http://stackoverflow.com/questions/1028956/modify-column-in-oracle-how-to-check-if-a-column-is-nullable- prima-creazione di – TheEwook

risposta

8

È possibile utilizzare la colonna NULLABLE in USER_TAB_COLUMNS. Questo ti dice se la colonna permette i null usando un flag Y/N binario.

Se si voleva mettere questo in uno script si potrebbe fare qualcosa di simile:

declare 

    l_null user_tab_columns.nullable%type; 

begin 

    select nullable into l_null 
    from user_tab_columns 
    where table_name = 'CUSTOMER' 
     and column_name = 'CUSTOMER_ID'; 

    if l_null = 'N' then 
     execute immediate 'ALTER TABLE Customer 
          MODIFY (Customer_ID nvarchar2(20) NULL)'; 
    end if; 

end; 

è meglio non utilizzare SQL dinamico al fine di alterare le tabelle. Fallo manualmente e assicurati di ricontrollare tutto prima.

1

Ho fatto qualcosa del genere, ha funzionato bene. Prova ad eseguire query, se si verifica un errore, cattura SQLException.

try { 
stmt.execute("ALTER TABLE Customer MODIFY Customer_ID nvarchar2(20) NULL"); 
} catch (SQLException sqe) { 
Logger("Column to be modified to NULL is already NULL : " + sqe); 
} 

È questo modo corretto di fare?

4

Oppure si può semplicemente ignorare l'errore:

declare 
    already_null exception; 
    pragma exception_init (already_null , -01451); 
begin 
    execute immediate 'alter table <TABLE> modify(<COLUMN> null)'; 
    exception when already_null then null; 
end; 
/
0

Per modificare i vincoli di una tabella esistente

per esempio ... Aggiungi not null vincolo a una colonna.

quindi seguire le istruzioni riportate:

1) Selezionare la tabella in cui si desidera modificare le modifiche.

2) Fare clic su Actions.. ---> selezionare la colonna ----> aggiungi.

3) Ora fornire il nome della colonna, tipo di dati, dimensioni, ecc. E fare clic su OK.

4) Vedrete che la colonna viene aggiunta alla tabella.

5) Ora fare clic sul pulsante Edit che si trova sul lato sinistro del pulsante Actions.

6) Quindi si ottengono varie opzioni di modifica della tabella.

7) Selezionare l'column dall'elenco.

8) Selezionare la colonna specifica in cui si desidera assegnare not null.

9) Selezionare Cannot be null da column properties.

10) Questo è tutto.

Problemi correlati