Week3

download Week3

If you can't read please download the document

description

Good Reference

Transcript of Week3

//Week3//1.drop trigger courseCheck//create trigger courseCheckafter insert on STUDENTfor each rowbegin 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_number) 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-not.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 prereqCheckafter insert on GRADE_REPORTfor each rowbegin 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//