Kyaria icon

BÜCHER [No4 ist Mist]

Kyaria | PRO | 05/01/18 03:41:47 PM UTC | 0 ⭐ | 7375 👁️ | Never ⏰ | []
PL/SQL |

4.52 KB

|

None

|

0 👍

/

0 👎

SET serveroutput ON;
 
--aufgabe buch no1 'Dicke Bücher'
CREATE OR REPLACE FUNCTION f1(zahl IN NUMBER) RETURN NUMBER AS
 
num_berd NUMBER := zahl;
zahl_2 NUMBER := 0;
 
BEGIN
 
    EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM buch WHERE anz_seiten > ' || num_berd INTO zahl_2;
    RETURN zahl_2;
 
END;
 
DECLARE
num_berd NUMBER := 0;
BEGIN
    num_berd := f1(500);
    DBMS_OUTPUT.put_line(num_berd);
END;
 
 
--aufgabe buch no2 'Meiste Kopien'
CREATE OR REPLACE FUNCTION f2(isbn OUT VARCHAR2) RETURN NUMBER AS
 
anz NUMBER := 0;
 
CURSOR c1 IS SELECT COUNT(*) anz_in_cur, buch_kopien.isbn FROM buch_kopien GROUP BY buch_kopien.isbn;
c2 c1%ROWTYPE;
 
BEGIN
OPEN c1;
    LOOP
            
            FETCH c1 INTO c2;
            EXIT WHEN c1%notfound;
            
            IF anz < c2.anz_in_cur THEN
                anz := c2.anz_in_cur;
                isbn := c2.isbn;
            END IF;
        
    END LOOP;
    
    RETURN anz;
CLOSE c1;
END;
 
 
DECLARE
isbn VARCHAR2(255) := '';
anz NUMBER := -1;
BEGIN
 
    anz := f2(isbn);
    DBMS_OUTPUT.put_line('Anzahl: ' || anz || ', ISBN: ' || isbn);
 
END;
 
--aufgabe buch no3 'Überfällige bücher'
 
CREATE OR REPLACE FUNCTION f3(datum IN DATE) RETURN NUMBER AS
 
check_this_date DATE := datum;
NAME_des_BUCHES VARCHAR2(255) := '';
num_bernd NUMBER := 0;
 
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;
    
c2 c1%ROWTYPE;
 
BEGIN
OPEN c1;
LOOP
 
    FETCH c1 INTO c2;
    EXIT WHEN c1%notfound;
    
    num_bernd := c2.count_youre_books;
    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;
    
    DBMS_OUTPUT.put_line('K_ID: ' || c2.AUSWEISNR || ', Vorname: ' || c2.vorname || ', Buch: ' || NAME_des_BUCHES || ', Termin: ' || c2.ENTLEIHENDE);
    
END LOOP;
CLOSE c1;
 
RETURN num_bernd;
END;
 
DECLARE
datum DATE := SYSDATE;
zahl NUMBER := 0;
BEGIN
zahl := f3(datum);
END;
 
--aufgabe buch no4 'buchkopien eintragen'
 
CREATE OR REPLACE FUNCTION f4(isbn IN VARCHAR2, bar_code IN VARCHAR2) RETURN VARCHAR2 AS
 
ins_isbn VARCHAR2(13) := isbn;
ins_barcode VARCHAR2(255) := bar_code;
check_corr_val VARCHAR2(255) := 'Ihre Daten wurden nicht korrekt eingetragen!';
 
CURSOR c1 IS SELECT BUCH.ISBN FROM BUCH;
c2 c1%ROWTYPE;
 
BEGIN
OPEN c1;
    LOOP
    
        FETCH c1 INTO c2;
        EXIT WHEN c1%notfound;
        
        IF ins_barcode IS NOT NULL AND ins_isbn = c2.isbn THEN
            EXECUTE IMMEDIATE 'INSERT INTO buch_kopien(BARCODE_ID, ISBN) values(' || ins_barcode || ', ' || ins_isbn || ')';
            check_corr_val := 'Ihre Daten wurden korrekt eingetragen!';
        END IF;
    
    END LOOP;
CLOSE c1;
 
RETURN check_corr_val;
    
    EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
        RAISE_APPLICATION_ERROR(-20001, 'Der Barcode ist schon vergeben! [' || SQLERRM || ']');
    WHEN OTHERS THEN
        RAISE_APPLICATION_ERROR(-20001, 'Ein Fehler ist Aufgetreten! [' || SQLERRM || ']');
END;
 
 
DECLARE
    checker VARCHAR2(255) := '';
    
    isbn VARCHAR2(255) := '1-56592-335-9';
    bar_code VARCHAR2(255) := '100000212';
BEGIN
    checker := f4(isbn, bar_code);
    DBMS_OUTPUT.put_line(checker);
END;
 
 
SELECT COUNT(buch.isbn) FROM buch WHERE buch.isbn = '1-56592-335-9';
INSERT INTO buch_kopien(BARCODE_ID, ISBN) VALUES('100000212', '1-56592-335-9');
 
--aufgabe buch no 5 'bücher auslesen'
 
CREATE OR REPLACE FUNCTION f5(counter IN NUMBER, titel IN VARCHAR2) RETURN NUMBER AS
 
n_buecher NUMBER := counter;
titel_buch VARCHAR2(255) := titel;
komplett_buecher NUMBER := 0;
i_z NUMBER := 0;
 
CURSOR c1(tit VARCHAR2) IS SELECT BUCH.TITEL FROM BUCH WHERE BUCH.TITEL LIKE tit GROUP BY BUCH.TITEL;
c2 c1%ROWTYPE;
 
BEGIN
 
EXECUTE IMMEDIATE 'SELECT count(*) from BUCH' INTO komplett_buecher;
 
OPEN c1(titel_buch);
    LOOP
        i_z := i_z + 1;
        FETCH c1 INTO c2;
        EXIT WHEN c1%notfound OR i_z = n_buecher;
        
        DBMS_OUTPUT.put_line('Titel: ' || c2.TITEL);
        
    END LOOP;
CLOSE c1;
 
RETURN komplett_buecher;
END;
 
 
DECLARE
zahl NUMBER := 5;
wort VARCHAR2(255) := '%PL%';
gesamt NUMBER := 0;
BEGIN
gesamt := f5(zahl, wort);
DBMS_OUTPUT.put_line('Anzahl der Bücher: ' || gesamt);
END;

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎