Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Sql


Index » educatie » » informatica » Sql
» Pachete


Pachete


Pachete

Generalitati

In general, un pachet consta din doua parti: are o specificatie si un corp, stocate separat in baza de date.

Specificatia este interfata pentru aplicatii. Aici sunt declarate tipurile, variabilele, constantele, exceptiile, cursoarele si subprogramele care pot fi apelate.



Corpul defineste cursorii si subprogramele, si astfel implementeaza specificatia.

Pachetele nu pot fi apelate recursiv, nu pot fi parametrizate sau incuibate. Odata scris si compilat un pachet poate fi folosit in multe aplicatii.

Avantajele utilizarii pachetelor sunt:

modularitatea;

usurinta construirii aplicatiei;

incapsularea (ascunderea informatiei);

functionalitatea;

cresterea performantei;

supraincarcarea.

Pentru a crea un pachet mai intai se creeaza specificatia pachetului si apoi se creeaza corpul pachetului. Constructiile publice ale pachetului sunt cele care se declara in specificatia pachetului si sunt definite in corpul pachetului, iar constructiile private sunt cele definite numai in interiorul pachetului.

Fig. ‑ Descrierea unui pachet

Unde:

1. Variabila globala (publica).

2. Procedura de tip public.

3. Procedura de tip private (locala pachetului).

4. Variabila globala.

5. Variabila locala.

Un pachet se creaza astfel:

Se scrie specificatia pachetului intr-un fisier script, folosind instructiunea CREATE PACKAGE. Fisierul poate fi creat fie utilizand SQL*PLUS fie Procedure Builder. Codul sursa este compilat si depozitat in dictionarul datelor.

Se scrie corpul pachetului intr-un fisier script folosind instructiunea CREATE PACKAGE BODY. Fisierul poate fi creat fie utilizand SQL*PLUS fie Procedure Builder. Codul sursa este deasemenea compilat si depozitat in dictionarul datelor.

Se apeleaza orice constructie public din interiorul pachetului in mediul ORACLE Server.

Specificatia unui pachet are urmatoarea sintaxa:

CREATE [OR REPLACE) PACKAGE package_name

IS | AS

public type and item declarations

subprogram specifications

END package_name;

unde:    package name -este numele pachetului;

type and item declarations -declararea variabilelor, constantelor, cursoarelor, exceptiilor sau tipurilor;

subprogram specifications -declararea subprogramele PL/SQL;

Exemplu: Crearea specificatiei pachetului cu numele comm_package.

SQL>CREATE OR REPLACE PACKAGE comm_package IS

g_comm NUMBER := 10; --initialized to 10

PROCEDURE reset_comm

(v_comm IN NUMBER) ;

END comm_package;

/

In acest exemplu variabila globala g_comm si procedura reset_comm sunt constructii publice.

SQL>EXECUTE comm_package .g_comm : = 5

SQL>EXECUTE comm _package.reset_comm(8)

Crearea corpului pachetului se realizeaza prin urmatoarea sintaxa:

CREATE [OR REPLACE] PACKAGE BODY package_name

IS | AS

private type and item declarations

subprogram bodies

END package_name;

unde:    package name -este numele pachetului;

type and item declarations -declararea variabilelor, constantelor, cursoarelor, exceptiilor sau tipurilor.

subprogram bodies -definirea subprogramele PL/SQL.

Specificam optiunea REPLACE cand corpul pachetului deja exista. Folosim cuvantul cheie IS in loc de AS daca folosim Procedure Builder. Daca nu folosim Procedure Builder, IS si AND sunt echivalente.

Exemplu: Crearea corpului pachetului comm_package.

SQL>CREATE OR REPLACE PACKAGE BODY comm_package IS

FUNCTION validate_comm

(v_comm IN NUMBER) RETURN BOOLEAN

IS

v_max_comm NUMBER;

BEGIN

SELECT MAX(comm)

INTO v_max_comm

FROM emp;

IF v_comm > v_max_comm THEN RETURN(FALSE);

ELSE RETURN(TRUE)

END IF;

END validate_comm;

PROCEDURE reset_comm(v_comm IN NUMBER)

IS

v_valid BOOLEAN;

BEGIN

v_valid := validate_comm(v_comm);

IF v_valid = TRUE THEN

g_comm := v_comm;

ELSE

RAISE_APPLICATION_ERROR (-20210, 'Invalid comm');

END IF;

END reset_comm;

END comm_package;

In scrierea pachetelor este indicat sa pastram pachetele cat mai general posibile, sa definim specificarea pachetului inainte de corpul sau, iar specificatia sa contina numai constructii publice.

In exemplul de mai sus se observa apelarea functiei validate_comm din procedura reset_comm. Cand apelam o functie sau o procedura a pachetului din afara sa, trebuie sa-i prefixam numele cu numele pachetului.

Exemplu: Apelarea procedurii reset_comm din SQL/PLUS:

SQL> EXECUTE comm_package.reset_comm(1500);

Exemplu: Apelarea procedurii reset_comm dintr-o schema diferita, de exemplu a lui scott:

SQL> EXECUTE scott.comm_package.reset_comm(1500);

Cand referim o variabila, un cursor, o constanta sau o exceptie din afara pachetului, trebuie sa prefixam numele acesteia cu numele pachetului.

Exemplu: Referirea variabilei globale g_comm din procedura hire_emp, care nu apartine pachetului comm_package:

CREATE OR REPLACE PROCEDURE hire_emp

(v_ename IN emp.ename%TYPE,

v_mgr IN emp.mgr%TYPE,

v_job IN emp.job%TYPE,

v_sal IN emp.sal%TYPE)

IS

v_comm emp.comm%TYPE;

BEGIN

v_comm := comm_package.g_comm;

END hire_emp;

Stergerea specificatiei unui pachet se face folosind urmatoarea sintaxa:

DROP PACKAGE package_name

Stergerea corpului unui pachet se face folosind sintaxa:

DROP PACKAGE BODY package_name

Tema practica

Folosind tabelele create in lucrarea 1 si anume DEPT, EMP si SALGRADE sa se scrie folosind limbajul PL/SQL un pachet cu denumirea student care va contine urmatoarele proceduri si functii:





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate