Advertisement
Guest User

Untitled

a guest
Apr 16th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.39 KB | None | 0 0
  1. Utworzyć tabelę bazy danych o nazwie Analityka_Egzaminy. Tabela powinna zawierać
  2. informacje o liczbie niezdanych egzaminów poszczególnych studentów z poszczególnych
  3. przedmiotów oraz ogólnej liczbie egzaminów studenta z danego przedmiotu. W tabeli
  4. utworzyć kolumny opisujące studenta (identyfikator, nazwisko i imię), przedmiot (nazwa),
  5. liczbę niezdanych egzaminów z przedmiotu oraz liczbę wszystkich egzaminów studenta z
  6. danego przedmiotu. Dane dotyczące przedmiotu oraz poszczególnych liczb należy umieścić w
  7. kolumnie, będącej tabelą zagnieżdżONą. Wprowadzić dane DO tabeli Analityka_Egzaminy na
  8. podstawie danych zgromadzonych w tabelach Egzaminy, Przedmioty i Studenci.
  9.  
  10.  
  11. CREATE
  12. OR
  13. REPLACE TYPE liczby AS object
  14. (
  15.  liczba_niezalicz INTEGER,
  16.  liczba_ogol INTEGER,
  17.  nazwa_p VARCHAR2(100) );
  18. CREATE
  19. OR
  20. REPLACE TYPE analityczny
  21. IS
  22.  TABLE OF liczby;
  23.  CREATE TABLE analityka_egzaminy
  24.  (
  25.  id_student VARCHAR2(7),
  26.  nazwisko VARCHAR2(25),
  27.  imie VARCHAR2(15),
  28.  dane analityczny
  29.  )
  30.  nested TABLE dane store AS dane_e;
  31.  
  32.  DECLARE
  33.  vid_student VARCHAR2(7);
  34.  vnazwisko VARCHAR2(25);
  35.  vimie VARCHAR2(15);
  36.  vnazwa_p VARCHAR2(100);
  37.  liczba_ogol INTEGER;
  38.  liczba_niezd INTEGER;
  39.  symbol VARCHAR2(1);
  40.  CURSOR c_dane IS
  41.  SELECT DISTINCT e.id_student,
  42.  s.nazwisko,
  43.  s.imie,
  44.  p.nazwa_p,
  45.  COUNT (e.id_przedmiot) --total amont of exams
  46.  FROM egzaminy e
  47.  left join studenci s
  48.  ON s.id_student = e.id_student
  49.  left join przedmioty p
  50.  ON p.id_przedmiot = e.id_przedmiot
  51.  GROUP BY e.id_student,
  52.  s.nazwisko,
  53.  s.imie,
  54.  p.nazwa_p;
  55. CURSOR c_take(pid_student VARCHAR2)
  56. IS
  57.  SELECT COUNT(id_przedmiot) AS liczba--amount of failed exam's
  58.  FROM egzaminy
  59.  WHERE zdal = 'N'
  60.  AND id_student = pid_student
  61.  GROUP BY id_student;
  62. BEGIN
  63.  OPEN c_dane;
  64.  LOOP
  65.  FETCH c_dane
  66.  INTO vid_student,
  67.  vnazwisko,
  68.  vimie,
  69.  vnazwa_p,
  70.  liczba_ogol;
  71.  
  72.  EXIT
  73.  WHEN c_dane%NOTFOUND;
  74.  FOR x IN c_take(vid_student)
  75.  LOOP
  76.  BEGIN
  77.  SELECT 'x'
  78.  INTO symbol
  79.  FROM analityka_egzaminy
  80.  WHERE id_student = vid_student;
  81.  
  82.  INSERT INTO the
  83.  (
  84.  SELECT dane
  85.  FROM analityka_egzaminy
  86.  WHERE id_student = vid_student
  87.  )
  88. VALUES
  89. (
  90.  liczby(x.liczba, liczba_ogol ,vnazwa_p)
  91.  );
  92.  
  93.  EXCEPTION
  94.  WHEN NO_DATA_FOUND THEN
  95.  INSERT INTO analityka_egzaminy VALUES
  96.  (
  97.  vid_student,
  98. vnazwisko,
  99. vimie,
  100. analityczny(liczby(x.liczba, liczba_ogol ,vn
  101. azwa_p))
  102.  );
  103.  
  104.  END;
  105.  END LOOP;
  106.  END LOOP;
  107.  CLOSE c_dane;
  108. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement