Advertisement
Guest User

Untitled

a guest
Feb 8th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 5.28 KB | None | 0 0
  1. DROP TABLE wypozyczenie;
  2. DROP TABLE czytelnicy;
  3. DROP TABLE ksiazka;
  4. DROP TABLE autor;
  5. DROP TABLE wydawnictwo;
  6.  
  7. CREATE TABLE wydawnictwo
  8. (
  9.   id_wydawnictwo NUMBER(10) CONSTRAINT wyd_pk PRIMARY KEY,
  10.   nazwa VARCHAR2(20)
  11. );
  12. CREATE TABLE autor
  13. (
  14.   id_autor NUMBER(6) CONSTRAINT aut_pk PRIMARY KEY,
  15.   nazwisko VARCHAR2(20),
  16.   imie VARCHAR2(20)
  17. );
  18. CREATE TABLE ksiazka
  19. (
  20.   id_ksiazka NUMBER(6) PRIMARY KEY,
  21.   tytul VARCHAR(30),
  22.   id_autor NUMBER(6) REFERENCES autor(id_autor),
  23.   id_wydawnictwo NUMBER(10) REFERENCES wydawnictwo(id_wydawnictwo),
  24.   stan VARCHAR2(20)
  25. );
  26. CREATE TABLE czytelnicy
  27. (
  28.   id_czytelnik NUMBER(10) PRIMARY KEY,
  29.   nazwisko VARCHAR2(30),
  30.   imie VARCHAR2(30),
  31.   data_urodzenia DATE
  32. );
  33. CREATE TABLE wypozyczenie
  34. (
  35.   id_wypozyczenie NUMBER(10) CONSTRAINT wyp_pk PRIMARY KEY,
  36.   id_czytelnik NUMBER(10) REFERENCES czytelnicy(id_czytelnik),
  37.   id_ksiazka NUMBER(6) REFERENCES ksiazka(id_ksiazka),
  38.   data_wypozyczenia DATE DEFAULT(SYSDATE),
  39.   data_zwrotu DATE DEFAULT(NULL)
  40. );
  41.  
  42. INSERT INTO czytelnicy VALUES (1,'Haraszo','Andrzej',TO_DATE('2003/07/09', 'yyyy/mm/dd'));
  43. INSERT INTO czytelnicy VALUES (2,'Haraszoo','Andrzejj',TO_DATE('2001/07/09', 'yyyy/mm/dd'));
  44. INSERT INTO czytelnicy VALUES (3,'Datek','matek',TO_DATE('1927/07/09', 'yyyy/mm/dd'));
  45. INSERT INTO wydawnictwo VALUES(1, 'Nowa Era');
  46. INSERT INTO wydawnictwo VALUES(2, 'Oxford');
  47. INSERT INTO autor VALUES(1, 'Andrzej', 'Rak');
  48. INSERT INTO autor VALUES(2, 'Paweł', 'Dul');
  49. INSERT INTO autor VALUES(3, 'Paweł3', 'Dul3');
  50. INSERT INTO autor VALUES(4, 'Paweł4', 'Dul4');
  51. INSERT INTO ksiazka VALUES(1, 'W dupie', 1, 2, 'nowa' );
  52. INSERT INTO ksiazka VALUES(3, 'W dupie2', 1, 2, 'nowa2' );
  53. INSERT INTO ksiazka VALUES(4, 'W dupie3', 1, 2, 'nowa3' );
  54. INSERT INTO ksiazka VALUES(5, 'W dupie4', 1, 2, 'nowa4' );
  55. INSERT INTO ksiazka VALUES(2, 'Gdzies', 2, 1, 'uzywana' );
  56. INSERT INTO ksiazka VALUES(6, 'W dupie44', 1, 2, 'NIEZNANY' );
  57. INSERT INTO wypozyczenie VALUES(1, 1, 1,TO_DATE('2017/02/03','yyyy/mm/dd') ,TO_DATE('2017/02/07','yyyy/mm/dd') );
  58. INSERT INTO wypozyczenie VALUES(2,2,2,TO_DATE('2017/02/04','yyyy/mm/dd'),TO_DATE('2017/02/13','yyyy/mm/dd'));
  59. INSERT INTO wypozyczenie VALUES(3,2,2,TO_DATE('2017/02/04','yyyy/mm/dd'),NULL);
  60. INSERT INTO wypozyczenie VALUES(4,2,2,TO_DATE('2017/02/04','yyyy/mm/dd'),NULL);
  61.  
  62. --zadanie 1
  63. SELECT * FROM (SELECT * FROM czytelnicy ORDER BY data_urodzenia ) WHERE ROWNUM = 1;
  64. --zadanie 2
  65. /*
  66. Instrukcja wyświetlająca nastepujace informacje o wypozyczeniach (tytuł ksiązki
  67. imie nazwisko autora, imie i nazwisko czytelnika oraz date wypozczenia
  68. dla ksiaze wypozyczonych co najmniej 3 razy w miesiacu*/
  69.  
  70. SELECT ksiazka.tytul, autor.imie, autor.nazwisko, czytelnicy.imie, czytelnicy.nazwisko, wypozyczenie.data_wypozyczenia
  71. FROM ksiazka, autor, czytelnicy, wypozyczenie WHERE wypozyczenie.id_czytelnik = czytelnicy.id_czytelnik AND
  72. wypozyczenie.id_ksiazka = ksiazka.id_ksiazka AND ksiazka.id_autor = autor.id_autor;
  73. --dorobic 3 razy w miesiacy
  74.  
  75. --Zadanie 3
  76. /*
  77. Istrukcja ktora wyswietli informacje o autorze (imie, nazwisko) oraz liczbie
  78. napisanych przez niego ksiazek jesli byla wieksza niz 3
  79. */
  80. SELECT autor.imie, autor.nazwisko, COUNT(ksiazka.id_ksiazka) AS Ilosc FROM ksiazka, autor WHERE ksiazka.id_autor = autor.id_autor GROUP BY autor.id_autor, autor.imie, autor.nazwisko
  81. HAVING COUNT(ksiazka.id_ksiazka)>3;
  82. --Zadanie 4
  83. /*
  84. Funkcje wyliczajaca ile procent stanowia wypozyczenia ktore nie maja podanej
  85. daty zwrotu w sotsunku do wszystkich wypozyczen
  86. */
  87.  
  88. CREATE OR REPLACE FUNCTION zwroty
  89. RETURN NUMBER IS
  90. ile_wszystkich  NUMBER;
  91. ile_pustych NUMBER;
  92. BEGIN
  93.     ile_wszystkich := 0;
  94.     ile_pustych :=0;
  95.     SELECT COUNT(wypozyczenie.id_wypozyczenie) INTO ile_wszystkich FROM wypozyczenie;
  96.     SELECT COUNT(wypozyczenie.id_wypozyczenie) INTO ile_pustych FROM wypozyczenie WHERE data_zwrotu IS NULL;
  97.     RETURN (ile_pustych/ile_wszystkich)*100;
  98. END;
  99. /
  100. SELECT zwroty FROM dual;
  101.  
  102. --Zadanie 5
  103. /*
  104. Procedure ktora sprawdzi wszystkie wypozyczenia jezeli data zwrotu jest wczesniejsza niz
  105. data wypozyczenia to powinien zostac zgloszony wyjatek o nazwie WYJĄTEK jezeli natomiast
  106. stan ksiazki jest ustawiony na NIEZNANY to nalezy wyswietlic komunikat
  107. informujacy o tym
  108. */
  109. INSERT INTO wypozyczenie VALUES(5,2,2, TO_DATE('2016\02\03','yyyy\mm\dd'), TO_DATE('2016\02\01','yyyy\mm\dd'));
  110. INSERT INTO wypozyczenie VALUES(6,2,6, TO_DATE('2016\02\03','yyyy\mm\dd'), TO_DATE('2016\02\01','yyyy\mm\dd'));
  111. CREATE OR REPLACE PROCEDURE sprawdz
  112. IS
  113. --DEKLARACJA ZMIENNYCH
  114.     TYPE Te IS RECORD
  115.         (wypozyczenie DATE,zwrot DATE,stan VARCHAR2(20));
  116.     dane Te;
  117.     CURSOR spr IS
  118.     SELECT wypozyczenie.data_wypozyczenia, wypozyczenie.data_zwrotu, ksiazka.stan
  119.         FROM wypozyczenie, ksiazka WHERE wypozyczenie.id_ksiazka = ksiazka.id_ksiazka;
  120. BEGIN
  121.     OPEN spr;
  122.     LOOP
  123.         FETCH spr INTO dane;
  124.         EXIT WHEN spr%NOTFOUND;
  125.         IF dane.wypozyczenie > dane.zwrot THEN
  126.             DBMS_OUTPUT.put_line('Jest'); -- na kolosie powinno byc: RAISE WYJĄTEK;
  127.         ELSE --dla celów nauki nie miałem wyjątku stworzonego więc zrobiłem na dbms
  128.             DBMS_OUTPUT.put_line('Brak');
  129.         END IF;
  130.         IF dane.stan = 'NIEZNANY' THEN
  131.             DBMS_OUTPUT.put_line('Nieznany stan książki UWAGA!');
  132.         END IF;
  133.     END LOOP;
  134.     CLOSE spr;
  135. END;
  136. /
  137. EXEC sprawdz;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement