Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1) Creati o tabela partitionata tip lista (�list�), care sa stocheze angajatii dintr-o firma multinationala.
- Tabela ANGAJAT are urmatoarea structura: marca, nume, functie, sef (nume manager), salar, comision, venit_nou, clasa_venit.
- Partitionarea de tip lista se face dupa cele 5 functii din tabelul EMP.
- 2) Populati tabela ANGAJAT astfel:
- - preluati coloanele corespunzatoare din EMP;
- - valorile din venit_nou (venit = salar + comision) se calculeaza lunar, astfel:
- - pentru angajatii cu functia "Analyst", venitul se mareste cu 15%;
- - pentru angajatii cu functia "Clerk", venitul se mareste cu 10%;
- - pentru angajatii cu functia "Salesman", venitul se mareste cu 20%;
- - pentru angajatii cu functia "Manager", venitul se mareste cu 5%;
- - clasa_venit are valorile:
- - 'A' cei cu venitul anual peste 35000;
- - 'B' cei cu venitul anual in 25000 si 34999;
- - 'C' cei cu venitul anual in 15000 si 24999;
- - 'D' cei cu venitul anual sub 15000
- 3) Afisati suma, media, minimul si maximul veniturile noi grupate pe functie si pe clasa_venit. Afisati si subtotalurile la nivel de functie, clasa venit si totalul general.
- Se afiseaza: functie, clasa_venit, suma, medie, minim, maxim.
- Afisati topul primelor 4 manageri cu suma veniturilor noi lunare, ale angajatilor lor, cea mai mare (sef, suma venituri noi, pozitie).
- 4) Afisati planurile interogarilor de la pct.3 si propuneti metode de optimizare (indexi).
- --1
- create table ANGAJAT
- (
- marca NUMBER(4),
- nume VARCHAR2(25),
- functie VARCHAR2(25),
- sef VARCHAR2(25),
- salar NUMBER(7,2),
- comision NUMBER(7,2),
- venit_nou NUMBER(7,2),
- clasa_venit VARCHAR2(5),
- CONSTRAINT ang_pk PRIMARY KEY(marca)
- )
- PARTITION BY LIST (functie)
- (
- PARTITION analyst values ('Analyst'),
- PARTITION clerk values ('Clerk'),
- PARTITION salesman values ('Salesman'),
- PARTITION manager values ('Manager'),
- PARTITION other values (DEFAULT)
- );
- --2
- insert into ANGAJAT (marca, nume, functie, sef, salar, comision)
- select empno, ename, job, mgr, sal, comm
- from emp;
- insert into ANGAJAT (venit_nou)
- select (case when functie == 'Analyst' then ((venit_nou = salar + comision)*1.15)) end,
- case when functie == 'Clerk' then ((venit_nou = salar + comision)*1.10)) end,
- case when functie == 'Salesman' then ((venit_nou = salar + comision)*1.20)) end,
- case when functie == 'Manager' then ((venit_nou = salar + comision)*1.05)) end)
- from ANGAJAT
- insert into ANGAJAT (clasa_venit)
- select (case when (venit_nou*12)>35000 then clasa_venit = 'A' end,
- case when (venit_nou*12) between 25000 and 34999 then clasa_venit = 'B' end,
- case when (venit_nou*12) between 15000 and 24999 then clasa_venit = 'C' end,
- case when (venit_nou*12)<15000 then clasa_venit = 'D' end)
- from ANGAJAT
- 1) Creati o tabela partitionata dupa interval (�range�), care sa stocheze angajatii dintr-o firma multinationala.
- Tabela ANGAJAT are urmatoarea structura: marca, nume, departament (nume departament), data_ang, vekime, categ_vekime, salar, comision, salar_nou.
- Partitionarea de tip range se face anual, pe coloana data_ang, din 1980 pana in 1985.
- 2) Populati tabela ANGAJAT astfel:
- - preluati coloanele corespunzatoare din EMP si DEPT;
- - vechimea se calculeaza considerandu-se anul de referinta 1995;
- - clasa_vechime are valorile:
- - '1' cei peste 10 ani de vechime;
- - '2' cei cu intre 5 si 10 ani de vechime;
- - '3' cei cu mai putin de 5 ani de vechime
- - valorile din salar_nou se calculeaza astfel:
- - maxim 5 ani de experienta salarul se mareste cu 20% daca angajatul nu ia comision sau 15% daca ia comision
- - daca are intre 5 si 10 ani de experienta salarul se mareste cu 15% daca angajatul nu ia comision sau 10% daca ia comision
- - peste 10 ani de experienta salarul se mareste cu 10% daca angajatul nu ia comision sau 5% daca ia comision
- 3) Afisati topul utlimilor 5 angajati care castiga cel mai putin intr-un an (venit ce ia in considerare salar vechi lunar si comision lunar).
- Se afiseaza: marca, nume, venit anual, pozitie.
- Afisati topul primelor 3 departamente cu suma salariilor noi lunare cea mai mare (departament, suma salarii noi, pozitie).
- 4) Afisati planurile interogarilor de la pct.3 si propuneti metode de optimizare (indexi).
- --1
- create table ANGAJAT
- (
- marca NUMBER(4),
- nume VARCHAR2(25),
- departament VARCHAR2(25),
- data_ang DATE,
- vechime NUMBER(2),
- categ_vechime VARCHAR2(5),
- salar NUMBER(7,2),
- comision NUMBER(7,2),
- salar_nou NUMBER(7,2),
- CONSTRAINT ang_pk PRIMARY KEY(marca)
- )
- PARTITION BY RANGE(data_ang)
- (
- PARTITION Q_1980 VALUES LESS THAN (TO_DATE('01-JAN-1981','DD- MON-YYYY')),
- PARTITION Q_1981 VALUES LESS THAN (TO_DATE('01-JAN-1982','DD- MON-YYYY')),
- PARTITION Q_1982 VALUES LESS THAN (TO_DATE('01-JAN-1983','DD- MON-YYYY')),
- PARTITION Q_1983 VALUES LESS THAN (TO_DATE('01-JAN-1984','DD- MON-YYYY')),
- PARTITION Q_1984 VALUES LESS THAN (TO_DATE('01-JAN-1985','DD- MON-YYYY')),
- PARTITION Q_1985 VALUES LESS THAN (TO_DATE('01-JAN-1986','DD- MON-YYYY')),
- )
- --2
- insert into ANGAJAT (marca, nume, departament, data_ang, salar, comision)
- select empno, ename, dname, hiredate, sal, comm
- from emp e join dept d
- where e.deptno=d.deptno;
- insert into ANGAJAT (vechime)
- SELECT (EXTRACT(YEAR FROM data_ang) - 1995)
- FROM ANGAJAT;
- insert into ANGAJAT (categ_vechime)
- select (case when vechime>10 then categ_vechime = '1' end,
- case when vechime between 5 and 10 then categ_vechime = '2' end,
- case when vechime<5 then categ_vechime = '3' end)
- from ANGAJAT;
- insert into ANGAJAT (salar_nou)
- select (case when (vechime<5) and comision is NUll then salar_nou=salar*1.20 end,
- case when (vechime<5) and comision is not NUll then salar_nou=salar*1.15 end,
- case when (vechime between 5 and 10) and comision is NUll then salar_nou=salar*1.15 end,
- case when (vechime between 5 and 10) and comision is not NUll then salar_nou=salar*1.10 end,
- case when (vechime>10) and comision is NUll then salar_nou=salar*1.10 end,
- case when (vechime>10) and comision is not NUll then salar_nou=salar*1.05 end)
- FROM ANGAJAT
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement