Advertisement
Guest User

Untitled

a guest
Apr 26th, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.98 KB | None | 0 0
  1. 1) Creati o tabela partitionata tip lista (�list�), care sa stocheze angajatii dintr-o firma multinationala.
  2. Tabela ANGAJAT are urmatoarea structura: marca, nume, functie, sef (nume manager), salar, comision, venit_nou, clasa_venit.
  3. Partitionarea de tip lista se face dupa cele 5 functii din tabelul EMP.
  4.  
  5. 2) Populati tabela ANGAJAT astfel:
  6. - preluati coloanele corespunzatoare din EMP;
  7. - valorile din venit_nou (venit = salar + comision) se calculeaza lunar, astfel:
  8. - pentru angajatii cu functia "Analyst", venitul se mareste cu 15%;
  9. - pentru angajatii cu functia "Clerk", venitul se mareste cu 10%;
  10. - pentru angajatii cu functia "Salesman", venitul se mareste cu 20%;
  11. - pentru angajatii cu functia "Manager", venitul se mareste cu 5%;
  12. - clasa_venit are valorile:
  13. - 'A' cei cu venitul anual peste 35000;
  14. - 'B' cei cu venitul anual in 25000 si 34999;
  15. - 'C' cei cu venitul anual in 15000 si 24999;
  16. - 'D' cei cu venitul anual sub 15000
  17.  
  18. 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.
  19. Se afiseaza: functie, clasa_venit, suma, medie, minim, maxim.
  20. Afisati topul primelor 4 manageri cu suma veniturilor noi lunare, ale angajatilor lor, cea mai mare (sef, suma venituri noi, pozitie).
  21.  
  22. 4) Afisati planurile interogarilor de la pct.3 si propuneti metode de optimizare (indexi).
  23.  
  24. --1
  25.  
  26. create table ANGAJAT
  27. (
  28. marca NUMBER(4),
  29. nume VARCHAR2(25),
  30. functie VARCHAR2(25),
  31. sef VARCHAR2(25),
  32. salar NUMBER(7,2),
  33. comision NUMBER(7,2),
  34. venit_nou NUMBER(7,2),
  35. clasa_venit VARCHAR2(5),
  36. CONSTRAINT ang_pk PRIMARY KEY(marca)
  37. )
  38. PARTITION BY LIST (functie)
  39. (
  40. PARTITION analyst values ('Analyst'),
  41. PARTITION clerk values ('Clerk'),
  42. PARTITION salesman values ('Salesman'),
  43. PARTITION manager values ('Manager'),
  44. PARTITION other values (DEFAULT)
  45. );
  46.  
  47. --2
  48.  
  49. insert into ANGAJAT (marca, nume, functie, sef, salar, comision)
  50. select empno, ename, job, mgr, sal, comm
  51. from emp;
  52.  
  53. insert into ANGAJAT (venit_nou)
  54. select (case when functie == 'Analyst' then ((venit_nou = salar + comision)*1.15)) end,
  55. case when functie == 'Clerk' then ((venit_nou = salar + comision)*1.10)) end,
  56. case when functie == 'Salesman' then ((venit_nou = salar + comision)*1.20)) end,
  57. case when functie == 'Manager' then ((venit_nou = salar + comision)*1.05)) end)
  58. from ANGAJAT
  59.  
  60. insert into ANGAJAT (clasa_venit)
  61. select (case when (venit_nou*12)>35000 then clasa_venit = 'A' end,
  62. case when (venit_nou*12) between 25000 and 34999 then clasa_venit = 'B' end,
  63. case when (venit_nou*12) between 15000 and 24999 then clasa_venit = 'C' end,
  64. case when (venit_nou*12)<15000 then clasa_venit = 'D' end)
  65. from ANGAJAT
  66.  
  67. 1) Creati o tabela partitionata dupa interval (�range�), care sa stocheze angajatii dintr-o firma multinationala.
  68. Tabela ANGAJAT are urmatoarea structura: marca, nume, departament (nume departament), data_ang, vekime, categ_vekime, salar, comision, salar_nou.
  69. Partitionarea de tip range se face anual, pe coloana data_ang, din 1980 pana in 1985.
  70.  
  71. 2) Populati tabela ANGAJAT astfel:
  72. - preluati coloanele corespunzatoare din EMP si DEPT;
  73. - vechimea se calculeaza considerandu-se anul de referinta 1995;
  74. - clasa_vechime are valorile:
  75. - '1' cei peste 10 ani de vechime;
  76. - '2' cei cu intre 5 si 10 ani de vechime;
  77. - '3' cei cu mai putin de 5 ani de vechime
  78. - valorile din salar_nou se calculeaza astfel:
  79. - maxim 5 ani de experienta salarul se mareste cu 20% daca angajatul nu ia comision sau 15% daca ia comision
  80. - daca are intre 5 si 10 ani de experienta salarul se mareste cu 15% daca angajatul nu ia comision sau 10% daca ia comision
  81. - peste 10 ani de experienta salarul se mareste cu 10% daca angajatul nu ia comision sau 5% daca ia comision
  82.  
  83.  
  84. 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).
  85. Se afiseaza: marca, nume, venit anual, pozitie.
  86. Afisati topul primelor 3 departamente cu suma salariilor noi lunare cea mai mare (departament, suma salarii noi, pozitie).
  87.  
  88. 4) Afisati planurile interogarilor de la pct.3 si propuneti metode de optimizare (indexi).
  89.  
  90. --1
  91.  
  92. create table ANGAJAT
  93. (
  94. marca NUMBER(4),
  95. nume VARCHAR2(25),
  96. departament VARCHAR2(25),
  97. data_ang DATE,
  98. vechime NUMBER(2),
  99. categ_vechime VARCHAR2(5),
  100. salar NUMBER(7,2),
  101. comision NUMBER(7,2),
  102. salar_nou NUMBER(7,2),
  103. CONSTRAINT ang_pk PRIMARY KEY(marca)
  104. )
  105. PARTITION BY RANGE(data_ang)
  106. (
  107. PARTITION Q_1980 VALUES LESS THAN (TO_DATE('01-JAN-1981','DD- MON-YYYY')),
  108. PARTITION Q_1981 VALUES LESS THAN (TO_DATE('01-JAN-1982','DD- MON-YYYY')),
  109. PARTITION Q_1982 VALUES LESS THAN (TO_DATE('01-JAN-1983','DD- MON-YYYY')),
  110. PARTITION Q_1983 VALUES LESS THAN (TO_DATE('01-JAN-1984','DD- MON-YYYY')),
  111. PARTITION Q_1984 VALUES LESS THAN (TO_DATE('01-JAN-1985','DD- MON-YYYY')),
  112. PARTITION Q_1985 VALUES LESS THAN (TO_DATE('01-JAN-1986','DD- MON-YYYY')),
  113. )
  114.  
  115. --2
  116.  
  117. insert into ANGAJAT (marca, nume, departament, data_ang, salar, comision)
  118. select empno, ename, dname, hiredate, sal, comm
  119. from emp e join dept d
  120. where e.deptno=d.deptno;
  121.  
  122. insert into ANGAJAT (vechime)
  123. SELECT (EXTRACT(YEAR FROM data_ang) - 1995)
  124. FROM ANGAJAT;
  125.  
  126. insert into ANGAJAT (categ_vechime)
  127. select (case when vechime>10 then categ_vechime = '1' end,
  128. case when vechime between 5 and 10 then categ_vechime = '2' end,
  129. case when vechime<5 then categ_vechime = '3' end)
  130. from ANGAJAT;
  131.  
  132. insert into ANGAJAT (salar_nou)
  133. select (case when (vechime<5) and comision is NUll then salar_nou=salar*1.20 end,
  134. case when (vechime<5) and comision is not NUll then salar_nou=salar*1.15 end,
  135. case when (vechime between 5 and 10) and comision is NUll then salar_nou=salar*1.15 end,
  136. case when (vechime between 5 and 10) and comision is not NUll then salar_nou=salar*1.10 end,
  137. case when (vechime>10) and comision is NUll then salar_nou=salar*1.10 end,
  138. case when (vechime>10) and comision is not NUll then salar_nou=salar*1.05 end)
  139. FROM ANGAJAT
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement