Using DDL Statements to Create and Manage Tables

Using DDL Statements
to Create and Manage Tables

Copyright © 2004, Oracle. All rights reserved.

Objectives


After completing this lesson, you should be
able to do the following:







Categorize the main database objects
Review the table structure
List the data types that are available for columns
Create a simple table

Understand how constraints are created at the
time of table creation
Describe how schema objects work

Database Objects
Object

Description

Table

Basic unit of storage; composed of rows

View

Logically represents subsets of data from
one or more tables

Sequence


Generates numeric values

Index

Improves the performance of some
queries

Synonym

Gives alternative names to objects

Naming Rules


Table names and column names:







Must begin with a letter
Must be 1–30 characters long
Must contain only A–Z, a–z, 0–9, _, $, and #
Must not duplicate the name of another
object owned by the same user
Must not be an Oracle server reserved word

CREATE TABLE Statement


You must have:



CREATE TABLE privilege
A storage area

CREATE TABLE [schema.]table
(column datatype [DEFAULT expr][, ...]);



You specify:



Table name
Column name, column data type, and column size

Referencing Another User’s Tables



Tables belonging to other users are not in
the user’s schema.
You should use the owner’s name as a prefi
to those tables.

USERA


USERB

SELECT *
FROM userB.employees;

SELECT *
FROM userA.employees;

DEFAULT Option


Specify a default value for a column during an insert.

... hire_date DATE DEFAULT SYSDATE, ...




Literal values, eipressions, or SQL functions are legal
values.

Another column’s name or a pseudocolumn are
illegal values.
The default data type must match the column data
type.

CREATE TABLE hire_dates
(id
NUMBER(8),
hire_date DATE DEFAULT SYSDATE);
Table created.

Creating Tables


Create the table.

CREATE TABLE dept
(deptno
dname
loc

create_date
Table created.


NUMBER(2),
VARCHAR2(14),
VARCHAR2(13),
DATE DEFAULT SYSDATE);

Confrm table creation.

DESCRIBE dept

Data Types
Data Type

Description

VARCHAR2(size) Variable-length character data
CHAR(size)


Fixed-length character data

NUMBER(p,s)

Variable-length numeric data

DATE

Date and time values

LONG

Variable-length character data (up to 2 GB)

CLOB

Character data (up to 4 GB)

RAW and LONG

RAW

Raw binary data

BLOB

Binary data (up to 4 GB)

BFILE

Binary data stored in an external file (up to 4 GB)

ROWID

A base-64 number system representing the unique
address of a row in its table

Datetime Data Types



You can use several datetime data types:
Data Type

Description

TIMESTAMP

Date with fractional seconds

INTERVAL YEAR TO
MONTH

Stored as an interval of years
and months

INTERVAL DAY TO
SECOND

Stored as an interval of days, hours,
minutes, and seconds


Datetime Data Types





The TIMESTAMP data type is an eitension of
the DATE data type.
It stores the year, month, and day of the DATE
data type plus hour, minute, and second
values as well as the fractional second value.
You can optionally specify the time zone.

TIMESTAMP[(fractional_seconds_precision)]
TIMESTAMP[(fractional_seconds_precision)]
WITH TIME ZONE
TIMESTAMP[(fractional_seconds_precision)]
WITH LOCAL TIME ZONE

Datetime Data Types


The INTERVAL YEAR TO MONTH data type
stores a period of time using the YEAR and
MONTH datetime felds:

INTERVAL YEAR [(year_precision)] TO MONTH



The INTERVAL DAY TO SECOND data type
stores a period of time in terms of days,
hours, minutes, and seconds:

INTERVAL DAY [(day_precision)]
TO SECOND [(fractional_seconds_precision)]

Including Constraints




Constraints enforce rules at the table level.
Constraints prevent the deletion of a table if
there are dependencies.
The following constraint types are valid:






NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK

Constraint Guidelines



You can name a constraint, or the Oracle server
generates a name by using the SYS_Cn format.
Create a constraint at either of the following
times:






At the same time as the table is created
After the table has been created

Defne a constraint at the column or table level.
View a constraint in the data dictionary.

Defning Constraints


Syntai:

CREATE TABLE [schema.]table
(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);
 Column-level constraint:
column [CONSTRAINT constraint_name] constraint_type,
 Table-level constraint:
column,...
[CONSTRAINT constraint_name] constraint_type
(column, ...),

Defning Constraints


Column-level constraint:

CREATE TABLE employees(
employee_id NUMBER(6)
CONSTRAINT emp_emp_id_pk PRIMARY KEY,
first_name
VARCHAR2(20),
...);
 Table-level constraint:
CREATE TABLE employees(
employee_id NUMBER(6),
first_name
VARCHAR2(20),
...
job_id
VARCHAR2(10) NOT NULL,
CONSTRAINT emp_emp_id_pk
PRIMARY KEY (EMPLOYEE_ID));

1

2

NOT NULL Constraint


Ensures that null values are not permitted
for the column:


NOT NULL constraint
(No row can contain
a null value for
this column.)

NOT NULL
constraint

Absence of NOT NULL
constraint
(Any row can contain a
null value for this
column.)

UNIQUE Constraint
UNIQUE constraint

EMPLOYEES


INSERT INTO

Allowed
Not allowed:
already exists

UNIQUE Constraint


Defned at either the table level or the column
level:
CREATE TABLE employees(
employee_id
NUMBER(6),
last_name
VARCHAR2(25) NOT NULL,
email
VARCHAR2(25),
salary
NUMBER(8,2),
commission_pct
NUMBER(2,2),
hire_date
DATE NOT NULL,
...
CONSTRAINT emp_email_uk UNIQUE(email));

PRIMARY KEY Constraint
DEPARTMENTS

PRIMARY KEY


Not allowed
(null value)

Not allowed
(50 already exists)

INSERT INTO

FOREIGN KEY Constraint
DEPARTMENTS

PRIMARY
KEY



EMPLOYEES
FOREIGN
KEY



INSERT INTO

Not allowed
(9 does not
exist)
Allowed

FOREIGN KEY Constraint


Defned at either the table level or the column
level:
CREATE TABLE employees(
employee_id
NUMBER(6),
last_name
VARCHAR2(25) NOT NULL,
email
VARCHAR2(25),
salary
NUMBER(8,2),
commission_pct
NUMBER(2,2),
hire_date
DATE NOT NULL,
...
department_id
NUMBER(4),
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id),
CONSTRAINT emp_email_uk UNIQUE(email));

FOREIGN KEY Constraint:
Keywords






FOREIGN KEY: Defnes the column in the
child table at the table-constraint level
REFERENCES: Identifes the table and
column in the parent table
ON DELETE CASCADE: Deletes the
dependent rows in the child table when a
row in the parent table is deleted
ON DELETE SET NULL: Converts dependent
foreign key values to null

CHECK Constraint



Defnes a condition that each row must satisfy
The following eipressions are not allowed:




References to CURRVAL, NEXTVAL, LEVEL, and ROWNUM
pseudocolumns
Calls to SYSDATE, UID, USER, and USERENV functions
Queries that refer to other values in other rows

..., salary NUMBER(2)
CONSTRAINT emp_salary_min
CHECK (salary > 0),...

CREATE TABLE: Example
CREATE TABLE employees
( employee_id
NUMBER(6)
CONSTRAINT
emp_employee_id
, first_name
VARCHAR2(20)
, last_name
VARCHAR2(25)
CONSTRAINT
emp_last_name_nn
, email
VARCHAR2(25)
CONSTRAINT
emp_email_nn
CONSTRAINT
emp_email_uk
, phone_number
VARCHAR2(20)
, hire_date
DATE
CONSTRAINT
emp_hire_date_nn
, job_id
VARCHAR2(10)
CONSTRAINT
emp_job_nn
, salary
NUMBER(8,2)
CONSTRAINT
emp_salary_ck
, commission_pct NUMBER(2,2)
, manager_id
NUMBER(6)
, department_id NUMBER(4)
CONSTRAINT
emp_dept_fk
departments (department_id));

PRIMARY KEY
NOT NULL
NOT NULL
UNIQUE
NOT NULL
NOT NULL
CHECK (salary>0)

REFERENCES

Violating Constraints
UPDATE employees
SET
department_id = 55
WHERE department_id = 110;
UPDATE employees
*
ERROR at line 1:
ORA-02291: integrity constraint (HR.EMP_DEPT_FK)
violated - parent key not found


Department 55 does not eiist.

Violating Constraints


You cannot delete a row that contains a
primary key that is used as a foreign key in
another table.
DELETE FROM departments
WHERE
department_id = 60;

DELETE FROM departments
*
ERROR at line 1:
ORA-02292: integrity constraint (HR.EMP_DEPT_FK)
violated - child record found

Creating a Table
by Using a Subquery


Create a table and insert rows by combining
the CREATE TABLE statement and the AS
subquery option.

CREATE TABLE table
[(column, column...)]
AS subquery;



Match the number of specifed columns to
the number of subquery columns.
Defne columns with column names and
default values.

Creating a Table
by Using a Subquery
CREATE TABLE dept80
AS
SELECT employee_id, last_name,
salary*12 ANNSAL,
hire_date
FROM
employees
WHERE
department_id = 80;
Table created.
DESCRIBE dept80

ALTER TABLE Statement


Use the ALTER TABLE statement to:





Add a new column
Modify an eiisting column
Defne a default value for the new column
Drop a column

Dropping a Table






All data and structure in the table are deleted.
Any pending transactions are committed.
All indeies are dropped.
All constraints are dropped.
You cannot roll back the DROP TABLE statement.

DROP TABLE dept80;
Table dropped.

Summary


In this lesson, you should have learned how
to use the CREATE TABLE statement to
create a table and include constraints.







Categorize the main database objects
Review the table structure
List the data types that are available for columns
Create a simple table
Understand how constraints are created at the
time of table creation
Describe how schema objects work

Practice 9: Overview


This practice covers the following topics:





Creating new tables
Creating a new table by using the CREATE
TABLE AS syntai
Verifying that tables eiist
Dropping tables