Baza de date przentata este creata pentru o mica firma de transporturi aeriene si monitorizeaza cursele efectuate intre diferite locatii precum si personalul de zbor al companiei. Intrucat baza de data ares copul de a prezenta o imagine de anamblu asupra activitatii de productie ale companiei – cursele aeriene, activitatile personalului administrativ nu vor fi inregistrate.
Structura logica a bazei de date:
Tabela CURSETIP (curse standard) retine tiparul curselor regulate ale companiei, precizand aeroportul de plecare, sosire, nr de kilometri parcursi in cursa, precum si pretul standard al biletelor la clasa 1 si 2 (aceste campuri raman nemodificate pentru toate cursele intre aceleasi 2 aeroporturi).
Tabela AEROPORTURI retine pentru fiecare aeroport numele sau, localitatea unde se afla si cate piste are.
Tabele LOCALITATI retine numele localitatii (in care se afla un aeroport) si codul tarii in care se afla localitatea.
Tabela TARI reda
Tabela CURSE inregistreaza fiecare cursa a companiei. O cursa respecta un anumit tipar, precizat in tabela CURSETIP. Sunt precizate in plus data de decolare si de aterizare si numarul de pasageri pentru fiecare clasa. In cazul in care se aplica un discount, el va fi dedus din pretul standard al biletelor.
Tabela PERSONAL retine toti angajatii companiei, cu nume, prenume, 848i87i data la care au fost angajati, functia detinuta, data angajarii, slariul tarifar orar precum si un anumit numar de ore de zbor – care denota experienta angajatului.
Tabela FUNCTII retine pozitiile ocupate de intreg personalul de zbor impreuna cu salariul tarifar orar minim, respectiv maxim aferent.
Tabela ACTIVIT_PERSONAL reda personalul implicat in fiecare cursa si prima de zbor ce ii revine fiecarui participant la cursa.
Schema BD
STATE
COD_STAT |
DEN_STAT |
CONTINENT |
COD_LOC |
DEN_LOC |
COD_STAT |
COD_AEROPORT |
NUME_AEROPORT |
COD_LOC |
NR_PISTE |
COD_CTIP |
AEROPORT_PLECARE |
AEROPORT_SOSIRE |
KM |
PRET_CLS1 |
PRET_CLS2 |
COD_CURSA |
COD_ CSTD |
DATA_ DECOLARE |
DATA_ ATERIZARE |
PASAGERI _CLS1 |
PASAGERI _CLS2 |
DISCOUNT _CLS1 |
DISCOUNT _CLS2 |
COD-CURSA |
COD_PERSONAL |
PRIMA_ZBOR |
COD_PERSONAL |
NUME |
PRENUME |
DATA_NASTERII |
COD_FUNCTIE |
DATA_ANGAJARE |
SLARIU_ORAR |
_ZBOR |
FUNCTII
COD_FUNCTIE |
DEN_FUNCTIE |
SALARIU_MINIM |
SALARIU_MAXIM |
*/
--B.
--Dezactivare triggeri:
--Stergere tabele (in cazul in care acestea exista deja):
drop table state cascade constraints;
drop table localitati cascade constraints;
drop table aeroporturi cascade constraints;
drop table cursetip cascade constraints;
drop table curse cascade constraints;
drop table activit_personal cascade constraints;
drop table personal cascade constraints;
drop table functii cascade constraints;
--Creare tabele:
create table state
(cod_stat varchar2(5) constraint pk_stat primary key,
den_stat varchar2(20),
continent varchar2(15)
constraint ck_loc check( UPPER(continent) in ('EUROPA','AMERICA DE NORD','AMERICA DE SUD','ASIA','AFRICA')));
create table localitati
(cod_loc varchar2(5) constraint pk_loc primary key,
den_loc varchar2(20),
cod_stat varchar2(20) not null,
constraint fk_loc foreign key (cod_stat) references state(cod_stat));
create table aeroporturi
(cod_aeroport varchar2(5) constraint pk_aerop primary key,
nume_aeroport varchar2(20),
cod_loc varchar2(5) not null,
nr_piste number(2),
constraint fk_aerop foreign key (cod_loc) references localitati(cod_loc));
create table cursetip
(cod_ctip varchar2(5) constraint pk_ctip primary key,
aeroport_plecare varchar2(5) not null,
aeroport_sosire varchar2(5) not null,
km number(5),
pret_cls1 number(4),
pret_cls2 number(4),
constraint fk_cstdplecare foreign key (aeroport_plecare) references aeroporturi(cod_aeroport),
constraint fk_cstdsosire foreign key (aeroport_sosire) references aeroporturi(cod_aeroport));
create table curse
(cod_cursa varchar2(5) constraint pk_cs primary key,
cod_ctip varchar2(5) not null,
data_decolare date,
data_aterizare date,
pasageri_cls1 number(3),
pasageri_cls2 number(3),
discount_cls1 number(2) default 0,
discount_cls2 number(2) default 0,
constraint fk_curse foreign key (cod_ctip) references cursetip(cod_ctip));
alter session set NLS_DATE_FORMAT= 'YYYY-MM-DD HH24:MI';create table functii
(cod_functie varchar2(2) constraint pk_fc primary key,
den_functie varchar2(15),
salariu_minim number(4),
salariu_maxim number(4));
create table personal
(cod_personal varchar2(5) constraint pk_pers primary key,
nume varchar2(20),
prenume varchar2(30),
data_nasterii date,
cod_functie varchar2(2) not null,
data_angajare date,
salariu_orar number(4),
ore_zbor number(4),
constraint fk_pers foreign key (cod_functie) references functii(cod_functie));
create table activit_personal
(cod_cursa varchar2(5) not null,
cod_personal varchar2(5) not null,
prima_zbor number(4),
constraint fk_ap foreign key (cod_personal) references personal(cod_personal),
constraint fk_ap2 foreign key (cod_cursa) references curse(cod_cursa));
--Inserare inregistrari in tabele:
insert into state
values ('ro','
insert into state
values ('mb' ,'marea britanie','europa');
insert into state
values ('br' ,'brazilia','
insert into state
values ('us' ,'sua','
insert into localitati
values ('1','bucuresti','ro');
insert into localitati
values ('2','londra','mb');
insert into localitati
values ('3','
insert into localitati
values ('4','
insert into aeroporturi
values ('1','henri coanda','1','5');
insert into aeroporturi
values ('2','baneasa','1','3');
insert into aeroporturi
values ('3','aurel vlaicu','3','3');
insert into aeroporturi
values ('4','heathrow','2','10');
insert into aeroporturi
values ('5','kennedy','4','11');
insert into cursetip
values ('1','1','4',2000,1500,1000);
insert into cursetip
values ('2', '2' ,'3',300,700,350);
insert into cursetip
values ('3' ,'4','5',5500,3000,2000);
insert into cursetip
values ('5', '5','1',7000,4000,2500);
insert into cursetip
values ('6', '4', '1',2000,1500,1000);
insert into cursetip
values ('7', '3', '2',300,700,350);
insert into curse
values ('1','1', to_date('02.03.07 07:30','dd.mm.yy hh24:mi'), to_date('02.03.07 11:00','dd.mm.yy hh24:mi'),148,340,50,50);
insert into curse
values ('2','1', to_date('14.03.07 20:30','dd.mm.yy hh24:mi'), to_date('14.03.07 23:45','dd.mm.yy hh24:mi'),150,300,33.33,0);
insert into curse
values ('3','3', to_date('02.03.07 09:30','dd.mm.yy hh24:mi'), to_date('02.03.07 19:00','dd.mm.yy hh24:mi'),100,350,0,10);
insert into curse
values ('4','5', to_date('02.03.07 23:30','dd.mm.yy hh24:mi'), to_date('03.03.07 11:00','dd.mm.yy hh24:mi'),97,350,0,0);
insert into curse
values ('5','7', to_date('30.03.07 17:30','dd.mm.yy hh24:mi'), to_date('30.03.07 19:00','dd.mm.yy hh24:mi'),48,150,10,5);
insert into curse
values ('6','7', to_date('01.04.07 17:30','dd.mm.yy hh24:mi'), to_date('01.04.07 19:00','dd.mm.yy hh24:mi'),50,100,0,0);
insert into curse
values ('7','3', to_date('10.04.07 09:30','dd.mm.yy hh24:mi'), to_date('10.04.07 19:00','dd.mm.yy hh24:mi'),100,350,10,0);
insert into curse
values ('8','5', to_date('12.04.07 23:50','dd.mm.yy hh24:mi'), to_date('13.04.07 11:10','dd.mm.yy hh24:mi'),97,350,0,0);
insert into functii
values ('1','pilot',100,300);
insert into functii
values ('2','copilot',100,200);
insert into functii
values ('3','inginer zbor',50,150);
insert into functii
values ('4','steward',50,100);
insert into personal
values ('10','popescu','ioan', to_date('12.01.1962','dd.mm.yyyy'),'1', to_date('01.01.1990','dd.mm.yyyy'), 300,5000);
insert into personal
values ('11','pintea','ioan', to_date('13.01.1964','dd.mm.yyyy'),'2', to_date('01.01.1990','dd.mm.yyyy'), 190,3000);
insert into personal
values ('12','marica','ioana', to_date('12.12.1965','dd.mm.yyyy'),'3', to_date('12.01.1992','dd.mm.yyyy'), 150,3000);
insert into personal
values ('13','nutu','dan', to_date('22.04.1980','dd.mm.yyyy'),'4', to_date('01.01.1990','dd.mm.yyyy'), 90,1000);
insert into personal
values ('14','popescu','cristina', to_date('19.03.1982','dd.mm.yyyy'),'4', to_date('01.01.1990','dd.mm.yyyy'), 100,2000);
insert into personal
values ('15','ciuca','alin', to_date('17.07.1962','dd.mm.yyyy'),'1', to_date('01.11.1995','dd.mm.yyyy'), 250,4000);
insert into personal
values ('16','dumitru', 'laura', to_date('12.09.1983','dd.mm.yyyy'),'4', to_date('12.01.1998','dd.mm.yyyy'), 50,500);
insert into personal
values ('17','ulea', 'paula' , to_date('23.10.1972','dd.mm.yyyy'),'2', to_date('12.11.1998','dd.mm.yyyy'), 180,3500);
insert into personal
values ('18','duca' ,'amalia', to_date('24.02.1982','dd.mm.yyyy'),'4', to_date('13.10.1992','dd.mm.yyyy'), 80,1500);
insert into personal
values ('19','stancu' ,'petru', to_date('31.01.1982','dd.mm.yyyy'),'4', to_date('12.05.1999','dd.mm.yyyy'), 50,400);
insert into personal
values ('20','dorobantu' ,'valentin', to_date('12.11.1984','dd.mm.yyyy'),'4', to_date('01.02.2000','dd.mm.yyyy'), 50,500);
rename activit_personal to ture;
insert into ture
values ('1','10',200);
insert into ture
values ('1','11',150);
insert into ture
values ('1','13',90);
insert into ture
values ('1','14',90);
insert into ture
values ('1','16',90);
insert into ture
values ('2','15',200);
insert into ture
values ('2','11',150);
insert into ture
values ('2','14',90);
insert into ture
values ('2','16',90);
insert into ture
values ('2','18',90);
insert into ture
values ('3','10',300);
insert into ture
values ('3','17',200);
insert into ture
values ('3','12',200);
insert into ture
values ('3','13',100);
insert into ture
values ('3','14',100);
insert into ture
values ('3','18',100);
insert into ture
values ('4','10',300);
insert into ture
values ('4','11',200);
insert into ture
values ('4','12',200);
insert into ture
values ('4','13',100);
insert into ture
values ('4','14',100);
insert into ture
values ('4','16',100);
insert into ture
values ('5','15',100);
insert into ture
values ('5','11',90);
insert into ture
values ('5','14',50);
insert into ture
values ('5','16',50);
insert into ture
values ('6','15',100);
insert into ture
values ('6','11',90);
insert into ture
values ('6','14',50);
insert into ture
values ('6','19',50);
insert into ture
values ('7','15',150);
insert into ture
values ('7','17',100);
insert into ture
values ('7','12',100);
insert into ture
values ('7','13',50);
insert into ture
values ('7','14',50);
insert into ture
values ('7','18',50);
insert into ture
values ('7','20',50);
insert into ture
values ('8','15',150);
insert into ture
values ('8','17',100);
insert into ture
values ('8','12',100);
insert into ture
values ('8','13',50);
insert into ture
values ('8','14',50);
insert into ture
values ('8','18',50);
insert into ture
values ('8','20',50);
rename ture to activit_personal;
commit;
--F.
set serveroutput on
set autoprint on
--afisarea primelor 3 aeroporturi ca numar de piste
--for,cursor explicit
declare
cursor c is select nume_aeroport nr_piste from aeroporturi order by nr_piste desc
v_c c rowtype
i number
begin
if not c isopen then
open c
end if
for i in loop
fetch c into v_c
exit when c notfound
dbms_output.put_line v_c.nume_aeroport v_c.nr_piste
end loop
close c
end
aeropoturi din localitatea data de la tastatura
--cursor cu parametru,exceptii,loop—
accept p_loc prompt 'Introduceti denumirea localitatii'
declare
v_den localitati.den_loc type '&p_loc'
v_cod localitati.cod_loc type
cursor c c_loc varchar2 is select cod_loc nume_aeroport from aeroporturi where cod_loc c_loc
begin
select cod_loc into v_cod from localitati where upper den_loc upper v_den
dbms_output.put_line 'Aeroporturile din localitatea ' upper v_den
for v_c in c v_cod loop
dbms_output.put_line upper v_c.nume_aeroport
end loop
exception
when no_data_found then
dbms_output.put_line 'Nu exista aeroporturi in aceasta localitate'
end
--curse standard ce pleaca din
--cursor implicit,parametru,for
declare
v_cod state.cod_stat type
cursor c c_stat varchar2 is select ct.cod_ctip cod_cursa ct.aeroport_sosire a_sosire a.cod_loc loc2 l.cod_stat stat2
from cursetip ct aeroporturi a localitati l
where l.cod_loc a.cod_loc and a.cod_aeroport ct.aeroport_sosire
and ct.aeroport_plecare in select a.cod_aeroport from aeroporturi a localitati l where a.cod_loc l.cod_loc and l.cod_stat c_stat
begin
select cod_stat into v_cod from state where den_stat '
for v_c in c v_cod loop
dbms_output.put_line v_c.cod_cursa
end loop
end
--vechimea tuturor angajatilor
--cursori(explicit-implicit),loop
declare
cursor c is select cod_personal nume prenume data_angajare from personal
v_c c rowtype
v_vechime number
begin
if not c isopen then
open c
end if
fetch c into v_c
while c found loop
v_vechime trunc sysdate v_c.data_angajare
dbms_output.put_line 'Angajatul ' upper v_c.nume upper v_c.prenume ' are vechime: ' v_vechime ' ani'
fetch c into v_c
end loop
close c
end
--creare tabel cu pretul final al biletelor pentru fiecare cursa
--cursor explicit,while,if
create table pret_final cursa varchar2 pret_cls1 number pret_cls2 number
declare
cursor c is select c.cod_cursa cod ct.pret_cls1 pret1 c.discount_cls1 dcls1 ct.pret_cls2 pret2 c.discount_cls2 dcls2
from curse c cursetip ct
where c.cod_ctip ct.cod_ctip
v_c c rowtype
v_pret1 number
v_pret2 number
n number
begin
if not c isopen then
open c
end if
fetch c into v_c
while c found loop
v_pret1 v_c.pret1 v_c.dcls1
v_pret2 v_c.pret2 v_c.dcls2
insert into pret_final values v_c.cod v_pret1 v_pret2
fetch c into v_c
end loop
n c rowcount
dbms_output.put_line 'S-au inserat ' n ' inregistrari in tabela pret_final'
close c
end
--angajatilor cu o vechime>15 ani li se majoreaza salariul orar cu 2%
--cream o functie ce returneaza vechimea fiecarui angajat
--exceptie predefinita,cursor implicit
create or replace function vechime cod_pers varchar2 return number as
v_data personal.data_angajare type
vech number
begin
select data_angajare into v_data from personal where cod_personal cod_pers
vech trunc sysdate v_data
return vech
exception
when no_data_found then dbms_output.put_line 'Nu exista angajat cu codul ' cod_pers
end
--majorarea salariului in conditiile propuse
--cursor for update, if
declare
cursor c is select cod_personal salariu_orar vechime cod_personal vechime from personal for update of salariu_orar
begin
for v_c in c loop
if v_c.vechime> then
update personal
set salariu_orar salariu_orar
where cod_personal v_c.cod_personal
end if
end loop
commit
end
--salariul orar cel mai mare din fiecare functie--functie
--cursori,loop
create or replace function sal_max cod_f varchar2 return number as
maxim number
begin
select max salariu_orar into maxim from personal where cod_functie cod_f
return maxim
end
declare
cursor c is select cod_functie den_functie sal_max cod_functie salariu_max from functii
begin
for v_c in c loop
dbms_output.put_line 'Pt functia ' upper v_c.den_functie ' cel mai mare salariu orar platit este de ' v_c.salariu_max ' RON/h.'
end loop
end
--functie cu rezultat boolean care indica angajatii care trebuie sa se pensioneze
--if
create or replace function pensionare p_id varchar2 return number as
v_ani number
begin
select trunc sysdate data_nasterii into v_ani from personal where cod_personal p_id
if sql notfound then
raise_application_error 'nu exista angajat cu acest cod'
end if
if v_ani< then
return
else
return
end if
end
select nume prenume pensionare cod_personal from personal
--nr curse pentru un angajat al carui nume se introduce de la tastatura--functie
--exceptie predefinita, cursor implicit
create or replace function nr_curse cod personal.cod_personal type
return number is
v_nr number
v_cod personal.cod_personal type
begin
select p.cod_personal count into v_cod v_nr from personal p activit_personal ap
where p.cod_personal cod and p.cod_personal ap.cod_personal
group by p.cod_personal
return v_nr
exception
when no_data_found then
dbms_output.put_line 'Nu exista angajat cu acest cod.'
end
--contorizarea curselor pt toti angajatii
--for,cursor
declare
cursor c is select cod_personal nume prenume from personal
begin
for v_c in c loop
dbms_output.put_line v_c.nume v_c.prenume nr_curse v_c.cod_personal ' curse'
end loop
end
--tipul curselor standard: interna, internationala, intercontinentala--functie
--cursor cu parametru,if,exceptie definita utilizator
drop table plecari
drop table sosiri
create table plecari as select ct.cod_ctip cod1 ct.aeroport_plecare aeroport1 a.cod_loc localitate1 l.cod_stat stat1 s.continent continent1
from cursetip ct aeroporturi a localitati l state s
where ct.aeroport_plecare a.cod_aeroport and a.cod_loc l.cod_loc and l.cod_stat s.cod_stat
create table sosiri as select ct.cod_ctip cod2 ct.aeroport_sosire aeroport2 a.cod_loc localitate2 l.cod_stat stat2 s.continent continent2
from cursetip ct aeroporturi a localitati l state s
where ct.aeroport_sosire a.cod_aeroport and a.cod_loc l.cod_loc and l.cod_stat s.cod_stat
create or replace function tip_cursa c_id varchar2 return varchar2 is
cursor c ct_cod varchar2 is select p.cod1 p.localitate1 p.stat1 p.continent1 s.localitate2 s.stat2 s.continent2
from plecari p sosiri s
where p.cod1 s.cod2 and p.cod1 ct_cod
v_c c rowtype
begin
if not c isopen then
open c c_id
end if
fetch c into v_c
if sql notfound then
raise_application_error 'Nu exista cursa standard cu acest cod!'
end if
if v_c.stat1 v_c.stat2 then
return 'interna'
elsif v_c.continent1 v_c.continent2 then
return 'internationala'
else
return 'intercontinentala'
end if
close c
end
--afisare toate cursele de un anumit tip; tipul va fi introdus de la tastatura;
--cursor parametru,exceptie definita utilizator, if, while
accept p_opt prompt 'Introduceti tipul de cursa'
declare
cursor c t varchar2 is select cod_cursa from curse where tip_cursa cod_ctip t
v_c c rowtype
exc1 exception
pragma exception_init exc1
begin
if not c isopen then
open c '&p_opt'
end if
fetch c into v_c
if c notfound then
raise exc1
end if
while c found loop
dbms_output.put_line 'cursa: ' v_c.cod_cursa
fetch c into v_c
end loop
close c
exception
when exc1 then
dbms_output.put_line 'Nu exista cursa de acest tip.'
end
--angajatii primesc prime in functie de numarul de curse la care au participat--procedura:
--0 ron daca au la activ intre 0 si 3 curse
--100 ron pentru 4 pana la 10 curse
--500 ron pentru mai mult de 10 curse
--if(elsif), for, cursori
create or replace procedure acord_prime cod_pers IN varchar2 nr_curse OUT number prima OUT number is
begin
select count into nr_curse from activit_personal where cod_personal cod_pers group by cod_personal
if nr_curse between and then
prima
elsif nr_curse between and then
prima
else
prima
end if
end
declare
cursor c is select cod_personal nume prenume from personal
v_nr number
v_prima number
begin
for v_c in c loop
acord_prime v_c.cod_personal v_nr v_prima
dbms_output.put_line 'Angajatul ' v_c.nume v_c.prenume ' a efectuat ' v_nr ' curse si primeste o prima de ' v_prima||' ron.'
end loop
end
--inserare intr-un tabel a remuneratiei pt fiecare angajat care a lucrat intr-o cursa data ca parametru--procedura
--if,while,cursor,exceptie definita utilizator
drop table remuneratii
create table remuneratii cod_personal varchar2 nume varchar2 prenume varchar2 salariu number
create or replace procedure plata_cursa cod curse.cod_cursa type as
cursor c is select p.cod_personal p.nume p.prenume p.salariu_orar ap.prima_zbor from personal p activit_personal ap where p.cod_personal ap.cod_personal and ap.cod_cursa cod
v_ore number
v_c c rowtype
begin
if not c isopen then
open c
end if
fetch c into v_c
if c notfound then
raise_application_error 'nu exista cursa cu acest cod'
end if
while c found loop
select round data_aterizare data_decolare into v_ore from curse where cod_cursa cod
insert into remuneratii values v_c.cod_personal v_c.nume v_c.prenume v_c.prima_zbor v_ore v_c.salariu_orar
fetch c into v_c
end loop
close c
commit
end
call plata_cursa
--angajati cu salariul mai mic decat media pentru fiecare functie--procedura
--for,if,cursor explicit si implicit
create or replace procedure salariu_mic cod personal.cod_functie type as
cursor c is select cod_functie nume prenume salariu_orar from personal where cod_functie cod
v_sal_mediu personal.salariu_orar type
begin
select avg salariu_orar into v_sal_mediu from personal where cod_functie cod group by cod_functie
for v_c in c loop
if v_c.salariu_orar<v_sal_mediu then
dbms_output.put_line v_c.nume v_c.prenume v_c.cod_functie
end if
end loop
end
declare
cursor c is select from functii
begin
for v_c in c loop
salariu_mic v_c.cod_functie
end loop
end
--marirea cu 1.5% a salariului orar pentru angajatii care au la activ cel putin 5 curse--procedura
--avertizare printr-un mesaj daca volumul majorarilor depasesc fondul de 100 ron.
create or replace package majorare_experienta
is
marire number
procedure majorare
end majorare_experienta
create or replace package body majorare_experienta
is
function n_curse cod personal.cod_personal type
return number is
v_nr number
v_cod personal.cod_personal type
begin
select p.cod_personal count into v_cod v_nr from personal p activit_personal ap
where p.cod_personal cod and p.cod_personal ap.cod_personal
group by p.cod_personal
return v_nr
end n_curse
procedure majorare
is
cursor c is select cod_personal salariu_orar from personal for update of salariu_orar
begin
for v_c in c loop
if n_curse v_c.cod_personal)>= then
update personal
set salariu_orar salariu_orar
where cod_personal v_c.cod_personal
marire marire v_c.salariu_orar
end if
end loop
end majorare
begin
if marire> then
dbms_output.put_line 'fondul pentru majorari a fost depasit cu ' marire
end if
end majorare_experienta
call majorare_experienta.majorare();
--trigger: nu se permite angajarea persoanelor cu varsta mai mica de 18 ani sau mai mare de 45 cu experienta mai mica de 100 ore
--exceptii definite utilizator, if
create or replace trigger angajati before insert on personal for each row
declare
exc1 exception
exc2 exception
pragma exception_init exc1
pragma exception_init exc2
begin
if new.ore_zbor< then
raise_application_error 'persoana nu este sufucient de experimentata pentru a fi angajata.'
end if
if trunc sysdate new.data_nasterii ) < then
raise exc2
else
if trunc sysdate new.data_nasterii ) > then
raise_application_error 'persoana este prea in varsta pentru a fi angajata.'
end if
end if
exception
when exc2 then
dbms_output.put_line 'persoana nu este adult'
end
--trigger ce nu permite stabilirea unui salariu care nu se incadreaza in limitele prevazute
--if,exceptie definita utilizator
create or replace trigger sal_corect before insert or update on personal for each row
declare
s_min functii.salariu_minim type
s_max functii.salariu_maxim type
begin
select salariu_minim salariu_maxim into s_min s_max from functii where cod_functie new.cod_functie
if new.salariu_orar not between s_min and s_max then
raise_application_error 'Salariul nu se incadreaza in limitele stabilite!'
end if
end
--trigger: la o inserare in tabela activitati personal sa se faca modificarile corespunzatoare in tabela personal(modificare numar ore zbor)
create or replace trigger activitate_noua after insert on activit_personal for each row
declare
nr_ore number
begin
select round data_aterizare data_decolare into nr_ore from curse where cod_cursa new.cod_cursa
update personal
set ore_zbor ore_zbor nr_ore
where cod_personal new.cod_personal
end
--trigger: inserare intr-o tabela a incasarilor si cheltuielile fiecarei curse efectuate
--cursor explicit
drop table evidenta
create table evidenta cod varchar2 incasari number plata_personal number cost_combustibil number
create or replace trigger tine_evidenta after insert on curse for each row
declare
cursor c is select c.cod_cursa c.pasageri_cls1 c.pasageri_cls2 pf.pret_cls1 pf.pret_cls2 from curse c pret_final pf where c.cod_cursa pf.cursa
v_plata_personal number
v_incasari number
v_km cursetip.km type
begin
for v_c in c loop
v_incasari v_c.pasageri_cls1 v_c.pret_cls1 v_c.pasageri_cls2 v_c.pret_cls2
plata_cursa v_c.cod_cursa
select sum salariu into v_plata_personal from remuneratii
select km into v_km from cursetip where cod_ctip new.cod_ctip
insert into evidenta values v_c.cod_cursa v_incasari v_plata_personal v_km
end loop
commit
end
select from evidenta
1.formular pentru personalul companiei, impreuna cu functia fiecarui anajat
-buon pntru inregistrare noua si pentru iesire din form
2. formular: cursele companiei
--se calculeaza numarul total de pasageri
3. raport: cursele efectuate si personalul care a participat la acestea, cu remuneratia corespunzatoare
-se numara angajatii care au lucrat in fiecare cursa
4. raport: personalul cu datele personale si functia fiecaruia
|