Kyaria

BÜCHER [No4 ist Mist]

May 1st, 2018
307
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 4.52 KB | None | 0 0
  1. SET serveroutput ON;
  2.  
  3. --aufgabe buch no1 'Dicke Bücher'
  4. CREATE OR REPLACE FUNCTION f1(zahl IN NUMBER) RETURN NUMBER AS
  5.  
  6. num_berd NUMBER := zahl;
  7. zahl_2 NUMBER := 0;
  8.  
  9. BEGIN
  10.  
  11.     EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM buch WHERE anz_seiten > ' || num_berd INTO zahl_2;
  12.     RETURN zahl_2;
  13.  
  14. END;
  15.  
  16. DECLARE
  17. num_berd NUMBER := 0;
  18. BEGIN
  19.     num_berd := f1(500);
  20.     DBMS_OUTPUT.put_line(num_berd);
  21. END;
  22.  
  23.  
  24. --aufgabe buch no2 'Meiste Kopien'
  25. CREATE OR REPLACE FUNCTION f2(isbn OUT VARCHAR2) RETURN NUMBER AS
  26.  
  27. anz NUMBER := 0;
  28.  
  29. CURSOR c1 IS SELECT COUNT(*) anz_in_cur, buch_kopien.isbn FROM buch_kopien GROUP BY buch_kopien.isbn;
  30. c2 c1%ROWTYPE;
  31.  
  32. BEGIN
  33. OPEN c1;
  34.     LOOP
  35.            
  36.             FETCH c1 INTO c2;
  37.             EXIT WHEN c1%notfound;
  38.            
  39.             IF anz < c2.anz_in_cur THEN
  40.                 anz := c2.anz_in_cur;
  41.                 isbn := c2.isbn;
  42.             END IF;
  43.        
  44.     END LOOP;
  45.    
  46.     RETURN anz;
  47. CLOSE c1;
  48. END;
  49.  
  50.  
  51. DECLARE
  52. isbn VARCHAR2(255) := '';
  53. anz NUMBER := -1;
  54. BEGIN
  55.  
  56.     anz := f2(isbn);
  57.     DBMS_OUTPUT.put_line('Anzahl: ' || anz || ', ISBN: ' || isbn);
  58.  
  59. END;
  60.  
  61. --aufgabe buch no3 'Überfällige bücher'
  62.  
  63. CREATE OR REPLACE FUNCTION f3(datum IN DATE) RETURN NUMBER AS
  64.  
  65. check_this_date DATE := datum;
  66. NAME_des_BUCHES VARCHAR2(255) := '';
  67. num_bernd NUMBER := 0;
  68.  
  69. CURSOR c1 IS SELECT COUNT(*) count_youre_books, KUNDE.AUSWEISNR, kunde.Vorname, AUSLEIHE.barcode_id, AUSLEIHE.ENTLEIHENDE FROM kunde, ausleihe WHERE AUSLEIHE.ENTLEIHENDE < check_this_date GROUP BY KUNDE.AUSWEISNR, kunde.Vorname, AUSLEIHE.barcode_id, AUSLEIHE.ENTLEIHENDE ORDER BY KUNDE.AUSWEISNR;
  70.    
  71. c2 c1%ROWTYPE;
  72.  
  73. BEGIN
  74. OPEN c1;
  75. LOOP
  76.  
  77.     FETCH c1 INTO c2;
  78.     EXIT WHEN c1%notfound;
  79.    
  80.     num_bernd := c2.count_youre_books;
  81.     EXECUTE IMMEDIATE 'SELECT BUCH.TITEL from buch, buch_kopien WHERE buch_kopien.barcode_id = ' || c2.barcode_id || ' AND buch.isbn = buch_kopien.isbn' INTO NAME_des_BUCHES;
  82.    
  83.     DBMS_OUTPUT.put_line('K_ID: ' || c2.AUSWEISNR || ', Vorname: ' || c2.vorname || ', Buch: ' || NAME_des_BUCHES || ', Termin: ' || c2.ENTLEIHENDE);
  84.    
  85. END LOOP;
  86. CLOSE c1;
  87.  
  88. RETURN num_bernd;
  89. END;
  90.  
  91. DECLARE
  92. datum DATE := SYSDATE;
  93. zahl NUMBER := 0;
  94. BEGIN
  95. zahl := f3(datum);
  96. END;
  97.  
  98. --aufgabe buch no4 'buchkopien eintragen'
  99.  
  100. CREATE OR REPLACE FUNCTION f4(isbn IN VARCHAR2, bar_code IN VARCHAR2) RETURN VARCHAR2 AS
  101.  
  102. ins_isbn VARCHAR2(13) := isbn;
  103. ins_barcode VARCHAR2(255) := bar_code;
  104. check_corr_val VARCHAR2(255) := 'Ihre Daten wurden nicht korrekt eingetragen!';
  105.  
  106. CURSOR c1 IS SELECT BUCH.ISBN FROM BUCH;
  107. c2 c1%ROWTYPE;
  108.  
  109. BEGIN
  110. OPEN c1;
  111.     LOOP
  112.    
  113.         FETCH c1 INTO c2;
  114.         EXIT WHEN c1%notfound;
  115.        
  116.         IF ins_barcode IS NOT NULL AND ins_isbn = c2.isbn THEN
  117.             EXECUTE IMMEDIATE 'INSERT INTO buch_kopien(BARCODE_ID, ISBN) values(' || ins_barcode || ', ' || ins_isbn || ')';
  118.             check_corr_val := 'Ihre Daten wurden korrekt eingetragen!';
  119.         END IF;
  120.    
  121.     END LOOP;
  122. CLOSE c1;
  123.  
  124. RETURN check_corr_val;
  125.    
  126.     EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
  127.         RAISE_APPLICATION_ERROR(-20001, 'Der Barcode ist schon vergeben! [' || SQLERRM || ']');
  128.     WHEN OTHERS THEN
  129.         RAISE_APPLICATION_ERROR(-20001, 'Ein Fehler ist Aufgetreten! [' || SQLERRM || ']');
  130. END;
  131.  
  132.  
  133. DECLARE
  134.     checker VARCHAR2(255) := '';
  135.    
  136.     isbn VARCHAR2(255) := '1-56592-335-9';
  137.     bar_code VARCHAR2(255) := '100000212';
  138. BEGIN
  139.     checker := f4(isbn, bar_code);
  140.     DBMS_OUTPUT.put_line(checker);
  141. END;
  142.  
  143.  
  144. SELECT COUNT(buch.isbn) FROM buch WHERE buch.isbn = '1-56592-335-9';
  145. INSERT INTO buch_kopien(BARCODE_ID, ISBN) VALUES('100000212', '1-56592-335-9');
  146.  
  147. --aufgabe buch no 5 'bücher auslesen'
  148.  
  149. CREATE OR REPLACE FUNCTION f5(counter IN NUMBER, titel IN VARCHAR2) RETURN NUMBER AS
  150.  
  151. n_buecher NUMBER := counter;
  152. titel_buch VARCHAR2(255) := titel;
  153. komplett_buecher NUMBER := 0;
  154. i_z NUMBER := 0;
  155.  
  156. CURSOR c1(tit VARCHAR2) IS SELECT BUCH.TITEL FROM BUCH WHERE BUCH.TITEL LIKE tit GROUP BY BUCH.TITEL;
  157. c2 c1%ROWTYPE;
  158.  
  159. BEGIN
  160.  
  161. EXECUTE IMMEDIATE 'SELECT count(*) from BUCH' INTO komplett_buecher;
  162.  
  163. OPEN c1(titel_buch);
  164.     LOOP
  165.         i_z := i_z + 1;
  166.         FETCH c1 INTO c2;
  167.         EXIT WHEN c1%notfound OR i_z = n_buecher;
  168.        
  169.         DBMS_OUTPUT.put_line('Titel: ' || c2.TITEL);
  170.        
  171.     END LOOP;
  172. CLOSE c1;
  173.  
  174. RETURN komplett_buecher;
  175. END;
  176.  
  177.  
  178. DECLARE
  179. zahl NUMBER := 5;
  180. wort VARCHAR2(255) := '%PL%';
  181. gesamt NUMBER := 0;
  182. BEGIN
  183. gesamt := f5(zahl, wort);
  184. DBMS_OUTPUT.put_line('Anzahl der Bücher: ' || gesamt);
  185. END;
Advertisement