You are on page 1of 56

Chapter 6

Additional Database Objects


(up to p.195 and all in the pptx file)

Jason C. H. Chen, Ph.D.


Professor of MIS
School of Business
Gonzaga University
Spokane, WA 99258 USA
chen@jepson.gonzaga.edu
Dr. Chen, Oracle Database System (Oracle)

Objectives
Define the purpose of a sequence and state how it can
be used in a database
Explain why gaps may appear in the integers
generated by a sequence
Use the CREATE SEQUENCE command to create a
sequence
Call and use sequence values
Identify which options cannot be changed by the
ALTER SEQUENCE command
Delete a sequence
Create indexes with the CREATE INDEX command
Explain the main index structures: B-tree and bitmap
Dr. Chen, Oracle Database System (Oracle)

Objectives (continued)
Verify index use with the explain plan
Introduce variations on conventional indexes,
including a function-based index and an index
organized table
Verify index existence via the data dictionary
Rename an index with the ALTER INDEX
command
Remove an index using the DROP INDEX
command
Create and remove a public synonym
Dr. Chen, Oracle Database System (Oracle)

Database Objects
An object is anything that has a name and
defined structure
Includes:
Table stores data
Sequence generates sequential integers
Index allows users to quickly locate specific
records
Synonym alias for other database objects

Dr. Chen, Oracle Database System (Oracle)

Sequences
Used for internal control purposes by
providing sequential integers for auditing
Used to generate unique value for primary
key column
Surrogate key = no correlation with actual row
contents

Dr. Chen, Oracle Database System (Oracle)

Creating a Sequence
Use the CREATE SEQUENCE command
Various intervals are allowed Default: 1
You can specify the starting number Default: 1
CREATE SEQUENCE sequencename
[INCREASE BY value]
[START WITH value]
[{MAXVALUE value | MAXVALUE}]
[{MINVALUE value | MINVALUE}]
[{CYCLE | NOCYLE}]
[{ORDER | NOORDER}]
[{CACHE value | NOCACHE}];
Figure 6-1 Syntax of the CREATE SEQUENCE command
Dr. Chen, Oracle Database System (Oracle)

Creating a Sequence (continued)


Can specify MINVALUE for decreasing sequence
and MAXVALUE for increasing sequence
Numbers can be reused if CYCLE is specified
ORDER clause is used in application cluster
environment
Use CACHE to pregenerate integers Default: 20

Dr. Chen, Oracle Database System (Oracle)

ORDERS Data Files

Dr. Chen, Oracle Database System (Oracle)

Refresh the Database


1. Go to Blackboard and download (two)
data files from Oracle chapter6 and save
under c:\oradata\chapter6\
2. Run the following script file
Start c:\oradata\chapter6\JLDB_Build_6.sql

Dr. Chen, Oracle Database System (Oracle)

Creating a Sequence (continued)

Figure 6-3

Syntax of the INSERT command

Dr. Chen, Oracle Database System (Oracle)

10

Creating a Sequence (continued)

Figure 6-4 Query USER-OBJECTS to verify existing sequence

Dr. Chen, Oracle Database System (Oracle)

11

Creating a Sequence (continued)


To verify the settings for options of a sequence, query
USER_SEQUENCES data dictionary view

Figure 6-5

Verifying sequence option settings

Next Number to issue

SELECT SEQUENCE_NAME
FROM USER_SEQUENCES;
SEQUENCE_NAME
-----------------------------ORDERS_ORDER#_SEQ
Dr. Chen, Oracle Database System (Oracle)

12

Using Sequence Values


NEXTVAL generates integer

Figure 6-6

Inserting a row, using a sequence to provide a PRIMARY KEY value

Dr. Chen, Oracle Database System (Oracle)

13

Using Sequence Values (continued)

Figure 6-7

Order added, using a sequence value for the Order#

Dr. Chen, Oracle Database System (Oracle)

14

Using Sequence Values (continued)


CURRVAL contains last integer generated by
NEXTVAL

Figure 6-8 Using CURRVAL to insert an order detail row


Dr. Chen, Oracle Database System (Oracle)

15

Using Sequence Values (continued)

Figure 6-9 Verify the CURRVAL value


Dr. Chen, Oracle Database System (Oracle)

16

Altering Sequence Definitions


Use ALTER SEQUENCE command to
change the settings for a sequence
START WITH value cannot be altered
drop the sequence and re-create it
Changes cannot make current integers
invalid

Dr. Chen, Oracle Database System (Oracle)

17

ALTER SEQUENCE Command


Example

Figure 6-11 Command to change the INCREMENT BY setting for a sequence

Dr. Chen, Oracle Database System (Oracle)

18

Checking Values on Sequences and SYSDATE

Figure 6-12 New setting


for the
ORDERS_ORDER#_SEQ
sequence

Figure 6-13 Using the


DUAL table

Dr. Chen, Oracle Database System (Oracle)

19

Checking
Values on
Sequences

Figure 6-14 Testing


sequence values with
the DUAL table

Dr. Chen, Oracle Database System (Oracle)

Why
1041?
20

Removing a Sequence
Use the DROP SEQUENCE command to delete
a sequence
Previous values generated are not affected by
removing a sequence from a database

Figure 6-16 Dropping the ORDERS_ORDER#_SEQ sequence


Dr. Chen, Oracle Database System (Oracle)

21

Removing a Sequence (continued)

Figure 6-17 Verify that the sequence is removed


Dr. Chen, Oracle Database System (Oracle)

22

Indexes
Query Optimization
An index stores frequently referenced values and
ROWIDs
Can be based on one column, multiple columns,
functions, or expressions

If database query activity (e.g., process speed) is the


priority
Indexes should be considered

If database operations involve more DML actions than


query actions
Index creation should be minimized
Dr. Chen, Oracle Database System (Oracle)

23

B-Tree Index

Figure 6-19 B-tree index organization


Dr. Chen, Oracle Database System (Oracle)

24

B-Tree Index (continued)


Implicitly create an index by PRIMARY
KEY and UNIQUE constraints
Explicitly create an index by using the
CREATE INDEX command
For example:
SELECT index_name FROM user_indexes;
-- result on the next slide

Dr. Chen, Oracle Database System (Oracle)

25

Examples on Query Optimization


Note that the following slides are not in the
text.
Please study them thoroughly and practice
all examples (SQL commands are available
in the Ch6Queries.sql.

Dr. Chen, Oracle Database System (Oracle)

26

For example:
SELECT index_name FROM user_indexes;
INDEX_NAME
INDEX_NAME
----------------------------------------------------------ACCTBONUS_AMID_PK
ENROLLMENT_PK
BOOKAUTHOR_PK
COURSE_SECTION_CSEC_ID_PK
ORDERITEMS_PK
COURSE_COURSE_ID_PK
BOOKS_ISBN_PK
TERM_TERM_ID_PK
BOOKS_COST_IDX
STUDENT_S_ID_PK
AUTHOR_AUTHORID_PK
SYS_IL0000110103C00010$$
PUBLISHER_PUBID_PK
FACULTY_F_ID_PK
ORDERS_ORDER#_PK
PUBLISHER3_PUBID_PK
CUSTOMERS_ZIP_DESC_IDX
PUBLISHER2_PUBID_PK
CUSTOMERS_ZIP_IDX
REPCONTRACTS_PK
CUSTOMERS_CUSTOMER#_PK
BOOKSTORES_ID_PK
EMPLOYEES_EMPNO_PK
BOOKSTORES_NAME_UK
PT_CHARG_PATIENTNO_ITEMCODE_PK
STOREREPS_ID_PK
ITEM_ITEM_CODE_PK
ROOM_ROOM_NO_PK
32 rows selected.
ACCOMODATION_ACCOM_ID_PK
DOCTOR_PHYSCIAN_ID__PK
What specific information is displayed
PATIENT_PATIENT_NO_PK
on the output?
LOCATION_LOC_ID_PK
Dr. Chen, Oracle Database System (Oracle)

Answer: pk
Since they are all implicitly indexed.

27

Implicitly Index (cont.)


-- enter in SQL DEVELOPER
SELECT table_name, index_name,
index_type
FROM user_indexes;

Dr. Chen, Oracle Database System (Oracle)

28

Optimizing Query Processing A Quick Way to Speed Access to Your data

Indexes may be used to improve the


efficiency of data searches to meet particular
search criteria after the table has been in use
for some time. Therefore, the ability to
create indexes quickly and efficiently at any
time is important.
SQL indexes can be created on the basis of
any selected attributes
Dr. Chen, Oracle Database System (Oracle)

29

Optimizing Query Processing an example (not in the text)


BOOKS
ISBN

Title

PubDate

PubID

Cost

VARCHAR2(10)

VARCHAR2(30)

DATE

NUMBER(2)

NUMBER(5,2) NUMBER(5,2)

Retail

Discount

Category

NUMBER(4,2)

VARCHAR2(12)

BOOKS

Dr. Chen, Oracle Database System (Oracle)

30

-- chapter 6, (about the same as Figure 6-30; p. 199 )


-- 'BOOKS' must be in upper case

SELECT table_name, index_name, index_type


FROM user_indexes
WHERE table_name = 'BOOKS';

Optimizing Query
Processing

SELECT isbn, title, cost, category


FROM books
WHERE cost > 20;
ISBN
---------4981341710
8843172113
3957136468
1915762492
9959789321
2491748320
2147428890

TITLE
COST CATEGORY
------------------------------ ---------- -----------BUILDING A CAR WITH TOOTHPICKS
37.8 CHILDREN
DATABASE IMPLEMENTATION
31.4 COMPUTER
HOLY GRAIL OF ORACLE
47.25 COMPUTER
HANDCRANKED COMPUTERS
21.8 COMPUTER
E-BUSINESS THE EASY WAY
37.9 COMPUTER
PAINLESS CHILD-REARING
48 FAMILY LIFE
SHORTEST POEMS
21.85 LITERATURE

7 rows selected.
Dr. Chen, Oracle Database System (Oracle)

31

Optimizing Query Processing (conti.)


Syntax:
CREATE INDEX name_of_index
ON table_name
(field_to_be_indexed);
For example (but, do not enter the
SQL command now):
CREATE INDEX books_cost_idx
ON books (cost);

Dr. Chen, Oracle Database System (Oracle)

Note that this statement


defines an index called
books_cost_idx for the cost
column in the books table.
This index ensures that in
the next example SQL only
needs to look at row in the
database that satisfy the
WHERE condition, and is,
therefore, quicker to
produce an answer.
32

Optimizing Query Processing (conti.)


Note that this statement
SELECT isbn, title, cost, category
defines an index called
FROM books
books_cost_idx for the cost
WHERE cost > 20;
column in the books table.
This index ensures that in
CREATE INDEX books_cost_idx the next example SQL only
ON books (cost);
needs to look at row in the
database that satisfy the
WHERE condition, and is,
therefore, quicker to
produce an answer.
Dr. Chen, Oracle Database System (Oracle)

33

Optimizing Query Processing (conti.)


Type the following SQL:
SELECT isbn, title, cost, category
FROM books
WHERE cost > 20;
ISBN
---------4981341710
8843172113
3957136468
1915762492
9959789321
2491748320
2147428890

TITLE
COST CATEGORY
------------------------------ ---------- -----------BUILDING A CAR WITH TOOTHPICKS
37.8 CHILDREN
DATABASE IMPLEMENTATION
31.4 COMPUTER
HOLY GRAIL OF ORACLE
47.25 COMPUTER
HANDCRANKED COMPUTERS
21.8 COMPUTER
E-BUSINESS THE EASY WAY
37.9 COMPUTER
PAINLESS CHILD-REARING
48 FAMILY LIFE
SHORTEST POEMS
21.85 LITERATURE

7 rows selected.

CREATE INDEX books_cost_idx ON books (cost);


SQL> CREATE INDEX books_cost_idx

ON books (cost);

Index created.
Dr. Chen, Oracle Database System (Oracle)

34

Optimizing Query Processing (conti.)


SELECT isbn, title, cost, category
FROM books
WHERE cost > 20;
ISBN
---------1915762492
2147428890
8843172113
4981341710
9959789321
3957136468
2491748320

TITLE
COST CATEGORY
------------------------------ ---------- -----------HANDCRANKED COMPUTERS
21.8 COMPUTER
SHORTEST POEMS
21.85 LITERATURE
DATABASE IMPLEMENTATION
31.4 COMPUTER
BUILDING A CAR WITH TOOTHPICKS
37.8 CHILDREN
E-BUSINESS THE EASY WAY
37.9 COMPUTER
HOLY GRAIL OF ORACLE
47.25 COMPUTER
PAINLESS CHILD-REARING
48 FAMILY LIFE

7 rows selected.

What is the difference on the output between these two


versions?
Dr. Chen, Oracle Database System (Oracle)

35

Before INDEX.
ISBN
---------4981341710
8843172113
3957136468
1915762492
9959789321
2491748320
2147428890

TITLE
COST CATEGORY
------------------------------ ---------- -----------BUILDING A CAR WITH TOOTHPICKS
37.8 CHILDREN
DATABASE IMPLEMENTATION
31.4 COMPUTER
HOLY GRAIL OF ORACLE
47.25 COMPUTER
HANDCRANKED COMPUTERS
21.8 COMPUTER
E-BUSINESS THE EASY WAY
37.9 COMPUTER
PAINLESS CHILD-REARING
48 FAMILY LIFE
SHORTEST POEMS
21.85 LITERATURE

7 rows selected.

After INDEX.
ISBN
---------1915762492
2147428890
8843172113
4981341710
9959789321
3957136468
2491748320

TITLE
COST CATEGORY
------------------------------ ---------- -----------HANDCRANKED COMPUTERS
21.8 COMPUTER
SHORTEST POEMS
21.85 LITERATURE
DATABASE IMPLEMENTATION
31.4 COMPUTER
BUILDING A CAR WITH TOOTHPICKS
37.8 CHILDREN
E-BUSINESS THE EASY WAY
37.9 COMPUTER
HOLY GRAIL OF ORACLE
47.25 COMPUTER
PAINLESS CHILD-REARING
48 FAMILY LIFE

7 rows selected.

Dr. Chen, Oracle Database System (Oracle)

36

Index on Query Optimization


SELECT table_name, index_name, index_type
FROM user_indexes
WHERE table_name = 'BOOKS';

Dr. Chen, Oracle Database System (Oracle)

37

Index on Query Optimization (conti.)


-- default is ASCENDING
CREATE INDEX books_cost_desc_idx
ON books (cost DESC);
SELECT isbn, title, cost, category
FROM books
WHERE cost > 20;
ISBN
---------1915762492
2147428890
8843172113
4981341710
9959789321
3957136468
2491748320

TITLE
COST CATEGORY
------------------------------ ---------- -----------HANDCRANKED COMPUTERS
21.8 COMPUTER
SHORTEST POEMS
21.85 LITERATURE
DATABASE IMPLEMENTATION
31.4 COMPUTER
BUILDING A CAR WITH TOOTHPICKS
37.8 CHILDREN
E-BUSINESS THE EASY WAY
37.9 COMPUTER
HOLY GRAIL OF ORACLE
47.25 COMPUTER
PAINLESS CHILD-REARING
48 FAMILY LIFE

7 rows selected.

Why the output is still displayed as ascending order?


Internally, the books table has been indexed as ______ order (using
pointer); however, the display is on the _________ (default) order.
Dr. Chen, Oracle Database System (Oracle)

38

Index on Query Optimization (conti.)


-- chapter 6, (about the same as Figure 6-30; p. 199 )
-- 'BOOKS' must be in upper case
SELECT table_name, index_name, index_type
FROM user_indexes
WHERE table_name = 'BOOKS';

Dr. Chen, Oracle Database System (Oracle)

39

Query Optimization: DROP INDEX


DROP INDEX books_cost_idx;
DROP INDEX books_cost_desc_idx;
-- chapter 6, (about the same as Figure 6-30; p. 199 )
-- 'BOOKS' must be in upper case
SELECT table_name, index_name, index_type
FROM user_indexes
WHERE table_name = 'BOOKS';

Dr. Chen, Oracle Database System (Oracle)

40

Summary on Optimizing Query Processing (cont.)


The indexes are defined so as to optimize the processing
of SELECT statements. ;
An index is never explicitly referenced in a SELECT
statement; the syntax of SQL does not allow this;
During the processing of a statement, SQL itself
determines whether an existing index will be used;
An index may be created or deleted at any time;
When updating, inserting or deleting rows, SQL also
maintains the indexes on the tables concerned. This means
that, on the one hand, the processing time for SELECT
statements is reduced, while, on the other hand, the
processing time for update statements (such as INSERT,
UPDATE and DELETE) can increase.
Dr. Chen, Oracle Database System (Oracle)

41

Your Turn
Practice the following examples (from the
text)

Dr. Chen, Oracle Database System (Oracle)

42

CREATE INDEX Command Examples

Figure 6-18 Creating an index on the Zip column

Dr. Chen, Oracle Database System (Oracle)

43

The Explain Plan

Figure 6-20 View the explain plan indicating a full table scan
Dr. Chen, Oracle Database System (Oracle)

44

The Explain Plan (continued)

Figure 6-21 View the explain plan indicating a full table scan

Dr. Chen, Oracle Database System (Oracle)

45

UNIQUE INDEX

Figure 6-22 Explicitly creating a unique index

-- chapter 6, Figure 6-23; p. 195


CREATE INDEX customers_zip_desc_idx
ON customers (zip DESC);
Dr. Chen, Oracle Database System (Oracle)

46

CREATE INDEX Command Examples


The composite index could improve the performance of queries
that include a search condition on both the Lastname and
Firstname column.
Generally, it is more efficient than creating two separate singlecolumn indexes because less I/O is required to read a single
index.

Figure 6-24 Creating a composite index


Dr. Chen, Oracle Database System (Oracle)

47

Verifying Composite Index


SELECT customer#, lastname, firstname, city, state, zip
FROM customers;
-- chapter 6, Figure 6-24; p. 195
CREATE INDEX customer_name_idx
ON customers (lastname, firstname);
SELECT customer#, lastname, firstname, city, state, zip
FROM customers;

Any performance improvement?


After tested, no significant performance can be
found since it is a very small database.
Dr. Chen, Oracle Database System (Oracle)

48

Practice all the examples in the text.


A Script file is available on the Bb (file
name: Ch6Queries.sql)
After completing all examples, do the HW.

Dr. Chen, Oracle Database System (Oracle)

49

Homework - Hands-On Assignments


Email me with one attachment
(Oracle_ch6_Spool_Lname_Fname.) to:
chen@jepson.gonzaga.edu
with subject title of
bmis441_Oracle_ch6
Read and Practice all examples on Chapters 6
1. Run the script files (in the folder \oradata\chapter5\):
JLDB_Build_6.sql
2. Read Oracle assignment and create a script file
Oracle_ch6_Lname_Fname.sql for questions (#1 to #5
and #9; pp.211-212) on Hands-on Assignments. Use
appropriate COLUMN statements to produce readable
outputs if needed.
3. Execute and test one problem at a time and make sure
they are all running successfully.
4. When you done, spool the script files (see next slide
for spooling instructions) and email the file
(Oracle_ch6_Spool_Lname_Fname.txt) to me by the
midnight before the next class.
Dr. Chen, Oracle Database System (Oracle)

50

How to Spool your Script and Output Files


After you tested the script file of Oracle_ch6_Lname_Fname.sql successfully,
follow the instructions below to spool both script and output files:
Step 0. Run the following script file from SQL*Plus (since you have created
JLDB tables)
Start c:\oradata\chapter6\JLDB_Build_6.sql

1. type the following on SQL>


Spool c:\oradata\Oracle_ch6_Spool_Lname_Fname.txt (make sure your name is entered)

2. open Oracle_ch6_Lname_Fname.sql that you already tested


3. copy and paste all the SQL commands (including all comments) to the
SQL*PLUS
4. type Spool Off on the SQL>
The output should contain your personal information, all SQL commands and
their solution on the .txt file and saved in C: drive (oradata\ folder)
Email me with the spooled file (.txt) with attachment to:
chen@jepson.gonzaga.edu
with subject title of
bmis441_Oracle_ch6
Dr. Chen, Oracle Database System (Oracle)

51

Summary

A sequence can be created to generate a series of integers


The values generated by a sequence can be stored in any table
A sequence is created with the CREATE SEQUENCE command
Gaps in sequences might occur if the values are stored in various
tables, if numbers are cached but not used, or if a rollback occurs
A value is generated by using the NEXTVAL pseudocolumn
The CURRVAL pseudocolumn is NULL until a value is generated
by NEXTVAL
The USER_OBJECTS data dictionary object can be used to
confirm the existence of all schema objects
The USER_SEQUENCES data dictionary object is used to view
sequence settings

Dr. Chen, Oracle Database System (Oracle)

52

Summary (continued)
The ALTER SEQUENCE command is used to modify an existing
sequence; the only settings that cant be modified are the START
WITH option and any option that would be invalid because of
previously generated values
The DUAL table is helpful for testing sequence value generation
The DROP SEQUENCE command deletes an existing sequence
An index can be created to speed up the query process
DML operations are always slower when indexes exist
Oracle 11g creates an index for PRIMARY KEY and UNIQUE
constraints automatically
An explicit index is created with the CREATE INDEX command
An index can be used by Oracle 11g automatically if a query
criterion or sort operation is based on a column or an expression
used to create the index
Dr. Chen, Oracle Database System (Oracle)

53

Summary (continued)
The two main structures for indexes are B-tree and bitmap
The explain plan can verify whether an index is used in a
query
Function-based indexes are used to index an expression or
the use of functions on a column or columns
An index organized table is a table stored in a B-tree structure
to combine the index and table into one database object
Information about an index can be retrieved from the
USER_INDEXES and USER_IND_COLUMNS views
An index can be dropped with the DROP INDEX command
An index can be renamed with the ALTER INDEX command
Dr. Chen, Oracle Database System (Oracle)

54

Summary (continued)
Except for a name change, an index cant be modified; it
must be deleted and then re-created
A synonym provides a permanent alias for a database object
A public synonym is available to any database user
A private synonym is available only to the user who created it
A synonym is created by using the CREATE SYNONYM
command
A synonym is deleted by using the DROP SYNONYM
command
Only a user with DBA privileges can drop a public synonym
Dr. Chen, Oracle Database System (Oracle)

55

END OF CHAPTER 6

Dr. Chen, Oracle Database System (Oracle)

56

You might also like