Files
DBI/Uebungszettel_12.sql
2025-02-27 13:52:05 +01:00

204 lines
4.2 KiB
SQL

--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;
/