|
Create a Packages
Hands-On
introduction
In this
Hands-On, you create a package by copy and
pasting an existing PL/SQL stored procedure.
Then save it in the local library or the
database server.
A package is a
database construct that allows users to
collect many program units into one database
object. They consist of two components: a
package specification and a package body.
Create a
Package Specification
Introduction
A package
should have a PL/SQL package specification
and a PL/SQL package body. A ‘PL/SQL package
specification’ contains all your PL/SQL
functions header, procedures header, type,
variables, etc. A ‘PL/SQL package body’
contains a complete PL/SQL stored procedures
or functions. All the declared PL/SQL
functions, procedures, variables, etc in a
package specification are called public
procedures and functions. They can be
accessible to the users who have privilege
to execute them. In the PL/SQL package
specification, all the functions and
procedures must have a PL/SQL procedure in
its PL/SQL package body. It is not necessary
that all the PL/SQL procedures in a PL/SQL
package body have a specification entry in
its PL/SQL package specification. Those
PL/SQL procedures that have not have any
specification entry in the PL/SQL package
specification called private PL/SQL
procedures.
Select
"Program Units" and then click on the
“Create” icon to create a package that
contains all of department's functions and
procedures.
Name the
package (package department) and select
package specification. Then click "OK"
Write or “copy
and paste” all functions’ and procedures’
header for public use.
Open the
add_dept procedure and copy it header
specification into the package
specification. Do not forget to add the ";"
Repeat this
process for any other stored procedures, if
needed.
(Procedure
Builder)
PACKAGE
pkg_dept
IS
-- No
variables
-- This is the
add_dept specification…
PROCEDURE
add_dept
(p_dept_rec IN
dept%ROWTYPE,
p_status OUT
VARCHAR2);
-- This is the
remove_dept specification…
PROCEDURE
remove_dept
(p_deptno IN
dept.depno%TYPE,
p_status OUT
VARCHAR2);
-- Add more
and more…
END pkg_dept;
/
Add more
headers if needed. These two programs are
going to be enough to make the point.
Compile a
package specification
Compile the
package specification. No strike means the
compilation was successful.
Create a
package body
Create a
package body. Name the package body the same
as its package specification name. Select
“Package Body.” Then click “OK.”
Copy and paste
the entire stored procedures into the
package body. Repeat the copy process for
other stored procedures if needed.
(Procedure
Builder)
PACKAGE BODY
pkg_dept
IS
-- Add
department procedure…
PROCEDURE
add_dept
(p_deptno IN
dept.deptno%TYPE,
p_dname IN
dept.dname%TYPE,
p_loc IN
dept.loc%TYPE,
p_status OUT
VARCHAR2)
IS
-- No variable
BEGIN
/* This
program add dept. record. */
INSERT INTO
dept
VALUES
(p_deptno, p_dname, p_loc);
--- Save
record.
COMMIT;
-- Added
successfully if the get to this line.
p_status :=
‘OK’;
EXCEPTION
-- Check for
an Unique or Primary Key
WHEN
dup_val_on_index THEN
p_status :=
‘DUPLICATE RECORD’;
-- Check for
invalid input data
WHEN
invalid_number THEN
p_status :=
‘INVALID INPUT DATA’;
-- Check for
any other problems
WHEN others
THEN
p_status :=
‘CHECK THIS WE HAVE UNKNOWN PROBLEM.’;
END add_dept;
-- Remove
department procedure…
PROCEDURE
remove_dept
(p_deptno IN
dept.deptno%TYPE,
p_status OUT
VARCHAR2)
IS
-- Delete a
record
DELETE FROM
dept
WHERE deptno =
p_deptno;
-- Save the
transaction.
COMMIT;
-- Check the
status.
p_status :=
‘OK’;
EXCEPTION
WHEN
no_data_found THEN
p_status :=
‘NO DATA FOUND.’;
WHEN others
THEN
p_status :=
‘Other Problems.’;
END
remove_dept;
-- And more
internal procedures.
END pkg_dept;
/
Compile a
package body
Compile the
package body. No strike means: successfully
compiled.
Make a syntax
error and compile again. Read the error
messages. Then correct the error and compile
it again.
Then close the
window.
Run and test a
procedure or function in a package
Query the
department table.
PL/SQL> SELECT * FROM dept;
Write a PL/SQL
procedure block to use the remove procedure
to delete the department number 40.
PL/SQL>
DECLARE
v_status
VARCHAR2(40);
BEGIN
pkg_dept.remove_dept(40, v_status);
TEXT_IO.PUT_LINE(v_status);
END;
Then output
the status parameter to see that the
transaction was successfully deleted.
“OK” means: it
was successfully deleted.
Query the
department table again.
PL/SQL> SELECT * FROM dept;
Record was
deleted.
Save a package
specification and body into the database
server
Store the
package into the database server.
First store
the "package specification" then store the
"package body" unit.
Questions:
Q: What is the
PL/SQL package?
Q: What are
the components of a PL/SQL package?
Q: What is a
package body in the PL/SQL language?
Q: What is a
package specification in the PL/SQL
language?
Q: Where do
you save the package body and its package
specification?
Q: Can you
store a PL/SQL package in a client
environment?
Q: How do you
create a package specification and body?
Q: What are
the dependencies between a package body and
its package specification?
Q: Write a
PL/SQL package to have all your created
PL/SQL functions and procedures?
Q: What is a
public PL/SQL procedure or function in a
PL/SQL package?
Q: What is a
private PL/SQL procedure or function in a
PL/SQL package?
Q: What are
the differences between a public or private
PL/SQL procedure?
Q: How do you
run a PL/SQL procedure or function in a
PL/SQL package? |