-
Notifications
You must be signed in to change notification settings - Fork 0
/
zestaw11(PL_SQL).sql
76 lines (70 loc) · 2.93 KB
/
zestaw11(PL_SQL).sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
--Utworzyć anonimowy blok PL/SQL, w którymzadeklarowane zostaną 3 zmienne
--Zainicjować zmienne dowolnymi wartościami, zaś jedną z nich określić jako CONSTANT. Wyświetlić w konsoli zadeklarowane zmienne
DECLARE
liczba CONSTANT NUMBER(10):=5;
nazwa VARCHAR2(25):='Janek';
dat DATE:= TO_DATE('11-03-2013','dd-mm-yyyy');
BEGIN
DBMS_OUTPUT.PUT_LINE(liczba||' '||nazwa||' '||dat);
END;
-- Stworzyć blok wyświetlający liczbędni, tygodni i miesięcy, które minęły od określonej daty z przeszłości
DECLARE
data_urodzin CONSTANT DATE := TO_DATE('17-07-1998', 'dd-mm-yyyy');
BEGIN
dbms_output.put_line('Liczba dni: ' || trunc(SYSDATE - data_urodzin));
dbms_output.put_line('Liczba tygodni: ' || trunc((SYSDATE - data_urodzin) / 7));
dbms_output.put_line('Liczba miesięcy: ' || trunc(months_between(SYSDATE, data_urodzin)));
END;
-- Napisać anonimowy blok PL/SQL, wyświetlający dane osobowe z tabeli emp tych pracowników, którzy zarabiają najmniej i najwięcej
DECLARE
imie varchar(25);
nazwisko varchar(25);
BEGIN
select first_name, last_name into imie,nazwisko from emp where salary=(select min(salary) from emp);
DBMS_OUTPUT.PUT_LINE('imie: '||imie||' Nazwisko: '||nazwisko);
select first_name, last_name into imie,nazwisko from emp where salary=(select max(salary) from emp);
DBMS_OUTPUT.PUT_LINE('imie: '||imie||' Nazwisko '||nazwisko);
END;
-- Wyświetlić w bloku PL/SQL dane wszystkich pracowników. Zadanie wykonać przy użyciu:
--a) kursora jawnego z wykorzystaniem pętli LOOP
DECLARE
uv_nazwisko emp.last_name%TYPE;
uv_imie emp.first_name%TYPE;
CURSOR c_emp is select last_name, first_name from emp;
BEGIN
OPEN c_emp;
LOOP
FETCH c_emp INTO uv_imie, uv_nazwisko;
EXIT WHEN c_emp%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(uv_imie||' '||uv_nazwisko);
END LOOP;
CLOSE c_emp;
END;
--b) bez wykorzystania kursora, pętla FOR
DECLARE
uv_nazwisko emp.last_name%TYPE;
uv_imie emp.first_name%TYPE;
licz number;
BEGIN
select count(*) into licz from emp;
FOR i in 1..licz LOOP
select last_name, first_name
into uv_nazwisko, uv_imie
from emp
where id=i;
DBMS_OUTPUT.PUT_LINE(uv_nazwisko || ' ' || uv_imie);
END LOOP;
END;
-- Napisać blok PL/SQL, który zmodyfikuje zarobki pracowników
create table emp_new as select * from emp;
BEGIN
--a) dla zarabiających poniżej 1/2 średniej wszystkich zarobków, wprowadzi podwyżkę o 20%
UPDATE emp_new SET salary = salary*1.2
WHERE salary<(select avg(salary)/2 from emp);
--b) dla zarabiających pomiędzy1/2 a 5/6 średniej, wprowadzi podwyżkę o 10%
UPDATE emp_new SET salary = salary*1.1
WHERE salary between (select avg(salary)/2 from emp) and (select avg(salary)*(5/6) from emp);
--c) dla pozostałych pracowników wprowadzi podwyżkę o 5%
UPDATE emp_new SET salary = salary*1.05
WHERE salary>(select avg(salary)*(5/6) from emp);
END;