实验6 触发器个人实验报告

-- 1.利用触发器实现对用户表修改的字段其原始内容和修改时间自动记录到record表。
-- <1.1>首先创建要记录内容的表 record,共有两个个字段:
Create table record(
  content varchar2 (100), --修改内容
  rtime timestamp --修改时间
)
-- <1.2>对 emp 表创建一个触发器
Create or replace trigger update_emp_trigger
after update on emp
for each row
begin
Insert into record values('执行update前数据是empno='||:old.empno||',ename='||:old.ename||'job='||:old.job||',deptno='||:old.deptno,sysdate);
end update_emp_trigger;
-- <1.3>验证触发器
update emp set ename='wancgfang' where empno='7499';
commit;
-- <1.4>查询 record 表
select * from record;


--2.创建触发器t_up_sc,当修改emp表中的sal列和comm列时,如果修改后的值小于原始值,则不予修改。验证触发器。
create or replace trigger t_up_sc
before update on emp
for each row
begin
  if :old.sal > :new.sal or :old.comm > :new.comm then
    raise_application_error(-20001,'修改后的值小于原始值,则不予修改');
  end if;
end;
-- <2.1>验证触发器
select * from emp where empno='7499';
update emp set sal=2000, comm=100 where empno='7499';
commit;


-- 3.创建触发器t_dept,以保证每天晚上10点到早上6点不允许对dept表进行操作。验证触发器。
create or replace trigger t_dept
before insert or delete or update on dept
begin
  if(to_number(to_char(sysdate,'HH24')) >= 22 or to_number(to_char(sysdate,'HH24')) <= 6) then
    raise_application_error(-20002,'每天晚上10点到早上6点不允许对dept表进行操作');
  end if;
end;
-- <3.1>验证触发器
select * from dept;
delete from dept where deptno=10;


--4. 创建触发器t_up_de_dept,当从dept表中删除部门时,
--   从emp表中删除相应部门的员工信息;当修改dept表中部门编号时,
--   同时修改emp表中的部门编号。验证触发器。
create or replace trigger t_up_de_dept
after delete or update on dept
for each row
begin
  if deleting then
      delete from emp where deptno = :old.deptno;
   end if;
   if updating then
      update emp set deptno=:new.deptno where empno in (select e.empno from emp e where e.deptno = :old.deptno);
   end if;
end;
--18102108李玉田
-- <4.1>验证触发器
select * from emp;
select * from dept;
update dept set deptno=31 where dname ='SALES';
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实验触发器实验报告 [实验目的] 1. 理解Oracle触发器的种类和用途 2. 掌握行级触发器的编写 [预备知识] 1. PL/SQL程序设计 [实验原理] 1. 建立触发器 CREATE [OR REPLACE] TRIGGER <触发器名> BEFORE"AFTER INSERT"DELETE"UPDATE OF <列名> ON <表名> [FOR EACH ROW] WHEN (<条件>) <PL/SQL 程序块> ON 子句中的名称识别与数据库触发器关联的数据库表 触发器事件指定了影响表的 SQL DML 语句 ( INSERT、 DELETE 或 UPDATE) AFTER 指定了触发器在处理完成后触发 BEFORE 指定了触发器在处理完成前触发 默认情况下,触发器每个表触发一次 FOR EACH ROW 选项指定触发器每行触发一次(即触发器为行级触发器) 要使触发器触发,WHEN 子句中布尔型表达式的值必须判定为 TRUE 可以将 REPLACE 添加到 CREATE 语句以自动删除和重建触发器 2. 行级触发器中引用表数据 在行级触发器中,使用伪记录来表示旧数据:old和新数据:new 引用示例::new.customer_name, :old.customer_name 3. 行级触发器中的谓词 在一个多条件触发的触发器中,使用谓词可以区分当前触发的操作的类型:inserting, updating,deleting。 示例: IF Inserting THEN 语句 ; END IF; IF Updating THEN 语句 ; END IF; IF Deleting THEN 语句 ; END IF; 4. 触发器的限制 SELECT 语句必须是 SELECT INTO 语句或内部游标声明。 行级触发器不可以对触发表进行查询,包括其调用的子过程中。 不允许 DDL 声明和事务控制语句 。 如果由触发器调用存储子过程,则存储子程序不能包括事务控制语句 。 :old 和 :new 值的类型不能是 LONG 和 LONG RAW。 [实验内容] 1. 给Customer表增加一列Savings,类型为int,来存放每个顾客的存款总额。 ALTER TABLE customer ADD (saving varchar2(30)); select * from customer; 2. 更新Customer表,使得Savings字段的值正确。 3. 在Account表上增加一个行级触发器,当对account的balance进行update和insert一个 记录同步修改Customer的Savings字段,保证数据的一致性。 4. 对account进行update操作记录account表和customer表的变化。 5. 去掉顾客- 存款账号表中引用account表的外键约束(如果不去掉,后面的操作无法实现。当然最 佳的方法是修改其外键约束的更新策略,但考虑到复杂性,这里使用不标准的做法, 但建议大家实际运用中不要这么做)。在顾客- 存款账号表插入一条记录,表明顾客开设了一个新的账户。 6. 将一条刚才新开账户号的存款记录插入账号表,记录account表和customer表的变化。 [实验总结] 1. 实验中遇到的问题和解决的方法。 ----------------------- "触发事件 ":old ":new " "Insert "无定义,所有字段都是N"该语句完成后插入的值 " " "ULL " " "Update "更新前该行的旧值 "更新后该行的值 " "Delete "删除前该行的值 "无定义,所有字段都是N" " " "ULL "
实验3 触发器及其应用 一、实验目的   1、掌握基本RS、JK、D和T触发器的逻辑功能 2、掌握集成触发器的逻辑功能及使用方法 3、熟悉触发器之间相互转换的方法 二、实验原理   触发器具有两个稳定状态,用以表示逻辑状态"1"和"0",在一定的外界信号作用下 ,可以从一个稳定状态翻转到另一个稳定状态,它是一个具有记忆功能的二进制信息存 贮器件,是构成各种序电路的最基本逻辑单元。 1、基本RS触发器 图5-8-1为由两个与非门交叉耦合构成的基本RS触发器,它是无钟控制低电平直 接触发的触发器。基本RS触发器具有置"0"、置"1"和"保持"三种功能。通常称为置 "1"端,因为=0(=1)触发器被置"1";为置"0"端,因为=0 (=1)触发器被置"0",当==1状态保持;==0触发器状态不定,应避免此种情况发生,表5-8-1为基本RS触发器的功能表。 基本RS触发器。也可以用两个"或非门"组成,此为高电平触发有效。 表5-8-1 "输 入 "输 出 " "[pic"[pic"Qn+1"[pic" "] "] " "]n+1" "0 "1 "1 "0 " "1 "0 "0 "1 " "1 "1 "Qn "[pic" " " " "]n " "0 "0 "φ "φ " 图 5—8—1 基本RS触发器 2、JK触发器 在输入信号为双端的情况下,JK触发器是功能完善、使用灵活和通用性较强的一种触发 器。本实验采用74LS112双JK触发器,是下降边沿触发的边沿触发器。引脚功能及逻辑符 号如图5-8-2所示。 JK触发器的状态方程为       Qn+1 =Jn+Qn J和K是数据输入端,是触发器状态更新的依据,若J、K有两个或两个以上输入端,组 成"与"的关系。Q与 为两个互补输出端。通常把 Q=0、=1的状态定为触发器"0"状态;而把Q=1,=0定为"1"状态。 图5-8-2 74LS112双JK触发器引脚排列及逻辑符号 下降沿触发JK触发器的功能如表5-8-2 表5-8-2 "输 入 "输 出 " "[pic"[pic"CP "J "K "Qn+1"[pic" "]D "]D " " " " "]n+1" "0 "1 "× "× "× "1 "0 " "1 "0 "× "× "× "0 "1 " "0 "0 "× "× "× "φ "φ " "1 "1 " "0 "0 "Qn "[pic" " " " " " " "]n " "1 "1 " "1 "0 "1 "0 " "1 "1 " "0 "1 "0 "1 " "1 "1 " "1 "1 "[pic"Qn " " " " " " "]n " " "1 "1 " "× "× "Qn "[pic" " " " " " " "]n " 注:×— 任意态  — 高到低电平跳变 — 低到高电平跳变 Qn(n )— 现态 Qn+1(n+1 )— 次态 φ— 不定态 JK触发器常被用作缓冲存储器,移位寄存器和计数器。 3、D触发器 在输入信号为单端的情况下,D触发器用起来最为方便,其状态方程为 Qn+1=Dn,其输出状态的更新发生在CP脉冲的上升沿,故又称为上升沿触发的边沿触发 器,触发器的状态只取决于钟到来前D端的状态,D触发器的应用很广,可用作数字信 号的寄存,移位寄存,分频和波形发生等。有很多种型号可供各种用途的需要而选用。 如双D 74LS74、四D 74LS175、六D 74LS174等。 图5-8-3 为双D 74LS74的引脚排列及逻辑符号。功能如表5-8-3。 图5-8-3 74LS74引脚排列及逻辑符号   表5-8-3     表5-8-4 "输 入 "输 出 " "[pic"[pic"CP "D "Qn+1"n" "]D "]D " " " "+1 " "0 "1 "× "× "1 "0 " "1 "0 "× "× "0 "1 " "0 "0 "× "× "φ "φ " "1 "1 " "1 "1 "0 " "1 "1 " "0 "0 "1 " "1 "1 " "× "Qn "n" "输 入 "输出 " "[pic"[pi"CP "T "Qn+1" "]D "c]D" " " " "0 "1 "× "× "1 " "1 "0 "× "× "0 " "1 "1 " "0 "Qn " "1 "1 " "1 "" " " " " "n " 4、触发器之间的相互转换 在集成触发器的产品中,每一种触发器都有自己固定的逻辑功能。但可以利用转换的 方法获得具有其它功能的触发器。例如将JK触发器的J、k两端连在一起,并认它为T端, 就得到所需的T触发器。如图5-8-4(a)所示,其状态方程为: Qn+1 =Tn +Qn         (a) T触发器 (b) T'触
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值