网站大量收购闲置独家精品文档,联系QQ:2885784924

第8章_3 oracle_触发器.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章_3 oracle_触发器

序列(SEQUENCE)是一个命名的顺序编号生成器,它能以串行的方式生成一系列顺序整数 序列不占用实际的存储空间,而只在数据字典中保存序列的定义 引入序列的理由或序列的主要用途:流水号应用需求 序列能生成最大38位的整数 序列 序列的定义 CREATE SEQUENCE sequnce_name [START WITH n1] [INCREMENT BY n2] [{MAXVALUE n3 | NOMAXVALUE}] [{MINVALUE n4 | NOMINVALUE}] [{CACHE n5 | NOCACHE}] [{CYCLE | NOCYCLE}] [ORDER]; 参数 说明 START WITH 指定要生成的第一个序列号 INCREMENT BY 用于指定序列号之间的间隔,默认值为1 MAXVALUE 指定序列可以生成的最大值 NOMAXVALUE 用于指定序列没有上限 MINVALUE 指定序列可以生成的最小值 NOMINVALUE 用于指定序列没有下限 CACHE 用于指定在高速缓存中可以预分配的序列号个数,默认为20 NOCACHE 用于指定在高速缓存中不预先分配序列号 CYCLE 用于指定在达到序列的最大值或最小值后是否循环 ORDER 用于指定按顺序生成序列号 Create SEQUENCE SEQ_ID MINVALUE 1 MAXVALUE 1.0E28 Start With 1 INCREMENT By 1 CACHE 20; 示例:创建一个序列SEQ_ID 序列的查看 序列的使用 XKLB(XKLBLSH,FXKLBBH,XKLBBH,XKLBMC,FLJB) 学科类别流水号 方法一:通过INSERT语句直接使用 INSERT INTO XKLB(XKLBLSH,FXKLBBH,XLLBBH,XKLBMC,FLJB) VALUES (SEQ_ID.Nextval,NULL,’110’,’数学’,1) 序列的使用 方法二:配合触发器 Create or Replace Trigger tri_xklb_id Before Insert On XKLB For Each Row Begin Select SEQ_ID.Nextval Into :new.XKLBLSH From DUAL; End; CREATE TABLE audit_table (Audit_id NUMBER, User_name VARCHAR2(20), Now_time DATE, Terminal_name VARCHAR2(20), Table_name VARCHAR2(10), Action_name VARCHAR2(10), prof_id CHAR(4) ); 示例:将prof 表的变化情况记录到AUDIT_TABLE和AUDIT_TABLE_VALUES中。 审计 CREATE TABLE audit_table_values (Audit_id NUMBER, Column_name VARCHAR2(10), Old_val VARCHAR2(10), New_val VARCHAR2(10) ); CREATE SEQUENCE audit_seq START WITH 1000 INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE; CREATE OR REPLACE TRIGGER audit_prof AFTER INSERT OR UPDATE OR DELETE ON prof FOR EACH ROW DECLARE Time_now DATE; Terminal CHAR(20); BEGIN Time_now:=sysdate; Terminal:=USERENV(TERMINAL); IF INSERTING THEN INSERT INTO audit_table VALUES(audit_seq.NEXTVAL,user,time_now, terminal,prof,INSERT,:new.P#); ELSIF DELETING THEN INSERT INTO audit_table VALUES(audit_seq.NEXTVAL,user,time_now, terminal,prof,D

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档