Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Proiect baze de date

Baze de date


PROIECT BAZE DE DATE

A.

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 tara si continentul pentru care compania efectueaza zboruri.

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

LOCALITATI

COD_LOC

DEN_LOC

COD_STAT

AEROPORTURI

COD_AEROPORT

NUME_AEROPORT

COD_LOC

NR_PISTE


CURSETIP

COD_CTIP

AEROPORT

_PLECARE

AEROPORT

_SOSIRE

KM

PRET_CLS1

PRET_CLS2

CURSE

COD_

CURSA

COD_

CSTD

DATA_

DECOLARE

DATA_

ATERIZARE

PASAGERI

_CLS1

PASAGERI

_CLS2

DISCOUNT

_CLS1

DISCOUNT

_CLS2

ACTIVIT_PERSONAL

COD-CURSA

COD_PERSONAL

PRIMA_ZBOR

PERSONAL

COD_

PERSONAL

NUME

PRENUME

DATA_

NASTERII

COD_

FUNCTIE

DATA_

ANGAJARE

SLARIU

_ORAR

ORE

_ZBOR

FUNCTII

COD_FUNCTIE

DEN_FUNCTIE

SALARIU_MINIM

SALARIU_MAXIM

*/

--B.

--Dezactivare triggeri:

alter table state disable all triggers;

alter table localitati disable all triggers;

alter table aeroporturi disable all triggers;

alter table cursetip disable all triggers;

alter table curse disable all triggers;

alter table activit_personal disable all triggers;

alter table personal disable all triggers;

alter table functii disable all triggers;

--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','romania','europa');

insert into state

values ('mb' ,'marea britanie','europa');

insert into state

values ('br' ,'brazilia','america de sud');

insert into state

values ('us' ,'sua','america de nord');

insert into localitati

values ('1','bucuresti','ro');

insert into localitati

values ('2','londra','mb');

insert into localitati

values ('3','bacau','ro');

insert into localitati

values ('4','new york','us');

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 romania spre alte tari

--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 'romania'

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


Document Info


Accesari: 3539
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )