191-196

Previous Table of Contents Next


Chapter 6
Packages

A package is a group of procedures, functions, and variables , often grouped together because they accomplish related tasks . In PL/SQL, packages consist of two parts : the package specification, or package spec, and the package body.

The Package Spec

The package spec can be clearly illustrated by using a form-based analogy. When a form displays on your terminal, certain buttons are displayed as well. The code behind each button is a call to a procedure or function. Figure 6.1 illustrates this model within the context of a package.


Figure 6.1    The package model.

Simply put, a package spec defines how other objects within an Oracle database interact with the package. The package spec contains the following types of definitions:

   Global variables, constants, user-defined datatypes, and user -defined exceptions
   Procedure declarations (interface only)
   Function declarations (interface only)

Every construct and object defined within a package spec is public and can be referenced by any block of PL/SQL code. Objects within a package body that are not defined within the package spec are private objects and can be referenced only by objects within the package.

Global Variables

The package spec can contain definitions for variables, constants, datatypes, and user-defined exceptions that can be referenced by the package spec and body, as well as by outside objects. Listing 6.1 illustrates the definition of these constructs.

Listing 6.1 The definition of global constructs in a package spec.

 PACKAGE System_Errors IS      TYPE MessageParts_type IS TABLE OF varchar2 (20)        INDEX BY binary_integer;     vLastError                  varchar2 (100);     THIS_PACKAGE     CONSTANT   varchar2 (13) := 'System_Errors';     xUNHANDLED_ERROR            EXCEPTION;     FUNCTION Build_Message (vObjectName  IN     varchar2,                             iErrorCode   IN     integer,                             vErrorString IN     varchar2);    PROCEDURE Log_Error (vObjectName  IN     varchar2,                         vErrorString IN     varchar2,                         vErrorData   IN     varchar2,                         iErrorCode   IN     integer); END System_Errors; 

Each of the highlighted constructs can be referenced by all the procedures and functions contained within the package body. Objects outside the package can also reference the constructs by prefacing the name of the construct with the name of the package, as shown in Listing 6.2.

Listing 6.2 Referencing an object within a package.

 PROCEDURE Local_Error_Log (vObjectName  IN     varchar2,                            iErrorCode   IN     integer,                            vErrorString IN     varchar2) IS     vMessageParts     System_Errors.MessageParts_type; BEGIN    System_Errors.Build_Message (vObjectName  => vObjectName,                                 iErrorCode   => iErrorCode,                                 vErrorString => vErrorString); END Local_Error_Log; 

Each construct is specific to the user who references it. For example, user A initializes vLastError to ˜Student does not exist and user B initializes vLastError to ˜Attempted division by zero . Neither user is overwriting the value of the other user s variable.


The Bodyless Package
Large systems often have a number of definitions that need to be standardized throughout the system. You can define a package spec that contains these definitions and reference the package spec from any object. Although packages are usually defined using both a spec and a body, Oracle doesn t require every package spec to have an associated package body. Consider this package spec:
 PACKAGE Globals IS    FIELD_DELIMITER   CONSTANT varchar2 (1) := chr (29);    ROW_DELIMITER     CONSTANT varchar2 (1) := chr (30);    MAX_LENGTH        CONSTANT integer := 255;    TYPE Student_rec_TYPE    IS    RECORD (first_name      varchar2 (20),            last_name       varchar2 (20),            middle_initial  varchar2 (1),            ssn             varchar2 (9));    TYPE SubStrings_tab_TYPE IS TABLE OF varchar2 (20)    INDEX BY binary_integer; END Globals; 

Any stored PL/SQL object can reference any of the constants or datatypes defined in the Globals package spec. Since the package doesn t contain any actual procedures or functions, there s no need to define a package body that corresponds to the spec.



Previous Table of Contents Next


High Performance Oracle Database Automation
High Performance Oracle Database Automation: Creating Oracle Applications with SQL and PL/SQL
ISBN: 1576101525
EAN: 2147483647
Year: 2005
Pages: 92

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net