Sei sulla pagina 1di 3

//Week3

//1.
drop trigger courseCheck//
create trigger courseCheck
after insert
on STUDENT
for each row
begin
DECLARE done BOOLEAN DEFAULT 0;
DECLARE cnum varchar(10);
DECLARE course CURSOR
for
select distinct C.Course_number
from COURSE C left join PREREQUISITE P
on C.Course_number = P.Course_number
where P.Prerequisite_number is NULL;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN course;
curLoop : LOOP
FETCH course INTO cnum;
IF (done)
THEN
LEAVE curLoop;
END IF;
insert into GRADE_REPORT (Student_number,Section_identifier,Grade,Course_n
umber)
select new.Student_number,Section_identifier,'K',cnum
from SECTION S
where S.Course_number=cnum order by Rand() LIMIT 1;
END LOOP curLoop;
CLOSE course;
end//
//THIS DOES NOT WORK
//Refer : http://rpbouman.blogspot.in/2005/09/why-repeat-and-while-are-usually-n
ot.html
//
REPEAT
//
FETCH course INTO cnum;
//
insert into GRADE_REPORT (Student_number,Section_identifier,Grade,Course
_number)
//
select new.Student_number,Section_identifier,'K',cnum
//
from SECTION S
//
where S.Course_number=cnum order by Rand() LIMIT 1;
//
UNTIL done
//
END REPEAT;
//2.
drop trigger prereqCheck//
create trigger prereqCheck
after insert

on GRADE_REPORT
for each row
begin
DECLARE done BOOLEAN DEFAULT 0;
DECLARE pnum varchar(10);
DECLARE g varchar(1);
DECLARE msg varchar(255);
DECLARE grade CURSOR
for
select Prerequisite_number
from PREREQUISITE P
where P.Course_number = new.Course_number;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN grade;
currLoop : LOOP
FETCH grade INTO pnum;
set g='I';
IF (done) then
leave currLoop;
END IF;
select G1.Grade INTO g
from GRADE_REPORT G1
where G1.Student_number = new.Student_number AND G1.Course_number = pnum;
IF(g='B' OR g='C' OR g='D' OR g='I') then
set msg = concat('Pre-requisite cousre criteria NOT Satisfied');
signal sqlstate '45000' set message_text=msg;
END IF;
END LOOP currLoop;
CLOSE grade;
end//
//Exceptional Handling from http://stackoverflow.com/questions/24/throw-an-error
-in-a-mysql-trigger
//@RuiDC
//3.
create procedure updateGrade()
BEGIN
DECLARE done BOOLEAN DEFAULT 0;
DECLARE g varchar(1);
DECLARE sn int;
DECLARE si int;
DECLARE cn varchar(10);
DECLARE upgrade CURSOR
for
select Student_number,Section_identifier,Grade,Course_number
from Grade_Report;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN upgrade;
REPEAT

FETCH upgrade into sn,si,g,cn;


if g='O'
then set g='A';
elseif g='A'
then set g='B';
elseif g='B'
then set g='C';
elseif g='C'
then set g='D';
else
set g='U';
end if;
update GRADE_REPORT
set Grade=g
where Student_number=sn AND Section_identifier=si AND Course_number=cn;
UNTIL done
END REPEAT;
CLOSE upgrade;
END//

Potrebbero piacerti anche