Summary: in this tutorial, you will learn how to use the Oracle ALTER TABLE statement to modify the table structure.
Introduction to Oracle ALTER TABLE Statement #
To modify the structure of an existing table, you use the ALTER TABLE statement.
Here’s the basic syntax of the ALTER TABLE statement:
ALTER TABLE table_name action;Code language: SQL (Structured Query Language) (sql)
In this syntax:
- First, specify the table name which you want to modify.
- Second, indicate the action that you want to perform after the table name.
The ALTER TABLE statement allows you to:
Adding a new column #
To add a new column to a table, you use the following syntax:
ALTER TABLE table_name
ADD column_name type constraint;Code language: SQL (Structured Query Language) (sql)
For example:
First, create a new table called persons:
CREATE TABLE persons(
person_id NUMBER PRIMARY KEY,
first_name VARCHAR2(100) NOT NULL,
last_name VARCHAR2(100) NOT NULL
);Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Second, add a new column called birthdate to the persons table:
ALTER TABLE persons
ADD birthdate DATE NOT NULL;Code language: SQL (Structured Query Language) (sql)
Third, shows the structure of the persons table using the DESC statement:
DESC persons;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Output:
Name Null? Type
---------- -------- -------------
PERSON_ID NOT NULL NUMBER
FIRST_NAME NOT NULL VARCHAR2(100)
LAST_NAME NOT NULL VARCHAR2(100)
BIRTHDATE NOT NULL DATE Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
The output indicates that the birthdate column appears at the end of the column list of the persons table.
Adding multiple columns #
To add multiple columns to a table at once, you place the new columns inside the parenthesis as follows:
ALTER TABLE table_name
ADD (
column_name type constraint,
column_name type constraint,
...
);Code language: SQL (Structured Query Language) (sql)
For example:
First, add two new columns to the persons table:
ALTER TABLE persons
ADD (
phone VARCHAR(20),
email VARCHAR(100)
);Code language: SQL (Structured Query Language) (sql)
Second, show the structure of the persons table:
DESC personsCode language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Output:
Name Null Type
---------- -------- -------------
PERSON_ID NOT NULL NUMBER
FIRST_NAME NOT NULL VARCHAR2(50)
LAST_NAME NOT NULL VARCHAR2(50)
BIRTHDATE NOT NULL DATE
PHONE VARCHAR2(20)
EMAIL VARCHAR2(100) Code language: SQL (Structured Query Language) (sql)
The output shows two new columns phone and email at the end of the column list of the persons table.
Modifying attributes of a column #
To modify the attributes of a column, you use the ALTER TABLE ... MODIFY statement:
ALTER TABLE table_name
MODIFY column_name type constraint;Code language: SQL (Structured Query Language) (sql)
For example:
First, change the birthdate column to a null-able column:
ALTER TABLE persons
MODIFY birthdate DATE NULL;Code language: SQL (Structured Query Language) (sql)
Second, show the new structure of the persons table:
DESC persons;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Output:
Name Null? Type
---------- -------- -------------
PERSON_ID NOT NULL NUMBER
FIRST_NAME NOT NULL VARCHAR2(100)
LAST_NAME NOT NULL VARCHAR2(100)
BIRTHDATE DATE
PHONE VARCHAR2(20)
EMAIL VARCHAR2(100)Code language: SQL (Structured Query Language) (sql)
The output indicates that the birthdate column is nullable.
Modifying attributes of multiple columns #
To modify attributes of multiple columns, you use the ALTER TABLE...MODIFY statement:
ALTER TABLE table_name
MODIFY (
column_1 type constraint,
column_2 type constraint,
...
);Code language: SQL (Structured Query Language) (sql)
For example:
First, change the phone and email column to NOT NULL columns and extend the maximum length of the email column to 255 characters:
ALTER TABLE persons
MODIFY (
phone VARCHAR2(20) NOT NULL,
email VARCHAR2(255) NOT NULL
);Code language: SQL (Structured Query Language) (sql)
Second, show persons table structure:
DESC persons;Code language: SQL (Structured Query Language) (sql)
Output:
Name Null? Type
---------- -------- -------------
PERSON_ID NOT NULL NUMBER
FIRST_NAME NOT NULL VARCHAR2(100)
LAST_NAME NOT NULL VARCHAR2(100)
BIRTHDATE DATE
PHONE NOT NULL VARCHAR2(20)
EMAIL NOT NULL VARCHAR2(255)Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Dropping a column #
To remove an existing column from a table, you use the ALTER TALE ... DROP COLUMN statement:
ALTER TABLE table_name
DROP COLUMN column_name;Code language: SQL (Structured Query Language) (sql)
This statement deletes the column from the table structure and also the data stored in that column.
For example:
First, remove the birthdate column from the persons table:
ALTER TABLE persons
DROP COLUMN birthdate;Code language: SQL (Structured Query Language) (sql)
Second, show the persons table structure:
DESC persons;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Output:
Name Null? Type
---------- -------- -------------
PERSON_ID NOT NULL NUMBER
FIRST_NAME NOT NULL VARCHAR2(100)
LAST_NAME NOT NULL VARCHAR2(100)
PHONE NOT NULL VARCHAR2(20)
EMAIL NOT NULL VARCHAR2(255)Code language: SQL (Structured Query Language) (sql)
The output indicate that that the birthdate column has been removed.
Dropping multiple columns #
To drop multiple columns at the same time, you use the ALTER TABLE ... DROP statement:
ALTER TABLE table_name
DROP (column_1,column_2,...);Code language: SQL (Structured Query Language) (sql)
For example:
First, remove the phone and email columns from the persons table:
ALTER TABLE persons
DROP ( email, phone );Code language: SQL (Structured Query Language) (sql)
Second, show the table structure:
DESC persons;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Output:
Name Null? Type
---------- -------- -------------
PERSON_ID NOT NULL NUMBER
FIRST_NAME NOT NULL VARCHAR2(100)
LAST_NAME NOT NULL VARCHAR2(100)Code language: SQL (Structured Query Language) (sql)
The email and phone columns have been removed as expected.
Renaming a column #
Since version 9i, Oracle added a clause for renaming a column as follows:
ALTER TABLE table_name
RENAME COLUMN column_name TO new_name;Code language: SQL (Structured Query Language) (sql)
For example:
First, rename the first_name column to forename column:
ALTER TABLE persons
RENAME COLUMN first_name TO forename;Code language: SQL (Structured Query Language) (sql)
Second, check the table structure:
DESC persons;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Output:
Name Null? Type
--------- -------- -------------
PERSON_ID NOT NULL NUMBER
FORENAME NOT NULL VARCHAR2(100)
LAST_NAME NOT NULL VARCHAR2(100)Code language: SQL (Structured Query Language) (sql)
Renaming table #
To change the name of a table to a new one, you use the ALTER TABLE ... RENAME TO statement:
ALTER TABLE table_name
RENAME TO new_table_name;Code language: SQL (Structured Query Language) (sql)
For example:
First, rename the persons table people:
ALTER TABLE persons
RENAME TO people;Code language: SQL (Structured Query Language) (sql)
Second, show the table structure:
DESC people;Code language: SQL (Structured Query Language) (sql)
Summary #
- Use the
Oracle ALTER TABLEstatement to change the structure of an existing table.