实验十触发器.docx
- 文档编号:29858643
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:14
- 大小:352.25KB
实验十触发器.docx
《实验十触发器.docx》由会员分享,可在线阅读,更多相关《实验十触发器.docx(14页珍藏版)》请在冰豆网上搜索。
实验十触发器
实验十触发器
一、实验目的
1.掌握ORACLE触发器操作
二、实验环境
一台PC机,安装widowsxp操作系统,oracle10g或11g数据库软件。
三、实验内容
1、参照实验三,先创建如下的Customer表(客户表),建立订单表Order(cno为外码),并自己加入测试数据。
客户表
createtablecustomer
(cnovarchar2(5)primarykey,
cnamevarchar2(20),
companyvarchar2(30),
cityvarchar2(20),
telvarchar2(15)
);
createtableorders
(onovarchar2(5)primarykey,
order_datedate,
cnovarchar2(5),
freightinteger,
shipment_datedate,
cityvarchar2(20),
payment_tnovarchar2
(1),
statusvarchar2(20)
);
测试数据:
insertintocustomervalues(001,'scott','天猫','福州',546412);
insertintocustomervalues(002,'jones','移动','福州',456215);
insertintoordersvalues(1,'13-5月-01',001,10,'13-6月-15','福建',1,'已发');
insertintoordersvalues(7,'13-5月-10',002,30,'13-6月-15','福建',2,'已发');
2.在Customer表创建一个触发器cus_tri,其功能是向Customer表插入数据时必须在工作时间(周一至周五,08:
00到17:
00),否则给出错误提示“只能在工作时间对表操作!
”。
createorreplacetriggercus_tri
beforeinsert
oncustomer
begin
ifto_char(sysdate,'hh24')<8orto_char(sysdate,'hh24')>17
orto_char(sysdate,'day')in('星期六','星期日')
thenraise_application_error(-20001,'只能在工作时间内插入数据!
!
!
');
endif;
end;
插入数据
insertintocustomervalues(003,'hello','沃尔玛','福州',852151);
查询结果:
Select*fromcustomer;
3在Order表上创建触发器ord_tri,其功能是在插入和更新Order表时,订单代号为‘1’或‘5’的,运货费才能大于50元,否则给出提示“运货费过多!
”。
createorreplacetriggerord_tri
beforeupdateorinsert
onorders
foreachrow
begin
if:
new.ononotin(1,5)and:
new.freight>50
thenraise_application_error(-20002,'运货费过多');
endif;
end;
插入数据测试
insertintoordersvalues(4,'13-6月-13',002,100,'15-6月-13','福州',2,'未发');
insertintoordersvalues(4,'13-6月-13',002,45,'15-6月-13','福州',2,'未发');
显示结果
select*fromorders;
4.在在Order表上创建触发器,当要删除订单号位1或5号时,给出提示“此订单不能删!
”。
(自己加入数据,给出测试)
createorreplacetriggerord_tri
beforedelete
onorders
foreachrow
begin
if:
old.onoin(1,5)
thenraise_application_error(-20003,'此订单不能删除!
!
!
');
endif;
end;
测试
deleteorderswhereono=4;
deleteorderswhereono=1;
5.先创建由两个表组成的视图c_view,列包含客户代号,姓名,订单代号,订购日期。
向视图c_view插入一行数据,看是否成功。
不成功,创建替代触发器使之成功。
createorreplaceviewc_view
(客户代号,姓名,订购代号,订购日期)as
selecto,cname,ono,order_date
fromcustomerc,orderso
whereo=o;
插入:
insertintoc_viewvalues(121,'king',8,'05-6月-13');
createorreplacetriggert_view
insteadofinsertonc_view
begin
insertintocustomer(cno,cname)values(:
new.客户代号,:
new.姓名);
insertintoorders(cno,ono,order_date)values(:
new.客户代号,:
new.订购代号,:
new.订购日期);
end;
插入:
insertintoc_viewvalues(121,'king',8,'05-6月-13');
6创建用户事件触发器log_on,记录登入和退出数据库模式(用户)事件。
createtabletab_log_on
(log_uservarchar2(10),
log_datedate);
createorreplacetriggerlog_on
afterlogon
onschema
begin
insertintotab_log_on
values(user,sysdate);
end;
四、实验步骤
五、实验小结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 触发器