本文主要是介绍Oracle触发器实验十-创建一个insert触发器,当在sc表中插入一条新记录时,sno和cno必须是已经存在的学号和课程号,且grade应该在0----100之间。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
看代码前先了解一下思路,这样看的更明白。
由题目分析:
我们把
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之间。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!