修改成绩
修改学号
删除
练习 3
插入或修改(修改课程号时)选课信息时,若该课程的选课人数已满,则不允许操作,并抛出相应的错误提示。
create or replace package pk_trigger is
tr_scnum smallint;--sc_number表中的当前选课数量 tr_sname student.sname%type;
tr_cno sc.cno%type;--记录正在更新的课程号 tr_newsno sc.sno%type;--记录更新后的学生号 tr_oldsno sc.sno%type;--记录更新前的学生号 end pk_trigger;
create or replace trigger tr_sc_BR_IU before insert or update on sc for each row begin
pk_trigger.tr_cno:=:new.cno; end;
create or replace trigger tr_sc_AL_IU after insert or update on sc declare
v_snumber smallint; v_scnt smallint; begin
--查询课程最大选课人数
select snumber into v_snumber from course where cno=pk_trigger.tr_cno; --查询当前选课人数
select count(sno) into v_scnt from sc where cno=pk_trigger.tr_cno; --如果选课人数已满,则抛出相应错误提示 if(v_snumber < v_scnt) then
raise_application_error(-20008,'课程'||trim(pk_trigger.tr_cno)||'选课人数已满!'); end if; end; 测试结果: