Advertisement
Razzim

twBazy

Dec 12th, 2017
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.42 KB | None | 0 0
  1. DROP TABLE klienci CASCADE CONSTRAINTS;
  2. DROP TABLE narzedzia CASCADE CONSTRAINTS;
  3. DROP TABLE zamowienia CASCADE CONSTRAINTS;
  4. DROP TABLE promocje CASCADE CONSTRAINTS;
  5. DROP TABLE rachunki CASCADE CONSTRAINTS;
  6. DROP TABLE messages;
  7. DROP VIEW lista_dostepnych CASCADE CONSTRAINTS;
  8. DROP VIEW przedawnione_rachunki CASCADE CONSTRAINTS;
  9. DROP SEQUENCE id_klienta_seq;
  10. DROP SEQUENCE id_narzedzia_seq;
  11. DROP SEQUENCE id_rachunku_seq;
  12. DROP SEQUENCE id_promocji_seq;
  13. DROP SEQUENCE mess_id;
  14.  
  15. CREATE TABLE klienci (
  16. id_klienta NUMBER(11) PRIMARY KEY NOT NULL,
  17. rodzaj_dokumentu VARCHAR2(30) NOT NULL,
  18. numer_dokumentu VARCHAR2(30) UNIQUE NOT NULL,
  19. nazwisko VARCHAR2(30) NOT NULL,
  20. imie VARCHAR2(30) NOT NULL,
  21. numer_telefonu NUMBER(20) NOT NULL,
  22. uwagi VARCHAR2(250) NOT NULL
  23. );
  24.  
  25. CREATE TABLE narzedzia (
  26. id_narzedzia NUMBER(11) PRIMARY KEY NOT NULL,
  27. rodzaj_narzedzia VARCHAR2(20) NOT NULL,
  28. ilosc NUMBER(11) NOT NULL,
  29. cena_dzien NUMBER(11) NOT NULL,
  30. opis VARCHAR2(250) NOT NULL
  31. );
  32.  
  33. CREATE TABLE promocje (
  34. id_promocji NUMBER(11) PRIMARY KEY NOT NULL,
  35. rodzaj_narzedzia VARCHAR2(20) NOT NULL,
  36. procent_znizki NUMBER(3) NOT NULL,
  37. termin_od DATE NOT NULL,
  38. termin_do DATE NOT NULL
  39. );
  40.  
  41. CREATE TABLE rachunki (
  42. id_rachunku NUMBER(11) PRIMARY KEY NOT NULL,
  43. id_klienta NUMBER(11) REFERENCES klienci(id_klienta) NOT NULL,
  44. data_wypozyczenia DATE NOT NULL,
  45. kaucja NUMBER(11) NOT NULL,
  46. kwota NUMBER(11) NOT NULL,
  47. termin_wplaty DATE UNIQUE NOT NULL
  48. );
  49.  
  50. CREATE TABLE zamowienia (
  51. id_rachunku NUMBER(11) REFERENCES rachunki(id_rachunku) NOT NULL,
  52. id_narzedzia NUMBER(11) REFERENCES narzedzia(id_narzedzia) NOT NULL
  53. );
  54.  
  55. create table messages(
  56. id_mess NUMBER(5,0) constraint mess_pk PRIMARY KEY,
  57. m_when TIMESTAMP NOT NULL,
  58. table_name VARCHAR2(30) NOT NULL,
  59. oper_type VARCHAR2(30) NOT NULL,
  60. comm VARCHAR2(100)
  61. );
  62.  
  63. CREATE SEQUENCE id_klienta_seq;
  64. CREATE SEQUENCE id_narzedzia_seq;
  65. CREATE SEQUENCE id_rachunku_seq;
  66. CREATE SEQUENCE id_promocji_seq;
  67. CREATE SEQUENCE mess_id;
  68.  
  69. CREATE INDEX rach_klienta ON rachunki(id_klienta);
  70. CREATE INDEX zam_rachunki ON zamowienia(id_rachunku);
  71. CREATE INDEX zam_narzedzia ON zamowienia(id_narzedzia);
  72. CREATE INDEX promo_narzedzia ON promocje(rodzaj_narzedzia);
  73.  
  74. CREATE OR REPLACE VIEW lista_dostepnych AS
  75. SELECT * FROM narzedzia
  76. WHERE ilosc >0;
  77.  
  78. CREATE OR REPLACE VIEW przedawnione_rachunki AS
  79. SELECT * FROM rachunki
  80. WHERE termin_wplaty > SYSDATE;
  81.  
  82. CREATE OR REPLACE VIEW niezwrocone_narzedzia AS
  83. SELECT * FROM rachunki
  84. WHERE data_wypozyczenia > SYSDATE +30;
  85.  
  86. CREATE OR REPLACE VIEW lista_uszkodzonych AS
  87. SELECT * FROM narzedzia
  88. WHERE opis LIKE 'uszkodzone';
  89.  
  90. INSERT INTO klienci VALUES
  91. ( ID_KLIENTA_SEQ.NEXTVAL
  92. , 'DOWOD OSOBISTY'
  93. , 'ANY12345'
  94. , 'KOWALSKI'
  95. , 'ADAM'
  96. , 123456789
  97. , 'BRAK'
  98. );
  99.  
  100. INSERT INTO klienci VALUES
  101. ( ID_KLIENTA_SEQ.NEXTVAL
  102. , 'DOWOD OSOBISTY'
  103. , 'ANY45645'
  104. , 'NIEPRZECKI'
  105. , 'ZENEK'
  106. , 365478965
  107. , 'BRAK'
  108. );
  109.  
  110. INSERT INTO klienci VALUES
  111. ( ID_KLIENTA_SEQ.NEXTVAL
  112. , 'DOWOD OSOBISTY'
  113. , 'ANY85345'
  114. , 'LEWANDOWSKI'
  115. , 'TADEUSZ'
  116. , 486254862
  117. , 'BRAK'
  118. );
  119.  
  120. INSERT INTO klienci VALUES
  121. ( ID_KLIENTA_SEQ.NEXTVAL
  122. , 'DOWOD OSOBISTY'
  123. , 'ANY12987'
  124. , 'NIEMIEC'
  125. , 'WOJCIECH'
  126. , '123456789'
  127. , 'BRAK'
  128. );
  129.  
  130. INSERT INTO klienci VALUES
  131. ( ID_KLIENTA_SEQ.NEXTVAL
  132. , 'PESEL'
  133. , '7812245324660'
  134. , 'NUKEM'
  135. , 'DUKE'
  136. , 894885248
  137. , 'BRAK'
  138. );
  139.  
  140. INSERT INTO klienci VALUES
  141. ( ID_KLIENTA_SEQ.NEXTVAL
  142. , 'PESEL'
  143. , '55082042668'
  144. , 'POTOCKI'
  145. , 'ZBIGNIEW'
  146. , 365896589
  147. , 'BRAK'
  148. );
  149.  
  150. INSERT INTO narzedzia VALUES
  151. ( ID_NARZEDZIA_SEQ.NEXTVAL
  152. , 'WIERTARKA'
  153. , 2
  154. , 30
  155. , 'MAKITA, MOC 220W, NAPIECIE 230V, 1000 RPM, CZARNA W CENTKI'
  156. );
  157.  
  158. INSERT INTO narzedzia VALUES
  159. ( ID_NARZEDZIA_SEQ.NEXTVAL
  160. , 'WIERTARKA'
  161. , 3
  162. , 20
  163. , 'JBC, MOC 420W, NAPIECIE 230V, 2000 RPM, ZIELONA'
  164. );
  165.  
  166. INSERT INTO narzedzia VALUES
  167. ( ID_NARZEDZIA_SEQ.NEXTVAL
  168. , 'SZLIFIERKA KATOWA'
  169. , 4
  170. , 15
  171. , 'BOSH, MOC 330W, NAPIECIE 230V, 3000 RPM, ROZOWA'
  172. );
  173.  
  174. INSERT INTO narzedzia VALUES
  175. ( ID_NARZEDZIA_SEQ.NEXTVAL
  176. , 'SZLIFIERKA KATOWA'
  177. , 1
  178. , 40
  179. , 'EINHELL, MOC 320W, NAPIECIE 230V, 2500 RPM, BIALAI'
  180. );
  181.  
  182. INSERT INTO narzedzia VALUES
  183. ( ID_NARZEDZIA_SEQ.NEXTVAL
  184. , 'SZLIFIERKA KATOWA'
  185. , 2
  186. , 35
  187. , 'BOSH, MOC 220W, NAPIECIE 230V, 1000 RPM, ZIELONA'
  188. );
  189.  
  190. INSERT INTO narzedzia VALUES
  191. ( ID_NARZEDZIA_SEQ.NEXTVAL
  192. , 'WKRETARKA'
  193. , 1
  194. , 20
  195. , 'VERTO, MOC 120W, NAPIECIE 230V, 500 RPM, CZERWONA'
  196. );
  197.  
  198. INSERT INTO narzedzia VALUES
  199. ( ID_NARZEDZIA_SEQ.NEXTVAL
  200. , 'WKRETARKA'
  201. , 2
  202. , 25
  203. , 'HITACHI, MOC 150W, NAPIECIE 230V, 1000 RPM, ZIELONA'
  204. );
  205.  
  206. INSERT INTO narzedzia VALUES
  207. ( ID_NARZEDZIA_SEQ.NEXTVAL
  208. , 'WKRETARKA'
  209. , 2
  210. , 20
  211. , 'BOSH, MOC 220W, NAPIECIE 230V, 2500 RPM, CZARNA'
  212. );
  213.  
  214. INSERT INTO narzedzia VALUES
  215. ( ID_NARZEDZIA_SEQ.NEXTVAL
  216. , 'WKRETARKA'
  217. , 2
  218. , 25
  219. , 'DEWALT, MOC 220W, NAPIECIE 230V, 1000 RPM, CZARNA W CENTKI'
  220. );
  221.  
  222. INSERT INTO narzedzia VALUES
  223. ( ID_NARZEDZIA_SEQ.NEXTVAL
  224. , 'SRUBOKRET'
  225. , 1
  226. , 200000000
  227. , 'KRZYZAKOWY, ZLOTY, WYSADZANY RUBINAMI'
  228. );
  229.  
  230. INSERT INTO narzedzia VALUES
  231. ( ID_NARZEDZIA_SEQ.NEXTVAL
  232. , 'SRUBOKRET'
  233. , 1000
  234. , 1
  235. , 'PLASKI, ZIELONY, ZWYKLY'
  236. );
  237.  
  238. INSERT INTO narzedzia VALUES
  239. ( ID_NARZEDZIA_SEQ.NEXTVAL
  240. , 'AGREGAT'
  241. , 2
  242. , 90
  243. , 'MATRIX, MOC 1500W, BENZYNA, 2L/H'
  244. );
  245.  
  246. INSERT INTO narzedzia VALUES
  247. ( ID_NARZEDZIA_SEQ.NEXTVAL
  248. , 'LAMPA HALOGENOWA'
  249. , 2
  250. , 30
  251. , 'PHILIPS, MOC 2200W, NAPIECIE 230V'
  252. );
  253.  
  254. INSERT INTO narzedzia VALUES
  255. ( ID_NARZEDZIA_SEQ.NEXTVAL
  256. , 'MYJKA CISNIENIOWA'
  257. , 4
  258. , 50
  259. , 'KARCHER, MOC 2000W, NAPIECIE 230V, ZOLTA'
  260. );
  261.  
  262. INSERT INTO narzedzia VALUES
  263. ( ID_NARZEDZIA_SEQ.NEXTVAL
  264. , 'POZIOMICA'
  265. , 2
  266. , 3
  267. , 'VALEO, CZERWONA'
  268. );
  269.  
  270. INSERT INTO narzedzia VALUES
  271. ( ID_NARZEDZIA_SEQ.NEXTVAL
  272. , 'PILA SPALINOWA'
  273. , 2
  274. , 30
  275. , 'STIHL, MOC 5KM, POMARANCZOWA'
  276. );
  277.  
  278. INSERT INTO narzedzia VALUES
  279. ( ID_NARZEDZIA_SEQ.NEXTVAL
  280. , 'SPAWARKA MIG-MAG'
  281. , 1
  282. , 80
  283. , 'BESTER, MOC 3200W, NAPIECIE 400V, CZERWONA'
  284. );
  285.  
  286. INSERT INTO narzedzia VALUES
  287. ( ID_NARZEDZIA_SEQ.NEXTVAL
  288. , 'SPAWARKA PLASTIKU'
  289. , 4
  290. , 50
  291. , 'KRAFTDELE, MOC 1700W, NAPIECIE 230V, CZARNA'
  292. );
  293.  
  294. INSERT INTO narzedzia VALUES
  295. ( ID_NARZEDZIA_SEQ.NEXTVAL
  296. , 'LUTOWNICA'
  297. , 3
  298. , 40
  299. , 'BOSH, MOC 500W, NAPIECIE 230V, ZOLTA'
  300. );
  301.  
  302. INSERT INTO promocje VALUES
  303. (ID_PROMOCJI_SEQ.NEXTVAL
  304. , 'WKRETARKA'
  305. , 10
  306. , TO_DATE('17-11-2017', 'dd-mm-yyyy')
  307. , TO_DATE('27-12-2017', 'dd-mm-yyyy')
  308. );
  309.  
  310. INSERT INTO promocje VALUES
  311. (ID_PROMOCJI_SEQ.NEXTVAL
  312. , 'WKRETARKA'
  313. , 10
  314. , TO_DATE('17-11-2017', 'dd-mm-yyyy')
  315. , TO_DATE('27-12-2017', 'dd-mm-yyyy')
  316. );
  317.  
  318. INSERT INTO promocje VALUES
  319. (ID_PROMOCJI_SEQ.NEXTVAL
  320. , 'SRUBOKRET'
  321. , 50
  322. , TO_DATE('15-11-2017', 'dd-mm-yyyy')
  323. , TO_DATE('22-12-2017', 'dd-mm-yyyy')
  324. );
  325.  
  326. COMMIT;
  327.  
  328. SELECT * FROM klienci;
  329. SELECT * FROM narzedzia;
  330. SELECT * FROM promocje;
  331. SELECT ID_NARZEDZIA FROM NARZEDZIA WHERE ILOSC <2;
  332. SELECT ID_NARZEDZIA FROM NARZEDZIA WHERE CENA_DZIEN = (SELECT Min(CENA_DZIEN) FROM NARZEDZIA);
  333. SELECT RODZAJ_NARZEDZIA FROM NARZEDZIA ORDER BY CENA_DZIEN;
  334. SELECT NAZWISKO, IMIE FROM KLIENCI WHERE RODZAJ_DOKUMENTU = 'PESEL';
  335.  
  336.  
  337. --------------------------------zad2
  338.  
  339. --Pkt 1
  340.  
  341. DECLARE
  342. v_rodzaj_narzedzia narzedzia.rodzaj_narzedzia%TYPE;
  343. v_cena_dzien narzedzia.cena_dzien%TYPE;
  344. vr_klient klienci%ROWTYPE;
  345. BEGIN
  346. SELECT rodzaj_narzedzia INTO v_rodzaj_narzedzia FROM narzedzia WHERE id_narzedzia = 5;
  347. SELECT cena_dzien INTO v_cena_dzien FROM narzedzia WHERE id_narzedzia =5;
  348. SELECT * INTO vr_klient FROM klienci WHERE numer_dokumentu = 'ANY12345';
  349. dbms_output.put_line(v_rodzaj_narzedzia);
  350. dbms_output.put_line(v_cena_dzien);
  351. dbms_output.put_line('Imie: '||vr_klient.imie||' Nazwisko: '||vr_klient.nazwisko);
  352. END;
  353. /
  354.  
  355. --Pkt 2
  356.  
  357. DECLARE
  358. vr_klient klienci%ROWTYPE;
  359. v_changed NUMBER;
  360. BEGIN
  361. SELECT * INTO vr_klient FROM klienci WHERE id_klienta = 3;
  362. dbms_output.put_line('Numer: '||vr_klient.numer_telefonu);
  363. UPDATE klienci SET numer_telefonu = 1234567890;
  364. v_changed := SQL%ROWCOUNT;
  365. COMMIT;
  366. dbms_output.put_line('Zmieniono: '||v_changed||' wierszy');
  367. END;
  368. /
  369.  
  370. -- Pkt 3
  371.  
  372. DECLARE
  373. vr_klient klienci%ROWTYPE;
  374. CURSOR c_klienci IS
  375. SELECT * FROM klienci WHERE numer_dokumentu = '55082042668';
  376. BEGIN
  377. OPEN c_klienci;
  378. LOOP
  379. FETCH c_klienci INTO vr_klient;
  380. EXIT WHEN c_klienci%NOTFOUND OR c_klienci%NOTFOUND IS NULL;
  381. dbms_output.put_line(vr_klient.nazwisko||' nr.tel: '||vr_klient.numer_telefonu);
  382. END LOOP;
  383. CLOSE c_klienci;
  384. END;
  385. /
  386.  
  387.  
  388. -----------------zad3
  389.  
  390.  
  391. set serveroutput on;
  392.  
  393. CREATE OR REPLACE PROCEDURE get_klient(id_kli klienci.id_klienta%TYPE)
  394. IS
  395. vr_klient klienci%ROWTYPE;
  396. BEGIN
  397. SELECT * INTO vr_klient FROM klienci WHERE id_klienta = id_kli;
  398. dbms_output.put_line('Imie: ' || vr_klient.imie || ' Nazwisko: ' || vr_klient.nazwisko);
  399. END get_klient;
  400. /
  401.  
  402. CREATE OR REPLACE PROCEDURE ins_klient(klient_dokument klienci.rodzaj_dokumentu%TYPE, klient_nrdokumentu klienci.numer_dokumentu%TYPE, klient_nazwisko klienci.nazwisko%TYPE, klient_imie klienci.imie%TYPE, klient_telefon klienci.numer_telefonu%TYPE, klient_uwagi klienci.uwagi%TYPE)
  403. IS
  404. BEGIN
  405. INSERT INTO klienci VALUES(id_klienta_seq.NEXTVAL,klient_dokument,klient_nrdokumentu,klient_nazwisko,klient_imie,klient_telefon,klient_uwagi);
  406. COMMIT;
  407. EXCEPTION
  408. WHEN DUP_VAL_ON_INDEX THEN
  409. INSERT INTO messages VALUES (mess_id.nextval,current_timestamp,'klienci','INSERT','Powtorzony numer dokumentu');
  410. dbms_output.put_line('Powtorzony numer dokumentu, klient juz istnieje w bazie');
  411. COMMIT;
  412. WHEN others THEN
  413. INSERT INTO messages VALUES (mess_id.nextval,current_timestamp,'klienci','INSERT','OTHERS');
  414. dbms_output.put_line('Nieznany blad');
  415. COMMIT;
  416. END ins_klient;
  417. /
  418.  
  419. CREATE OR REPLACE PROCEDURE upd_klient(id_kli klienci.id_klienta%TYPE, nowy_numer klienci.numer_telefonu%TYPE)
  420. IS
  421. BEGIN
  422. UPDATE klienci SET numer_telefonu=nowy_numer WHERE id_klienta=id_kli;
  423. COMMIT;
  424. dbms_output.put_line('Zaaktualizowano numer telefonu');
  425. END upd_klient;
  426. /
  427.  
  428. CREATE OR REPLACE PROCEDURE del_klient(id_kli klienci.id_klienta%TYPE)
  429. IS
  430. BEGIN
  431. DELETE FROM klienci WHERE id_klienta=id_kli;
  432. COMMIT;
  433. dbms_output.put_line('Usunieto klienta');
  434. END del_klient;
  435. /
  436.  
  437.  
  438. EXECUTE get_klient(3);
  439. EXECUTE ins_klient('DOWOD OSOBISTY', 'ANY52698', 'Duda', 'Andrzej', 700800900, 'Adrian');
  440. EXECUTE upd_klient(3,123654789);
  441. EXECUTE del_klient(3);
  442.  
  443.  
  444. ----------------------różnetakie
  445.  
  446. create or replace function srednia_pensji
  447. return number
  448. as
  449. v_sr number := 0;
  450. v_sum number := 0;
  451. v_ct number :=0;
  452. begin
  453. select sum(pensja) into v_sum from nauczyciel;
  454. select count(pensja) into v_ct from nauczyciel;
  455. v_sr := v_sum/v_ct;
  456. return v_sr;
  457. end;
  458. /
  459.  
  460.  
  461. CREATE OR REPLACE function srednia
  462. return number
  463. as
  464. v_sr number := 0;
  465. v_sum number := 0;
  466. v_ct number := 0;
  467. BEGIN
  468. select sum(Pensja) into v_sum from Pracownicy;
  469. select count(Idpracownicy) into v_ct from Pracownicy;
  470. v_sr := v_sum / v_ct;
  471. return v_sr;
  472.  
  473. END;
  474. /
  475. DECLARE
  476. sr number;
  477. BEGIN
  478. sr := srednia();
  479. Dbms_Output.Put_Line(sr);
  480. END;
  481. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement