Documente Academic
Documente Profesional
Documente Cultură
Pachete de subprograme
Grupeaza variabile, subprograme, tipuri de date PL/SQL care sunt corelate logic.
Sunt formate din 2 parti:
- specificatia pachetului – zona publica
- corpul pachetului – zona privata
Specificatia pachetului:
CREATE [OR REPLACE] PACKAGE nume_pachet
IS|AS
--declaratii de variabile si tipuri publice, sunt initializate cu NULL implicit
--specificatii ale subprogramelor publice
END [nume_pachet];
Corpul pachetului:
CREATE [OR REPLACE] PACKAGE BODY nume_pachet
IS|AS
--declaratii de variabile si tipuri private
--definitii ale subprogramelor publice si private
[BEGIN
-- Este optional si se executa o singura data la primul apel si la incarcarea pachetului in memorie
END [nume_pachet];
Supraincarcarea subprogramelor
Se poate realiza numai pentru functii/proceduri din cadrul pachetelor, nu si pentru subprograme
singulare (stocate direct in baza de date);
Nu se pot supraincarca 2 subprograme care au paramentrii de tipuri asemanatoare (ex: NUMBER
si DECIMAL sau VARCHAR2 si VARCHAR);
Exemplu:
CREATE OR REPLACE PACKAGE actualizare_produse IS
procedure adauga_produs
(p_codp produse.codprodus%type,
p_denp produse.denprodus%type,
p_um produse.um%type,
p_stoc produse.stoc%type);
-1-
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 9
procedure modifica_produs
(p_codp produse.codprodus%type,
p_denp produse.denprodus%type,
p_um produse.um%type,
p_stoc produse.stoc%type);
procedure modifica_produs
(p_codp produse.codprodus%type,
p_stoc produse.stoc%type);
procedure sterge_produs
(p_codp produse.codprodus%type);
function exista_cod
(p_codp produse.codprodus%type)
return boolean;
exceptie exception;
END;
/
procedure modifica_produs
(p_codp produse.codprodus%type,
p_denp produse.denprodus%type,
p_um produse.um%type,
p_stoc produse.stoc%type)
is
begin
if exista_cod(p_codp) then
update produse
set denprodus=p_denp, um=p_um, stoc=p_stoc
where codprodus=p_codp;
-2-
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 9
else
raise exceptie;
end if;
exception
when exceptie then
dbms_output.put_line('Produsul cu aceast cod nu exista!');
end;
procedure sterge_produs
(p_codp produse.codprodus%type)
is
begin
if exista_cod(p_codp) then
delete from produse
where codprodus=p_codp;
dbms_output.put_line('Produsul cu codul '||p_codprodus||' a fost sters!');
else
raise exceptie;
end if;
exception
when exceptie then
dbms_output.put_line('Produsul cu aceast cod nu exista!');
end;
function exista_cod
(p_codp produse.codprodus%type)
return boolean
is
v_unu number;
begin
select 1 into v_unu
from produse
where codprodus=p_codprodus;
return true;
-3-
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 9
exception
when no_data_found then
return false;
end;
END;
/
execute actualizare_produse.sterge_produs(449);
select * from produse;
Exemplu:
Select text
From user_source
Where name='ACTUALIZARE_PRODUSE' and type='PACKAGE BODY';
-4-