From fc975beb74ebf7cf10522087df6b1d8c5e9953a2 Mon Sep 17 00:00:00 2001 From: Tim Kainz Date: Thu, 27 Feb 2025 13:52:05 +0100 Subject: [PATCH] =?UTF-8?q?added=20=C3=9Cz=2012?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Uebungszettel_12.sql | 204 +++++++++++++++++++++++++++++++++++++++++++ scripts_12.sql | 59 +++++++++++++ 2 files changed, 263 insertions(+) create mode 100644 Uebungszettel_12.sql create mode 100644 scripts_12.sql diff --git a/Uebungszettel_12.sql b/Uebungszettel_12.sql new file mode 100644 index 0000000..bc482a7 --- /dev/null +++ b/Uebungszettel_12.sql @@ -0,0 +1,204 @@ +--Aufgabe 12.1 +CREATE OR REPLACE PACKAGE manage_students +AS + v_current_date DATE; + + PROCEDURE find_sname + (i_student_id IN student.student_id%TYPE, + o_first_name OUT student.first_name%TYPE, + o_last_name OUT student.last_name%TYPE + ); + + PROCEDURE display_student_count; + + FUNCTION id_is_good + (i_student_id IN student.student_id%TYPE) + RETURN BOOLEAN; +END manage_students; +/ +-- a) Es wird eine Package SPECIFICATION gemacht. + +DECLARE + v_first_name student.first_name%TYPE; + v_last_name student.last_name%TYPE; +BEGIN + manage_students.find_sname(125, v_first_name, v_last_name); + DBMS_OUTPUT.PUT_LINE(v_first_name||' '||v_last_name); +END; +/ +-- b) Es kommt ein Error da noch kein Body für manage_students gemacht wurde. + + +--Aufgabe 12.2 +CREATE OR REPLACE PACKAGE BODY manage_students +AS + PROCEDURE find_sname + (i_student_id IN student.student_id%TYPE, + o_first_name OUT student.first_name%TYPE, + o_last_name OUT student.last_name%TYPE) + IS + v_student_id student.student_id%TYPE; + BEGIN + SELECT first_name, last_name + INTO o_first_name, o_last_name + FROM student + WHERE student_id = i_student_id; + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('Error in finding student_id: '||v_student_id); + END find_sname; + + FUNCTION id_is_good + (i_student_id IN student.student_id%TYPE) + RETURN BOOLEAN + IS + v_id_cnt number; + BEGIN + SELECT COUNT(*) + INTO v_id_cnt + FROM student + WHERE student_id = i_student_id; + + RETURN 1 = v_id_cnt; + EXCEPTION + WHEN OTHERS THEN + RETURN FALSE; + END id_is_good; +END manage_students; +/ + +-- a) der Body für die vorherige SPECIFICATION manage_students wird erstellt. + +--b) +DECLARE + o_first_name student.first_name%TYPE; + o_last_name student.last_name%TYPE; + v_return_value BOOLEAN; +BEGIN + manage_students.find_sname(5, o_first_name, o_last_name); + v_return_value := manage_students.id_is_good(101); +END; +/ + + +--Aufgabe 12.3 +CREATE OR REPLACE PACKAGE BODY manage_students +AS + PROCEDURE find_sname + (i_student_id IN student.student_id%TYPE, + o_first_name OUT student.first_name%TYPE, + o_last_name OUT student.last_name%TYPE) + IS + v_student_id student.student_id%TYPE; + BEGIN + SELECT first_name, last_name + INTO o_first_name, o_last_name + FROM student + WHERE student_id = i_student_id; + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('Error in finding student_id: '||v_student_id); + END find_sname; + + FUNCTION id_is_good + (i_student_id IN student.student_id%TYPE) + RETURN BOOLEAN + IS + v_id_cnt number; + BEGIN + SELECT COUNT(*) + INTO v_id_cnt + FROM student + WHERE student_id = i_student_id; + + RETURN 1 = v_id_cnt; + EXCEPTION + WHEN OTHERS THEN + RETURN FALSE; + END id_is_good; + + FUNCTION get_num_students + RETURN NUMBER + IS + v_id_cnt number; + BEGIN + SELECT COUNT(*) + INTO v_id_cnt + FROM student; + + RETURN v_id_cnt; + END get_num_students; + + PROCEDURE display_student_count + IS + BEGIN + DBMS_OUTPUT.PUT_LINE(get_num_students); + END display_student_count; + +END manage_students; +/ + +BEGIN + manage_students.display_student_count; +END; +/ + +--Aufgabe 12.4 +CREATE OR REPLACE PACKAGE BODY manage_students +AS + PROCEDURE find_sname + (i_student_id IN student.student_id%TYPE, + o_first_name OUT student.first_name%TYPE, + o_last_name OUT student.last_name%TYPE) + IS + v_student_id student.student_id%TYPE; + BEGIN + SELECT first_name, last_name + INTO o_first_name, o_last_name + FROM student + WHERE student_id = i_student_id; + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('Error in finding student_id: '||v_student_id); + END find_sname; + + FUNCTION id_is_good + (i_student_id IN student.student_id%TYPE) + RETURN BOOLEAN + IS + v_id_cnt number; + BEGIN + SELECT COUNT(*) + INTO v_id_cnt + FROM student + WHERE student_id = i_student_id; + + RETURN 1 = v_id_cnt; + EXCEPTION + WHEN OTHERS THEN + RETURN FALSE; + END id_is_good; + + FUNCTION get_num_students + RETURN NUMBER + IS + v_id_cnt number; + BEGIN + SELECT COUNT(*) + INTO v_id_cnt + FROM student; + + RETURN v_id_cnt; + END get_num_students; + + PROCEDURE display_student_count + IS + BEGIN + DBMS_OUTPUT.PUT_LINE(get_num_students); + END display_student_count; + +BEGIN + v_current_date := trunc(sysdate, 'DD'); + +END manage_students; +/ \ No newline at end of file diff --git a/scripts_12.sql b/scripts_12.sql new file mode 100644 index 0000000..a73f0a3 --- /dev/null +++ b/scripts_12.sql @@ -0,0 +1,59 @@ +-- section 1 +CREATE OR REPLACE PACKAGE manage_students +AS + PROCEDURE find_sname + (i_student_id IN student.student_id%TYPE, + o_first_name OUT student.first_name%TYPE, + o_last_name OUT student.last_name%TYPE + ); + + FUNCTION id_is_good + (i_student_id IN student.student_id%TYPE) + RETURN BOOLEAN; +END manage_students; +/ + +DECLARE + v_first_name student.first_name%TYPE; + v_last_name student.last_name%TYPE; +BEGIN + manage_students.find_sname(125, v_first_name, v_last_name); + DBMS_OUTPUT.PUT_LINE(v_first_name||' '||v_last_name); +END; + +-- section 2 +CREATE OR REPLACE PACKAGE BODY manage_students +AS + PROCEDURE find_sname + (i_student_id IN student.student_id%TYPE, + o_first_name OUT student.first_name%TYPE, + o_last_name OUT student.last_name%TYPE) + IS + v_student_id student.student_id%TYPE; + BEGIN + SELECT first_name, last_name + INTO o_first_name, o_last_name + FROM student + WHERE student_id = i_student_id; + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('Error in finding student_id: '||v_student_id); + END find_sname; + + FUNCTION id_is_good + (i_student_id IN student.student_id%TYPE) + RETURN BOOLEAN + IS + v_id_cnt number; + BEGIN + SELECT COUNT(*) + INTO v_id_cnt + FROM student + WHERE student_id = i_student_id; + + RETURN 1 = v_id_cnt; + EXCEPTION + WHEN OTHERS THEN + RETURN FALSE; + END id_is_good; +END manage_students; \ No newline at end of file