create table stuInfo(
stuNo varchar2(8) not null primary key,
stuName varchar2(10) not null,
stuSex varchar2(2) not null,
stuAge number(6) not null,
stuSeat number(6) not null,
strAddress varchar2(255) default('地址不详')
)
insert into stuInfo(stuNo, stuName, stuSex, stuAge,stuSeat,strAddress)
select 's25301', '张秋丽', '男', 18,1, '北京海淀' from dual union
select 's25303', '李斯文', '女', 22,2, '河阳洛阳' from dual union
select 's25302', '李文才', '男', 85, 3,'地址不详' from dual union
select 's25304', '欧阳俊雄', '男', 28, 4,'新疆' from dual union
select 's25318', '梅超风', '女', 23, 5,'地址不详' from dual union
select 's25322', '张扬a', '男', 18,1, '北京海淀' from dual
create table stuMarks(
ExamNo varchar2(7) not null primary key,
stuNo varchar2(6) not null references stuInfo(stuNo),
writtenExam number(6) null,
LabExam number(6) null
)
insert into stuMarks(ExamNo, stuNo, writtenExam, LabExam)
select 's271811', 's25303', 93, 59 from dual union
select 's271813', 's25302', 63, 91 from dual union
select 's271816', 's25301', 90, 83 from dual union
select 's271817', 's25318', 63, 53 from dual
create or replace trigger 触发器名 --触发器名
after insert --后触发器,而且是增加类型触发器
on 表名 --触发器所依赖的表
for each row --行级触发器
begin
if :new.字段 = 0 then--触发触发器的条件
dbms_output.put_line('警告:已插入记录,但数量为零');
raise_application_error(-20018,'警告:已插入记录,但数量为零!');
--抛出异常,-20018是错误编码,范围是-20000到-21000。
end if;
end;
create or replace trigger stuName
after delete
on stuinfo
for each row
begin
if :old.stuname='李斯文' then
raise_application_error(-20018,'该学生不能删除!');
end if;
end;
李斯文不能删除,张三不能增加,梅超风不能修改。
create or replace trigger tname
after delete or insert or update
on stuinfo
for each row
begin
if deleting then--删除
--从老表(:old)中获取删除的学生的名字并进行判断
if :old.stuname='李斯文'then
raise_application_error(-20018,'该学生不能删除!');
end if;
elsif inserting then--增加
--从新表(:new)中获取增加的学生的名字并进行判断
if :new.stuname='张三' then
raise_application_error(-20019,'该学生不能要!');
end if;
elsif updating then--修改
--从老表(:old)中获取要修改的学生的名字并进行判断
if :old.stuname='梅超风' then
raise_application_error(-20020,'该学生不能修改!');
end if;
end if;
end;
删除学生的同时自动删除其成绩。
create or replace trigger tname
after delete
on stuinfo
for each row
declare --定义变量来保存要删除的学号(也可不定义)
sno varchar2(10);
begin
--获取删除的学生的学号
sno:=:old.stuno;
delete from stumarks where stuno=:old.stuno; --(或者写stuno=sno)
end;
create sequence sname_01; --创建序列
–创建触发器
create or replace trigger tname
before insert
on 表名
for each row
begin
:new.sid:=sname_01.nextval;
end;
创建表
create table tb1(
shid number,
shName varchar2(10) not null
)
create sequence se1; --创建序列
--创建触发器
create or replace trigger tname
before insert
on tb1
for each row
begin
:new.sid:=se1.nextval;
end;