128 lines
3.0 KiB
SQL
128 lines
3.0 KiB
SQL
-- Aufgabe 6.1
|
|
DECLARE
|
|
vr_zip ZIPCODE%ROWTYPE;
|
|
|
|
BEGIN
|
|
SELECT *
|
|
INTO vr_zip
|
|
FROM zipcode
|
|
WHERE rownum < 2;
|
|
|
|
DBMS_OUTPUT.PUT_LINE('City: '||vr_zip.city);
|
|
DBMS_OUTPUT.PUT_LINE('State: '||vr_zip.state);
|
|
DBMS_OUTPUT.PUT_LINE('Zip: '||vr_zip.zip);
|
|
END;
|
|
/
|
|
|
|
-- Es wird die Stadt, der State und die Postleitzahl vom ersten Datensatz in der zipcode Tabelle angezeigt.
|
|
|
|
-- Aufgabe 6.2
|
|
DECLARE
|
|
CURSOR c_zip IS
|
|
SELECT *
|
|
FROM zipcode;
|
|
vr_zip ZIPCODE%ROWTYPE;
|
|
BEGIN
|
|
OPEN c_zip;
|
|
LOOP
|
|
FETCH c_zip INTO vr_zip;
|
|
EXIT WHEN c_zip%NOTFOUND;
|
|
DBMS_OUTPUT.PUT_LINE(vr_zip.zip || vr_zip.city || vr_zip.state);
|
|
END LOOP;
|
|
CLOSE c_zip;
|
|
END;
|
|
/
|
|
|
|
-- Aufgabe 6.3
|
|
DECLARE
|
|
CURSOR c_student_name IS
|
|
SELECT *
|
|
FROM STUDENT
|
|
WHERE rownum <= 5;
|
|
vr_student STUDENT%ROWTYPE;
|
|
BEGIN
|
|
OPEN c_student_name;
|
|
LOOP
|
|
FETCH c_student_name INTO vr_student;
|
|
EXIT WHEN c_student_name%NOTFOUND;
|
|
DBMS_OUTPUT.PUT_LINE('Student name: ' || vr_student.FIRST_NAME || ' ' || vr_student.LAST_NAME);
|
|
END LOOP;
|
|
CLOSE c_student_name;
|
|
END;
|
|
/
|
|
|
|
|
|
-- Aufgabe 6.4
|
|
-- EXIT WHEN c_student%NOTFOUND;
|
|
|
|
-- DBMS_OUTPUT.PUT_LINE('STUDENT ID : '||v_sid);
|
|
-- END LOOP;
|
|
|
|
-- CLOSE c_student;
|
|
|
|
-- EXCEPTION
|
|
-- WHEN OTHERS THEN
|
|
-- IF c_student%ISOPEN THEN
|
|
-- CLOSE c_student;
|
|
-- END IF;
|
|
-- END;
|
|
--/
|
|
-- a): %NOTFOUND -> Prüft ob keine weiteren Einträge gefunden werden. %ISOPEN -> Prüft ob akutell noch der Cursor offen ist.
|
|
-- b):
|
|
DECLARE
|
|
CURSOR c_student IS
|
|
SELECT student_id
|
|
FROM student;
|
|
v_sid student.student_id%TYPE;
|
|
BEGIN
|
|
OPEN c_student;
|
|
LOOP
|
|
FETCH c_student INTO v_sid;
|
|
EXIT WHEN c_student%NOTFOUND;
|
|
DBMS_OUTPUT.PUT_LINE('Student Id: '||v_sid);
|
|
END LOOP;
|
|
CLOSE c_student;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
IF c_student%ISOPEN THEN
|
|
CLOSE c_student;
|
|
END IF;
|
|
RAISE;
|
|
END;
|
|
/
|
|
|
|
-- Aufgabe 6.5
|
|
DECLARE
|
|
CURSOR c_student IS
|
|
SELECT student_id, first_name, last_name, (SELECT COUNT(*) FROM enrollment e WHERE e.student_id = s.student_id) AS class_count
|
|
FROM student s
|
|
WHERE student_id < 110;
|
|
vr_student c_student%ROWTYPE;
|
|
BEGIN
|
|
OPEN c_student;
|
|
LOOP
|
|
FETCH c_student INTO vr_student;
|
|
EXIT WHEN c_student%NOTFOUND;
|
|
DBMS_OUTPUT.PUT_LINE('Student INFO: ID ' || vr_student.student_id || ' is ' || vr_student.first_name || ' ' || vr_student.last_name || ' is enrolled in ' || vr_student.class_count || ' classes.');
|
|
END LOOP;
|
|
CLOSE c_student;
|
|
END;
|
|
/
|
|
|
|
-- Aufgabe 6.6
|
|
DECLARE
|
|
CURSOR c_group_discount IS
|
|
SELECT co.course_no, co.cost
|
|
FROM course co
|
|
WHERE (SELECT COUNT(*) FROM enrollment e
|
|
JOIN section s ON e.section_id = s.section_id
|
|
WHERE s.course_no = co.course_no) >= 8;
|
|
BEGIN
|
|
FOR r_group_discount IN c_group_discount LOOP
|
|
UPDATE course
|
|
SET cost = cost * 0.95
|
|
WHERE course_no = r_group_discount.course_no;
|
|
END LOOP;
|
|
END;
|
|
/
|
|
SELECT 'Course No: ' || course_no || ', Cost: ' || cost FROM Course; |