实验6 触发器与作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验6触发器与作业
姓名:学号:
网络工程班级:专业:2013/11/28 同期日:无组人:实验
【实验目的与要求】理解什么是触发器?掌握触发器的设计与使用?中完成定时作务
的方法掌握在Oracle?【实验内容与步骤】本实验中前面实验创建的触发器可能对后面的实验产生干扰,若出相关说明:现这种情况,请把前面触发器删除,再完成后面实验。建议每完成一个实验题后,即将该题相关的触发器删除,以免对后面实验产生干扰。
触发器创建与删除语法6.0
1.触发器的创建PL/SQL 触发器是一种在发生数据库事件时自动运行的语法如下:
触发事件触发时间 CREATE [OR REPLACE] TIGGER触发器名表名ON[FOR EACH ROW] BEGIN
pl/sql语句
END
.触发器的删除2DROP TRIGGER trigger_name
触发器基础6.1请阅读并理解以下程序代码,给出运行结果。以下程序展示的是触发器的基本使用方法,创建测试表1.--drop table employees;
create table employees(
number(5),
id
页15 共页1 第
name varchar2(30),
salary number(8,2),
job_id varchar2(20)
);
2.创建触发器
CREATE OR REPLACE TRIGGER secure_emp_1 --这里不能有IS
BEFORE INSERT ON employees --这里没有分号
BEGIN
IF (TO_CHAR (SYSDATE,'DY') IN ('星期六','星期天') OR
(TO_CHAR(SYSDATE,'HH24:MI') NOT BETWEEN '08:00' AND '18:00' )) THEN RAISE_APPLICATION_ERROR(-20500,'你只能在工作时间对表进行操作');
END IF;
END;
/
3.测试触发器
(1)--测试语句
insert into employees values (1,'a',2222,'aaaaa');
给出测试结果截图:
(2)将系统时间修改为周六,再Insert一条记录,给出并比较两次运行的结果。给出测试结果截图:
6.2使用触发器监控数据更新操作
阅读以下程序,理解程序功能,给出运行测试结果。
1.创建触发器
CREATE OR REPLACE TRIGGER secure_emp_2
BEFORE INSERT OR UPDATE OR DELETE ON employees
BEGIN
页15 共页2 第
--如果当前时间是周六或周日或者时间不在8:00-18:00之间
IF (TO_CHAR (SYSDATE,'DY') IN ('星期五','星期天') OR
(TO_CHAR(SYSDATE,'HH24:MI') NOT BETWEEN '08:00' AND '18:00' )) THEN
IF DELETING THEN
RAISE_APPLICATION_ERROR (-20502,'你只能在工作时间删除员工表的数据');
ELSIF INSERTING THEN
RAISE_APPLICATION_ERROR (-20500,'你只能在工作时间插入员工表的数据.');
ELSIF UPDATING ('SALARY') THEN
RAISE_APPLICATION_ERROR (-20503,'你只能在工作时间更新员工表的数据');
ELSE
RAISE_APPLICATION_ERROR (-20504,'你只能在工作事件操作员工表的数据.');
END IF;
END IF;
END;
/
2.运行测试
分别运行以下测试语句,给出运行结果。并理解为什么会有这样的结果。
insert into employees values (1,'a',2222,'AD_PRES');
insert into employees values (2,'b',2222,'AD_VP');
给出测试结果截图:
delete from employees;
给出测试结果截图:
update employees set salary=3000;
给出测试结果截图:
页15 共页3 第
6.3在insert或update中使用:new
阅读并理解以下程序,理解其功能,给出运行测试结果。
1.创建触发器
--在insert或update中使用:new--
CREATE OR REPLACE TRIGGER restrict_salary
BEFORE INSERT OR UPDATE OF salary ON employees
FOR EACH ROW
BEGIN
--插入和修改可以使用:new来访问新的数据,修改也可以使用:old来访问旧的数据IF NOT (:NEW.job_id IN ('AD_PRES', 'AD_VP'))
AND :NEW.salary > 15000
THEN
RAISE_APPLICATION_ERROR (-20202,'员工不能赚到这么多薪水');
END IF;
END;
2.运行测试
--测试语句
insert into employees values (1,'a',20000,'AD_PRES');
insert into employees values (2,'b',20000,'AD_VPs');
update employees set salary=30000 ,job_id='xxxx' where name='a';
给出运行结果:
页15 共页4 第