006 packages 10g

Upload: k-vinay-kumar

Post on 03-Jun-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/12/2019 006 Packages 10g

    1/23

    Packages

  • 8/12/2019 006 Packages 10g

    2/23

    Packages - Objectives

    At the end of this session, the participants will be able to:

    Understand the need for Packages

    Write a Package specification

    Write a Package body

    Overloading subprograms

  • 8/12/2019 006 Packages 10g

    3/23

  • 8/12/2019 006 Packages 10g

    4/23

    Packages

    A Package is a PL/SQL construct that allows related objects to be storedtogether

    A Package is a stored database object

    Groups together procedures, functions, cursor, types and variables

    Other PL/SQL blocks can reference packages

  • 8/12/2019 006 Packages 10g

    5/23

    Packages (contd)

    Package has two components:

    Package SpecificationPackage body

    Package Specification:

    - Declares types, variables, constants, exceptions, cursors and subprogramsavailable for use.

    - Constructs declared in the package specifications are public.

    Syntax:

    CREATE OR REPLACE PACKAGE package_name IS

    procedure_specification

    function_specification

    variable_declarationcursor_declaration etc.

    END package_name;

  • 8/12/2019 006 Packages 10g

    6/23

    Packages (contd)

    Package Body:

    - It defines cursors and subprograms and soimplements the specification

    - It can not be successfully compiled unless thepackage header has already been successfully

    compiled

    Syntax:

    CREATE OR REPLACE PACKAGE BODY package_name IS

    private_variable

    procedure_definition

    function_definition etc.

    private function or procedure definition

    END package_name;

  • 8/12/2019 006 Packages 10g

    7/23

    Packages

    A package body contains the blocks and specifications for all of the publicobjects listed in the package specification.

    The package body may include objects that are not listed in the packagespecification.

    Such object are said to be private and are not available to users of thepackage.

    Private objects may only be called by other objects within the samepackage body.

  • 8/12/2019 006 Packages 10g

    8/23

    Packages - Advantages

    Advantages of Packages

    1. Modularity:encapsulates logically relatedprogramming structures in a named module

    2. Easier Application Design:Initially only theinterface information in the package specification isrequired

    3. Information hiding:Constructs can be public orprivate

    4. Better Performance:When a packagedsubprogram is called the first time, the entirepackage is loaded into memory

    5. Overloading:Packages allow you to overloadprocedures and functions

  • 8/12/2019 006 Packages 10g

    9/23

    Packages: Example

    Creating a Package Specification

    CREATE OR REPLACE PACKAGE emp_pack

    IS

    PROCEDURE emp_add(p_empno IN emp.empno%TYPE,

    p_ename IN emp.ename%TYPE,p_esal IN emp.sal%TYPE,

    p_deptno IN emp.deptno%TYPE);

    PROCEDURE emp_del (p_empno IN emp.empno%TYPE);

    END emp_pack;

  • 8/12/2019 006 Packages 10g

    10/23

    Packages: Example (contd)

    Creating a Package Body

    CREATE OR REPLACE PACKAGE BODY emp_packIS

    FUNCTION valid_deptno(p_deptno dept.deptno%TYPE)

    RETURN BOOLEAN

    IS

    dummy NUMBER;BEGIN

    SELECT deptno into dummy FROM dept

    WHERE deptno=p_deptno;

    RETURN TRUE;

    EXCEPTION

    WHEN NO_DATA_FOUND THEN

    RETURN FALSE;

    END;

    Contd

  • 8/12/2019 006 Packages 10g

    11/23

    Packages: Example (contd)

    PROCEDURE emp_add(p_empno IN emp.empno%TYPE,

    p_ename IN emp.ename%TYPE,

    p_esal IN emp.sal%TYPE,p_deptno IN emp.deptno%TYPE)

    IS

    BEGIN

    IF valid_deptno(p_deptno) THEN

    INSERT INTO emp(empno,ename,sal,deptno)VALUES(p_empno,p_ename,p_esal,p_deptno);

    DBMS_OUTPUT.PUT_LINE('Emp# : '||p_empno||' added totable');

    COMMIT;

    ELSERAISE_APPLICATION_ERROR(-20010,Invalid

    departmentTry again);

    END IF

    END;

    Contd

  • 8/12/2019 006 Packages 10g

    12/23

    Packages: Example (contd)

    PROCEDURE emp_del(p_empno IN emp.empno%TYPE)

    ISBEGIN

    DELETE FROM emp

    WHERE empno=p_empno;

    IF SQL%NOTFOUND THEN

    RAISE_APPLICATION_ERROR(-20120,Employee Not Deleted);

    ELSE DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT||' ROWSDELETED'); END IF;

    END emp_del;

    END emp_pack;

    Invoking a packaged procedure or function from SQL*Plus

    EXECUTE emp_pack.emp_del(1001)

  • 8/12/2019 006 Packages 10g

    13/23

    Packages: Forward Declarations

    Identifiers must be declared before referencing them

    CREATE OR REPLACE PACKAGE BODY forward_pack

    IS

    PROCEDURE award_bonus (. . .)

    IS

    BEGIN

    calc_rating(. . .);--illegal referenceEND;

    FUNCTION calc_rating ( . . . )

    RETURN NUMBER

    IS

    BEGINRETURN ;

    END;

    END forward_pack;

  • 8/12/2019 006 Packages 10g

    14/23

    Packages: Forward Declarations (contd)

    CREATE OR REPLACE PACKAGE BODY forward_pack

    IS-- Forward declaration

    FUNCTION calc_rating(. . .) RETURN NUMBER;

    PROCEDURE award_bonus (. . .)

    IS

    BEGIN

    calc_rating(. . .);-- Legal referenceEND;

    FUNCTION calc_rating ( . . . )

    RETURN NUMBER

    IS

    BEGIN

    RETURN ;

    END;

    END forward_pack;

  • 8/12/2019 006 Packages 10g

    15/23

  • 8/12/2019 006 Packages 10g

    16/23

    Packages

    When creating packages, the package specification and the packagebody are created separately. Thus, there are two commands to use:create package for the package specification, and create package bodyfor the package body.

    Both of these commands require that you have the

    CREATE PROCEDURE system privilege.

    If the package is to be created in a schema other than your own, then youmust have the

    CREATE ANY PROCEDURE system privilege.

  • 8/12/2019 006 Packages 10g

    17/23

    Dropping Package

    Dropping package specification:

    DROP PACKAGE package_name;

    Dropping package body:

    DROP PACKAGE BODY package_name;

  • 8/12/2019 006 Packages 10g

    18/23

    Exercise

    CREATE OR REPLACE PACKAGE BB_PACK

    IS

    V_MAX_TEAM_SALARY NUMBER(12,2);

    PROCEDURE ADD_PLAYER(V_ID IN NUMBER, V_LAST_NAME

    VARCHAR2, V_SALARY NUMBER);

    END BB_PACK;

  • 8/12/2019 006 Packages 10g

    19/23

    Exercise (Cont..)

    CREATE OR REPLACE PACKAGE BODY BB_PACK

    IS

    PROCEDURE UPD_PLAYER_STAT

    (V_ID IN NUMBER, V_AB IN NUMBER DEFAULT 4, V_HITS IN NUMBER)

    IS

    BEGINUPDATE PLAYER_BAT_STAT SET AT_BATS = AT_BATS + V_AB,

    HITS = HITS + V_HITS WHERE PLAYER_ID = V_ID;

    COMMIT;

    END UPD_PLAYER_STAT;

  • 8/12/2019 006 Packages 10g

    20/23

    Exercise (Cont..)

    PROCEDURE ADD_PLAYER

    (V_ID IN NUMBER, V_LAST_NAME VARCHAR2, V_SALARY NUMBER)

    IS

    BEGIN

    INSERT INTO PLAYER(ID,LAST_NAME,SALARY)

    VALUES (V_ID, V_LAST_NAME, V_SALARY);UPD_PLAYER_STAT(V_ID,0,0);

    END ADD_PLAYER;

    END BB_PACK;

  • 8/12/2019 006 Packages 10g

    21/23

    Exercise (Cont..)

    You make a change to the body of the BB_PACK package. The BB_PACKbody is recompiled.

    What happens if the stand alone procedure VALIDATE_PLAYER_STATreferences this package?

    A. VALIDATE_PLAYER_STAT cannot recompile and must be recreated.

    B. VALIDATE_PLAYER_STAT is not invalidated.

    C. VALDIATE_PLAYER_STAT is invalidated.

    D. VALIDATE_PLAYER_STAT and BB_PACK are invalidated.

  • 8/12/2019 006 Packages 10g

    22/23

    Summary

    We have discussed:

    Parts of a Package

    Coding a procedure/function within a Package

    Overloading Subprograms within a Package

  • 8/12/2019 006 Packages 10g

    23/23

    Questions

    Thank You