oracle11g

Modify a column to NULL - Oracle


I have a table named CUSTOMER, with few columns. One of them is Customer_ID.

Initially Customer_ID column WILL NOT accept NULL values.

I've made some changes from code level, so that Customer_ID column will accept NULL values by default.

Now my requirement is that, I need to again make this column to accept NULL values.

For this I've added executing the below query:

ALTER TABLE Customer MODIFY Customer_ID nvarchar2(20) NULL

I'm getting the following error:

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

This is because already I've made the Customer_ID column to accept NULL values.

Is there a way to check if the column will accept NULL values before executing the above query...??


Solution

  • You can use the column NULLABLE in USER_TAB_COLUMNS. This tells you whether the column allows nulls using a binary Y/N flag.

    If you wanted to put this in a script you could do something like:

    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;
    

    It's best not to use dynamic SQL in order to alter tables. Do it manually and be sure to double check everything first.