Advanced SQL AND PL/SQL Topics

advertisement
Advanced SQL And
PL/SQL Topics
Chapter 9
A Guide to Oracle9i
1
Lesson A Objectives
• Learn how to create and use indexes
• Become familiar with PL/SQL stored program units
• Learn how to create server-side stored program units
in SQL*Plus
• Learn how to use Forms Builder to create stored
program units
A Guide to Oracle9i
2
Database Indexes
• Similar to an index in a book
• Table with list of sorted data values and
corresponding physical location
• Used to speed searches
• Uses ROWID column to represent physical location
• Primary key indexed automatically
• Unlimited number allowed, but more indexes means
more processing time for action queries (insert,
update, delete)
A Guide to Oracle9i
3
Creating an Index
• Create index after table data is loaded
• CREATE INDEX index_name ON tablename
(index_fieldname);
• Convention for naming index: tablename_fieldname.
A Guide to Oracle9i
4
Composite Index
• Contains multiple (up to 16) sorted columns
• Used for queries with multiple search conditions
• CREATE INDEX index_name ON
tablename(index_fieldname1, index_fieldname2, …);
A Guide to Oracle9i
5
Viewing Index Information
• Use data dictionary view USER_INDEXES
A Guide to Oracle9i
6
Dropping an Index
• If an index is no longer needed or does not
improve performance, delete it
• DROP INDEX index_name;
A Guide to Oracle9i
7
Use an Index When
• Table contains a large number of records (a rule of
thumb is that a large table contains over 100,000
records)
• The field contains a wide range of values
• The field contains a large number of NULL values
• Application queries frequently use the field in a
search condition or join condition
• Most queries retrieve less than 2% to 4% of the table
rows
A Guide to Oracle9i
8
Do Not Use an Index When
• The table does not contain a large number of records
• Applications do not use the proposed index field in a
query search condition
• Most queries retrieve more than 2% to 4% of the
table records
• Applications frequently insert or modify table data
A Guide to Oracle9i
9
Overview of PL/SQL
Stored Program Units
• Self-contained group of program statements
that can be used within a larger program.
• Easier to conceptualize, design, and debug
• Save valuable programming time because
you can reuse them in multiple database
applications
• Other PL/SQL programs can reference them
A Guide to Oracle9i
10
Overview of PL/SQL
Stored Program Units
• Server-side program units — stored in the
database as database objects and execute
on the database server
• Client-side program units — stored in the file
system of the client workstation and execute
on the client workstation
A Guide to Oracle9i
11
Types of Program Units
A Guide to Oracle9i
12
Creating Stored Program Units
• Procedure: a program unit that can receive multiple input
parameters and return multiple output values or return no output
values
• Function: a program unit that can receive multiple input
parameters, and always returns a single output value.
A Guide to Oracle9i
13
Parameter Declarations List
• Defines the parameters and declares their
associated data types
• Enclosed in parentheses
• Separated by commas
A Guide to Oracle9i
14
Parameter Declarations List
• Parameter mode describes how the program unit can
change the parameter value:
– IN - specifies a parameter that is passed to the program unit
as a read-only value that the program unit cannot change.
– OUT - specifies a parameter that is a write-only value that
can appear only on the left side of an assignment statement
in the program unit
– IN OUT - specifies a parameter that is passed to the
program unit, and whose value can also be changed within
the program unit
A Guide to Oracle9i
15
Creating a Stored Procedure
in SQL*Plus
A Guide to Oracle9i
16
Debugging Stored Program
Units in SQL*Plus
A Guide to Oracle9i
17
Debugging Stored Program
Units in SQL*Plus
A Guide to Oracle9i
18
Calling a Stored Procedure
• From SQL*Plus command line:
– EXECUTE procedure_name (parameter1_value,
parameter2_value, ...);
• From PL/SQL program:
– Omit execute command
• Passing parameters (see Figure 9-13)
A Guide to Oracle9i
19
Creating a Stored Program Unit
Function
A Guide to Oracle9i
20
Creating a Stored
Program Unit Function
• Last command in function must be RETURN
A Guide to Oracle9i
21
Calling a Function
• variable_name := function_name(parameter1,
parameter2, ...);
A Guide to Oracle9i
22
Using Forms Builder to Create
Stored Procedures and Functions
• Create and test the program unit within a form
• Save it as a stored program unit in your database
schema
• Provides an enhanced development and debugging
environment:
– Color-coded editor for entering and debugging program unit
commands
– Displays compile error messages immediately
– Use the Forms Debugger to step through program unit
commands and view how variable values change
A Guide to Oracle9i
23
Using Forms Builder to Create
Stored Procedures and Functions
• Create the procedure or function as a form
program unit
• Test and debug the form program unit by
calling it from commands within a form trigger
• Save the form program unit as a stored
program unit in the database
A Guide to Oracle9i
24
Lesson B Objectives
• Learn how to call stored procedures from other
stored procedures and pass parameter values
• Create libraries
• Create packages
• Create database triggers
A Guide to Oracle9i
25
Calling Stored Program Units
from Other Stored Program Units
• Decompose applications into logical units of work and
then write individual program units for each logical
unit
• Code is in a single location
• Developers do not need to rewrite program units that
already exist
• References procedures must be declared first
A Guide to Oracle9i
26
PL/SQL Libraries
• Operating system file that contains code for multiple
related procedures and functions
• Attach a PL/SQL library to a form or report
– Triggers within the form or report reference library’s
procedures and functions
• Store a PL/SQL library in the file system of the client
workstation
• .pll extension - stands for “PL/SQL Library”
• Compile the library into a library executable file - .plx
extension - stands for “PL/SQL Library Executable”
• Library places the commands for multiple related
program units in a single location that developers can
access and use
A Guide to Oracle9i
27
Creating a PL/SQL Library
• Use Forms Builder to create libraries
• Add form program units and stored program units to
the library.
A Guide to Oracle9i
28
Packages
• Another way to make PL/SQL program units available
to multiple applications
• A code library that contains related program units and
variables
• Stored in the database and executes on the database
server
• Have more functionality than PL/SQL libraries:
–
–
–
–
Can create variables in packages
Definitions for explicit cursors
More convenient to use than PL/SQL libraries
Available without explicitly attaching them to a form or report
A Guide to Oracle9i
29
Package Specification
• Also called package header
• Declares package objects, including
variables, cursors, procedures, and functions,
• Use to declare public variables:
– Remain in memory after the programs that declare
and reference them terminate
– Declared in the DECLARE section of a package
– Referenced same as private variables
A Guide to Oracle9i
30
Package Specification
A Guide to Oracle9i
31
Package Header
• Package_name identifies the package
– Must adhere to the Oracle Naming Standard
• Declare the package objects in any order
• Package can consist of just variable
declarations, or it can consist of just
procedure or function declarations
A Guide to Oracle9i
32
Procedure and Function Declarations
• Declare a procedure:
PROCEDURE procedure_name
(parameter1 parameter1_data_type,
parameter2 parameter2_data_type, ...);
• Declare a function:
FUNCTION function_name
(parameter1 parameter1_data_type,
parameter2 parameter2_data_type, ...)
RETURN return_datatype;
A Guide to Oracle9i
33
Package Body
• Contains the implementation of declared
procedures and functions
• Specification comes before body
• Optional: sometimes a package contains
only variable or cursor declarations, and no
procedure or function declarations
• See Figure 9-35 for general syntax
A Guide to Oracle9i
34
Package Body
• Package_name in the package body must be the
same as package_name in the package specification
• Variables that you declare at the beginning of the
package body are private to the package
• Each package program unit has its own declaration
section and BEGIN and END statements
• Each program unit declared in the package body
must have a matching program unit forward
declaration in the package specification, with an
identical parameter list
A Guide to Oracle9i
35
Creating a Package Header in
SQL*Plus
A Guide to Oracle9i
36
Creating a Package Body in
SQL*Plus
A Guide to Oracle9i
37
Using Package Objects
• Must preface the item with the package
name:
– package_name.item_name.
• To grant other users the privilege to execute a
package:
– GRANT EXECUTE ON package_name TO
username;
A Guide to Oracle9i
38
Creating a Package in Forms Builder
•
•
•
•
•
•
Create a program unit of type Package Spec
Type the package specification in the PL/SQL editor
Create a program unit of type Package Body
Type package body in the PL/SQL editor
Compile package body and test using a form trigger
Save the package in the database for future use
A Guide to Oracle9i
39
Database Triggers
• Program units that execute in response to the
database events of inserting, updating, or deleting a
record
• Different from form triggers
• Useful for maintaining integrity constraints and audit
information
• Cannot accept input parameters
• Executes only when its triggering event occurs
A Guide to Oracle9i
40
Trigger Properties
• Trigger timing:
– Defines whether a trigger fires before or after the
SQL statement executes
– Can have the values BEFORE or AFTER
• Trigger statement:
– Defines the type of SQL statement that causes a
trigger to fire
– Can be INSERT, UPDATE, or DELETE
A Guide to Oracle9i
41
Trigger Properties
• Trigger level:
– Defines whether a trigger fires once for each triggering
statement or once for each row affected by the triggering
statement
– Can have the values ROW or STATEMENT
– Statement-level triggers fire once, either before or after the
SQL triggering statement executes.
– Row-level triggers fire once for each row affected by the
triggering statement
• Use :OLD.fieldname to reference previous value
• Use :NEW.fieldname to reference changed value
A Guide to Oracle9i
42
Creating Database Triggers
A Guide to Oracle9i
43
Database Trigger Header
• Trigger_name must follow Oracle Naming Standard
• Join statement types using the OR operator to fire for
multiple statement types (INSERT OR UPDATE)
• WHEN (condition) clause:
– Trigger will fire only for rows that satisfy a specific search
condition
– WHEN OLD.grade IS NOT NULL;
A Guide to Oracle9i
44
Database Trigger Body
• Contains the commands that execute when the
trigger fires
• PL/SQL code block that contains the usual
declaration, body, and exception sections
• Cannot contain transaction control statements
• Reference the NEW and OLD field values only in a
row-level trigger
A Guide to Oracle9i
45
Trigger Use – Audit Trail
A Guide to Oracle9i
46
Creating Audit Trigger in SQL*Plus
A Guide to Oracle9i
47
Creating a Database Trigger
in Forms Builder
• Use the Database Trigger Dialog Box to
specify trigger properties
• Type trigger body into Trigger Body entry field
A Guide to Oracle9i
48
Disabling and Dropping Triggers
• To remove a trigger:
– DROP TRIGGER trigger_name;
• To disable/enable a trigger:
– ALTER TRIGGER trigger_name [ENABLE |
DISABLE];
A Guide to Oracle9i
49
Viewing Trigger Information
A Guide to Oracle9i
50
Summary
• Database indexes store an ordered list of field values
with corresponding ROWID
• Indexes are used to speed query performance
• Stored program units are named PL/SQL blocks that
are saved
• Procedures accept parameters and return 0,1, or
many values
• Functions accept parameters and return exactly one
value
A Guide to Oracle9i
51
Summary
• PL/SQL Library is a client-side file containing
procedures and functions
• PL/SQL Package is a collection of public variables,
cursors, procedures and functions stored in the
DBMS
• Database triggers are PL/SQL blocks that are run in
response to table changes
• Database triggers are used to enforce integrity
constraints and track changes
• Forms Builder may be used as an IDE to develop
functions, procedures, libraries, packages and
triggers
A Guide to Oracle9i
52
Download