实验6 触发器与作业

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 第

相关文档
最新文档