概述
看代码前先了解一下思路,这样看的更明白。
由题目分析:
我们把
sno和cno都存在当作A,其他情况当作a;
grade在0-100之间当作B,不在这个区间当作b;
通过排列组合有四种结果,分别为AB,Ab,aB,ab。
其中只有AB触发触发器后不会报错,其他三种组合都会报错。
注意! 这里我们定义俩个变量,通过控制d,b的值来控制可能出现的排列组合类型。
代码如下:
create or replace trigger tryc6
before insert on sc
for each row
declare
d number;
b number;
begin
d:=1;
b:=0;
if d=1 then
for m in (select sno,cno from stu,course) loop
if :new.sno = m.sno or :new.sno = m.cno then b:=1;
if :new.grade < 0 or :new.grade > 100 then
raise_application_error(-20003,'成绩超出取值范围');
end if;
elsif :new.grade < 0 or :new.grade >100 then d:=2;
else d:=3;
end if;
end loop;
end if;
if d=3 and b!=1 then
raise_application_error(-20002,'学号或课程号不存在');
end if;
if d=2 and b!=1 then
raise_application_error(-20001,'学号或课程号不存在且成绩超出范围');
end if;
end tryc6;
结果如下:
最后
以上就是寒冷画笔为你收集整理的Oracle触发器实验十-创建一个insert触发器,当在sc表中插入一条新记录时,sno和cno必须是已经存在的学号和课程号,且grade应该在0----100之间。的全部内容,希望文章能够帮你解决Oracle触发器实验十-创建一个insert触发器,当在sc表中插入一条新记录时,sno和cno必须是已经存在的学号和课程号,且grade应该在0----100之间。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复