67 lines
2.1 KiB
MySQL
67 lines
2.1 KiB
MySQL
|
set serveroutput on size 32000
|
||
|
|
||
|
-- Print the names of students taking a specific class.
|
||
|
CREATE OR REPLACE PROCEDURE students_in_class(class_name IN Enrolled.cname%TYPE) AS
|
||
|
stu_number Enrolled.snum%TYPE;
|
||
|
stu_name Student.sname%TYPE;
|
||
|
CURSOR enr_cur IS SELECT snum FROM Enrolled WHERE cname=class_name;
|
||
|
enr_rec enr_cur%ROWTYPE;
|
||
|
BEGIN
|
||
|
FOR enr_rec IN enr_cur LOOP
|
||
|
stu_number := enr_rec.snum;
|
||
|
SELECT sname INTO stu_name FROM Student WHERE snum=stu_number;
|
||
|
dbms_output.put_line(stu_name);
|
||
|
END LOOP;
|
||
|
END students_in_class;
|
||
|
/
|
||
|
|
||
|
-- Insert a given faculty into the database.
|
||
|
-- CREATE OR REPLACE PROCEDURE insert_faculty(faculty IN Faculty%ROWTYPE) AS
|
||
|
CREATE OR REPLACE PROCEDURE insert_faculty(fid IN Faculty.fid%TYPE, fname IN Faculty.fname%TYPE, deptid IN Faculty.deptid%TYPE) AS
|
||
|
BEGIN
|
||
|
-- INSERT INTO Faculty VALUES faculty;
|
||
|
INSERT INTO Faculty VALUES(fid, fname, deptid);
|
||
|
END insert_faculty;
|
||
|
/
|
||
|
|
||
|
-- For each department, print the average age of students in that department.
|
||
|
CREATE OR REPLACE PROCEDURE average_age_by_dept AS
|
||
|
avg_age NUMBER;
|
||
|
num_students NUMBER;
|
||
|
dept Department.dname%TYPE;
|
||
|
CURSOR dept_cur IS SELECT DISTINCT deptid FROM Student;
|
||
|
CURSOR age_cur(did IN Student.deptid%TYPE) IS SELECT age FROM Student WHERE deptid = did;
|
||
|
dept_rec dept_cur%ROWTYPE;
|
||
|
age_rec age_cur%ROWTYPE;
|
||
|
BEGIN
|
||
|
FOR dept_rec IN dept_cur LOOP
|
||
|
avg_age := 0;
|
||
|
num_students := 0;
|
||
|
FOR age_rec IN age_cur(dept_rec.deptid) LOOP
|
||
|
avg_age := avg_age + age_rec.age;
|
||
|
num_students := num_students + 1;
|
||
|
END LOOP;
|
||
|
avg_age := avg_age / num_students;
|
||
|
SELECT dname
|
||
|
INTO dept
|
||
|
FROM Department
|
||
|
WHERE deptid = dept_rec.deptid;
|
||
|
dbms_output.put_line(dept || ' ' || avg_age);
|
||
|
END LOOP;
|
||
|
END average_age_by_dept;
|
||
|
/
|
||
|
|
||
|
DELETE FROM Faculty F WHERE F.fname = 'Adams';
|
||
|
|
||
|
BEGIN
|
||
|
students_in_class('ENG40000');
|
||
|
students_in_class('CS448');
|
||
|
students_in_class('STAT11000');
|
||
|
insert_faculty(1100,'Adams',66);
|
||
|
average_age_by_dept;
|
||
|
END;
|
||
|
/
|
||
|
|
||
|
SELECT * FROM Faculty;
|
||
|
|