oracle 10g packages

7
Oracle Concepts Selvaraj V  Anna University Chennai. Chennai – 25.

Upload: selvaraj-v

Post on 30-May-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Oracle 10g Packages

8/14/2019 Oracle 10g Packages

http://slidepdf.com/reader/full/oracle-10g-packages 1/7

Oracle Concepts

Selvaraj V 

 Anna University Chennai.

Chennai – 25.

Page 2: Oracle 10g Packages

8/14/2019 Oracle 10g Packages

http://slidepdf.com/reader/full/oracle-10g-packages 2/7

Oracle Packages, Procedures, Functions

1. What is a Package? What are the merits/demerits of packages?

A package is nothing but a grouping together of Logically related procedures,

functions, variables (global and local) etc. It provides many OOPs features, like

information hiding, polymorphism etc. And the biggest advantage is, when any

Procedure or function is called from the package, the whole package gets loaded into

the memory and so it is very fast to call all related procedures and functions from

the same package. But again, it acts as a demerit when very few procedures or

functions from the package are used, but still the whole package resides in the

memory until the called procedures/functions exit.

Regarding OOPs concepts, a Package hides the information about a Procedure

or function to the outside world. That means, a user can use the inbuilt

procedures/functions without knowing how it is built in the package.Again, a procedure/function could be written private, i.e they could not be accessed

from outside the package but could be used by other procedures/functions inside the

same package. I shall explain this later in this page.

So, Merits:

Packaged procedures/functions could exhibit polymorphism. Could create

Private variables, functions, procedures etc inside the package; not accessible

outside.Could share variables and private procedures/functions between other

procedures/functions. Whole package is loaded into memory whenever anyprocedure/function is called. Benefit when 80-90% of the procedures/functions in the

package are used.

Demerit:

The main demerit is again, the whole package is loaded into memory

whenever any procedure/function is called. If only 20% of the procedures/functions

in the package are used, memory consumption gets high for minimal package usage

2. Package, Procedure and Function Syntax:

A package has got 2 components - a Spec and a Body

Spec : is nothing but is like a header which holds all Procedure/Function declarations

and Global variables, collections etc if used.

Page 3: Oracle 10g Packages

8/14/2019 Oracle 10g Packages

http://slidepdf.com/reader/full/oracle-10g-packages 3/7

Page 4: Oracle 10g Packages

8/14/2019 Oracle 10g Packages

http://slidepdf.com/reader/full/oracle-10g-packages 4/7

--EXCEPTION BLOCK--

END EX_PROC_001;

FUNCTION EX_FUNC_001(P_NUMBER IN NUMBER, P_CHAR IN VARCHAR2)

RETURN NUMBER

IS

V_CODE NUMBER;

BEGIN

--CODE HERE 

RETURN V_CODE;

EXCEPTION

--EXCEPTION BLOCK--

END EX_FUNC_001;

END EX_PACK_001;

3. How to call the packaged procedures/functions in another Program.

Before showing how to call procedures/functions in another Program, I hopethat you know what an anonymous block is. For those who dont know, an

anonymous block is a piece of code that is similar to a procedure but doesnt have

any name or cannot be stored in the database. For eg: the anonymous block below is

used to call our procedure and function, but could not be stored in the DB like the

Package, procedure or function.

Declare

v_code number;

v_number number;v_char varchar2(50);

Begin

v_number:=100;

v_char:=Hai;

EX_PACK_001. EX_PROC_001(v_number,v_char,v_code); --

v_code is an OUT parameter 

Page 5: Oracle 10g Packages

8/14/2019 Oracle 10g Packages

http://slidepdf.com/reader/full/oracle-10g-packages 5/7

dbms_output.put_line(v_code); --displays data

returned to the OUT param

v_code:= EX_PACK_001. EX_FUNC_001(v_number,v_char); --

function returns the code

dbms_output.put_line(v_code);

end;

4. Packaged Procedures versus Normal Procedures

As I had mentioned earlier, packaged procedures can exhibit some of the

OOPs behavior.

One main character is polymorphism. In the same package, we can have

different procedures/functions with the same name but different signatures.Signature is nothing but the parameter list. 2 procedures with same name could

exist in the same package with different number of parameters or different datatypes

for parameters.

For eg:

a. Differs in number of parameters

CREATE OR REPLACE PACKAGE EX_PACK_001 -- showing only spec 

AS

PROCEDURE EX_PROC_001

(

P_NUMBER IN NUMBER,

P_CHAR IN VARCHAR2,

P_RET_CODE OUT NUMBER

);

PROCEDURE EX_PROC_001(

P_NUMBER IN NUMBER,

P_CHAR IN VARCHAR2

) ;

END EX_PACK_001;

/

Page 6: Oracle 10g Packages

8/14/2019 Oracle 10g Packages

http://slidepdf.com/reader/full/oracle-10g-packages 6/7

b. Differs in datatype of parameters, but same number of parameters

CREATE OR REPLACE PACKAGE EX_PACK_001 --

 showing only spec 

AS

PROCEDURE EX_PROC_001

(

P_NUMBER IN NUMBER,

P_CHAR IN VARCHAR2,

P_RET_CODE OUT NUMBER

);

PROCEDURE EX_PROC_001

(

P_CHAR1 IN VARCHAR2,P_CHAR2 IN VARCHAR2,

P_RET_CODE OUT NUMBER

);

END EX_PACK_001;

/

5. Procedure Versus Function

a. Only function can Return a value (to be precise using the Return keyword)b. Procedures can use Return keyword but without any value being passed

c. Functions could be used in select statements, provided they doesn’t do any

data manipulation inside and also should not have any OUT, IN OUT parameters.

6. How to create Private global variables in a Package?

Create variables inside the body (but outside any procedure or function). All of the

functions/procedures in the package can use the variable, but could not be used

outside

7. How to create Private Procedures/Functions?

Write the procedures/functions only in the body. That means, do not declare the

procedure/function in the Spec.

8. Can a Package Spec exist without a body?

Page 7: Oracle 10g Packages

8/14/2019 Oracle 10g Packages

http://slidepdf.com/reader/full/oracle-10g-packages 7/7

Yes.

Advantage being, we can create global variables or collections and put them in a

package Spec. No need to create any body since there are no procedures/functions.

Eg:

CREATE OR REPLACE PACKAGE EX_PACK_001

AS

V_RECORDS NUMBER;

END EX_PACK_001;

This variable could be called outside in any code like this:

EX_PACK_001.v_records:=1000;