How do I delete a column from an existing table?
The command you're looking for is:
alter table tblName drop column columnName
where tblName
is the name of the table and columnName
is the name of the column, but there's a few things you may need to do first.
- If there are any foreign key references to the column, you'll need to get rid of them first.
- If there's an index using that column, you'll need to either get rid of it or adjust it to not use that column.
Keep in mind that the performance of this command may not necessarily be good. One option is to wait for a down-time period when you can be certain no-one will be accessing the database, rename the current table, then use create table
and insert into ... select from
to transfer the columns you don't want deleted.
One of the later releases of Oracle actually has a soft delete which can just marks a column as unused without removing it physically. It has the same effect since you can no longer reference it and there's a command along the lines of alter table ... drop unused columns
which is meant to be run in quiet time, which does the hard work of actually removing it physically.
This has the advantage of "disappearing" the columns immediately without dragging down database performance during busy times.
For large tables this can be very slow. It can often be a lot faster to create a new table, a duplicate of the old one but with the changes, and insert the data. Drop the old table and then rename the new table.