-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsql.txt
More file actions
153 lines (153 loc) · 3.96 KB
/
sql.txt
File metadata and controls
153 lines (153 loc) · 3.96 KB
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
CREATE TABLE FILMY (
ID INTEGER PRIMARY KEY,
DLUGOSC INTEGER,
REZYSER VARCHAR2(100),
ROKPRODUKCJI INTEGER,
TYTULFILMU VARCHAR2(255)
)
/
create table kina(
id integer primary key,
miasto varchar2(100),
pseudonim varchar2(100)
)
/
CREATE TABLE SALE(
ID INTEGER PRIMARY KEY,
NUMERSALI INTEGER,
KINA_ID INTEGER,
FOREIGN KEY (KINA_ID) REFERENCES KINA(ID)
)
/
CREATE TABLE KONTA(
EMAIL VARCHAR2(255) PRIMARY KEY,
HASLO VARCHAR2(50),
LOGIN VARCHAR2(50)
)
/
CREATE TABLE OCENY(
ID INTEGER PRIMARY KEY,
OCENA INTEGER,
KOMENTARZ VARCHAR2(1024),
konta_email varchar2(255),
filmy_id integer,
foreign key (filmy_id) references filmy(id),
foreign key (konta_email) references konta(email)
)
/
create table pracownicy(
pesel char(11) primary key,
datazatrudnienia date,
imie varchar2(50),
nazwisko varchar2(50),
kontobankowe varchar2(50),
pensja integer,
stanowisko varchar2(50),
kina_id integer,
foreign key (kina_id) references kina(id)
)
/
CREATE TABLE MIEJSCA(
ID INTEGER PRIMARY KEY,
KOLUMNA INTEGER,
RZAD INTEGER,
SALA_ID INTEGER,
FOREIGN KEY (SALA_ID) REFERENCES SALE(ID)
)
/
CREATE TABLE SEANSE(
ID INTEGER PRIMARY KEY,
DATA DATE,
FILMY_ID INTEGER,
SALA_ID INTEGER,
FOREIGN KEY (FILMY_ID) REFERENCES FILMY(ID),
FOREIGN KEY (SALA_ID) REFERENCES SALE(ID)
)
/
CREATE TABLE REZERWACJE (
id Integer primary key,
stan Varchar2(50),
miejsca_id integer,
seanse_id integer,
Foreign Key (miejsca_id) references miejsca (id),
foreign key (seanse_id) references seanse (id)
);
/
CREATE TABLE BILETY (
ID INT PRIMARY KEY,
CENA INT,
KONTA_EMAIL VARCHAR(255),
REZERWACJE_ID INT,
FOREIGN KEY(KONTA_EMAIL) REFERENCES KONTA(EMAIL),
FOREIGN KEY(REZERWACJE_ID) REFERENCES REZERWACJE(ID)
)
/
CREATE OR REPLACE VIEW OcenyWidok AS
SELECT k.LOGIN, f.TYTULFILMU, o.komentarz, o.ocena FROM oceny o
join konta k on o.KONTA_EMAIL = k.EMAIL
join filmy f on f.ID = o.FILMY_ID
/
CREATE OR REPLACE VIEW PRACOWNICYWIDOK as
select p.imie, p.nazwisko, p.stanowisko, k.miasto, k.pseudonim
FROM PRACOWNICY p join kina k on k.id = p.KINA_ID
/
CREATE OR REPLACE VIEW SEANSEWIDOK as
select s.data, f.tytulfilmu, sa.numersali, k.miasto, k.pseudonim, m.rzad, m.kolumna, r.stan from
sale sa join kina k on k.id = sa.kina_id
join seanse s on sa.id = s.sala_id
join MIEJSCA m on m.SALA_ID = sa.id
join REZERWACJE r on m.id = r.miejsca_id
join filmy f on f.id = s.FILMY_ID;
/
CREATE OR REPLACE VIEW KINAWIDOK AS
select k.miasto, k.pseudonim, s.numersali, m.kolumna, m.rzad from
kina k join sale s on k.id = s.kina_id
join miejsca m on s.id = m.SALA_ID
/
CREATE OR REPLACE PROCEDURE DeleteAllData AS
BEGIN
FOR fk_rec IN (SELECT constraint_name, table_name
FROM user_constraints
WHERE constraint_type = 'R') LOOP
EXECUTE IMMEDIATE 'ALTER TABLE ' || fk_rec.table_name ||
' DISABLE CONSTRAINT ' || fk_rec.constraint_name;
END LOOP;
FOR table_rec IN (SELECT table_name FROM user_tables) LOOP
EXECUTE IMMEDIATE 'DELETE FROM ' || table_rec.table_name;
END LOOP;
FOR fk_rec IN (SELECT constraint_name, table_name
FROM user_constraints
WHERE constraint_type = 'R') LOOP
EXECUTE IMMEDIATE 'ALTER TABLE ' || fk_rec.table_name ||
' ENABLE CONSTRAINT ' || fk_rec.constraint_name;
END LOOP;
END;
/
PROCEDURE ZnajdzSeanseCursor(
data_od DATE,
data_do DATE,
seanse OUT SYS_REFCURSOR
)
IS
BEGIN
OPEN seanse FOR
SELECT s.DATA, f.TYTULFILMU, sa.NUMERSALI, k.MIASTO, k.PSEUDONIM
FROM SEANSE s
JOIN FILMY f ON s.FILMY_ID = f.ID
JOIN SALE sa ON s.SALA_ID = sa.ID
JOIN KINA k ON sa.KINA_ID = k.ID
WHERE s.DATA BETWEEN data_od AND data_do;
END;
/
PROCEDURE ZliczSprzedaneBilety(wyniki OUT SYS_REFCURSOR)
IS
BEGIN
OPEN wyniki FOR
SELECT f.TYTULFILMU, COUNT(b.ID) AS LICZBA_BILETOW
FROM FILMY f
LEFT JOIN SEANSE s ON f.ID = s.FILMY_ID
LEFT JOIN REZERWACJE R ON R.SEANSE_ID = S.ID
LEFT JOIN BILETY b ON R.ID = b.REZERWACJE_ID
GROUP BY f.TYTULFILMU;
END;
/