oracle中触发器事务等写法

合集下载

Oracle 用户事件触发器

Oracle  用户事件触发器

Oracle 用户事件触发器用户事件触发器是建立在模式级的操作上的触发器。

激活该类型触发器的用户事件包括:CREATE、ALTER、DROP、ANAL YZE、ASSOCIATE STATISTICS、DISASSOCIATE 、STA TISTICS、COMMENT、GRANT、REVOKE、RENAME、TRUNCA TE、LOGOFF、SUSPEND 和LOGON。

下面的示例将创建一个用户模式级触发器,以记录用户删除的数据库对象。

(1)以SCOTT身份连接到数据,并建立一个日志信息表。

SQL> create table droped_objects(2 object_name varchar2(30),3 object_type varchar2(30),4 dropped_on date);表已创建。

(2)创建用户事件触发器,以便记录用户删除的数据库对象。

SQL> create or replace trigger log_drop_trigger2 before drop on scott.schema3 begin4 insert into droped_objects values(5 ora_dict_obj_name,6 ora_dict_obj_type,7 sysdate);8 end;9 /触发器已创建在编写用户事件触发器时,经常会需要使用一些事件属性函数,例如,上面示例中的ORA_DICT_OBJ_NAME和ORA_DICT_OBJ_TYPE函数。

常用的事件属性函数如表7-1所示。

表7-1 事件属性函数事件属性函数说明ora_client_ip_address 返回客户端的IP地址ora_database_name 返回当前数据库名ora_des_encrypted_password 返回DES加密后的用户口令ora_dict_obj_name 返回DDL操作所对应的数据库对象名ora_dict_obj_name_list(name_list out ora_name_list_t) 返回在事件中被修改的对象名列表ora_dict_obj_owner 返回DDL操作所对应的对象的所有者名ora_dict_obj_owner_list(owner_list out ora_name_list_t) 返回在事件中被修改的对象的所有者列表ora_dict_obj_type 返回ddl操作所对应的数据库对象的类型ora_grantee(user_list out ora_name_list_t) 返回授权事件的授权者ora_instance_num 返回例程号ora_is_alter_column(column_name in varchar2) 检测特定列是否被修改ora_is_creating_nested_table 检测是否正在建立嵌套表ora_is_drop_column(column_name in varchar2) 检测特定列是否被删除ora_is_servererror(error_number) 检测是否返回了特定oracle错误ora_login_user 返回登录用户名ora_sysevent 返回触发器的系统事件名(3)删除SCOTT模式下的一些表或视图,测试触发器的运行情况。

Oracle触发器trigger详解

Oracle触发器trigger详解

Oracle触发器trigger详解触发器相关概念及语法,供⼤家参考,具体内容如下概述本篇博⽂中主要探讨以下内容:什么是触发器触发器的应⽤场景触发器的语法触发器的类型案例数据:触发器的概念和第⼀个触发器数据库触发器是⼀个与表相关联的,存储的PL/SQL 语句。

每当⼀个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle⾃动执⾏触发器中定义的语句序列。

举个简单的例⼦:当员⼯表中新增⼀条记录后,⾃动打印“成功插⼊新员⼯”create or replace trigger insertStaffHintafter insert on xgj_testfor each rowdeclare-- local variables herebegindbms_output.put_line('新增员⼯成功');end insertStaffHint;触发器的应⽤场景复杂的安全性检查数据的确认数据库审计数据的备份和审计触发器的语法CREATE [OR REPLACE] TRIGGER trigger_name{BEFORE | AFTER }{INSERT | DELETE | UPDATE [OF column [, column …]]}[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]ON [schema.]table_name | [schema.]view_name[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}][FOR EACH ROW ][WHEN condition]PL/SQL_BLOCK | CALL procedure_name;其中:BEFORE 和AFTER指出触发器的触发时序分别为前触发和后触发⽅式,前触发是在执⾏触发事件之前触发当前所创建的触发器,后触发是在执⾏触发事件之后触发当前所创建的触发器。

oracle_form_常用Trigger的触发时机-执行顺序

oracle_form_常用Trigger的触发时机-执行顺序

常用Trigger的触发时机●Form Level:●Block Level:Item Level:常见的Trigger触发顺序触发器执行顺序:1.当打开FORM时:(1)PRE-FORM(2)PRE-BLOCK(BLOCK级)(3)WHEN-NEW-FORM-INSTANCE(4)WHEN-NEW-BLOCK-INSTANCE(5)WHEN-NEW-RECORD-INSTANCE(6)WHEN-NEW-ITEM-INSTANCE2.当填写一行记录完成后,光标移动到下一条记录的时候:(1)WHEN-VALIDATE-RECORD(只将填写的记录与数据库中已存在的记录作唯一性的验证,如果只是页面上的数据重复而数据库中没有与其重复的值则不会报错.)(2)WHEN-NEW-RECORD-INSTANCE(3)WHEN-NEW-ITEM-INSTANCE3.当点击“保存”时(1)WHEN-VALIDATE-RECORD(将页面上的所有数据提交到数据库,若页面上有重复的数据,则提交第一次时成功但只是将数据先写到数据库中一类似临时表的地方,在提交第二条重复记录的时候报错,执行事务回滚,原来执行成功的指令也将被撤消)(2)PRE-INSERT(3)ON-INSERT(4)POST-INSERT(5)POST-FORMS-COMMIT(6)PRE-BLOCK(BLOCK级)(7)KEY-COMMIT(8)WHEN-NEW-ITEM-INSTANCE4.当光标移动到当前数据块中已经显示的行上时:(1)WHEN-REMOVE-RECORD(2)WHEN-NEW-RECORD-INSTANCE(3)WHEN-NEW-ITEM-INSTANCE当在该行上的不同ITEM移动时:(4)WHEN-NEW-ITEM-INSTANCE5.当要进行修改时(在记录中的某个项上进行了修改时):(1)ON-LOCK6.在修改完成后进行保存时:(1)WHEN-VALIDATE-RECORD(2)PRE-UPDATE(3)ON-UPDATE(4)POST-FORMS-COMMIT(5)PRE-BLOCK(BLOCK级)(6)KEY-COMMIT(7)WHEN-NEW-ITEM-INSTANCE7.删除一条记录时:(1)ON-LOCK(2)WHEN-REMOVE-RECORD(3)KEY-DELREC(4)WHEN-NEW-RECORD-INSTANCE(5)WHEN-NEW-ITEM-INSTANCE8.F11查询过程:(1)WHEN-CLEAR-BLOCK(2)WHEN-NEW-RECORD-INSTANCE(3)WHEN-NEW-ITEM-INSTANCE在输入查询条件后点CTRL+F11:(4)PRE-QUERY(5)WHEN-CLEAR-BLOCK(6)POST-QUERY(7)WHEN-NEW-RECORD-INSTANCE(8)WHEN-NEW-ITEM-INSTANCE9.CRRL+F11:(1)WHEN-CLEAR-BLOCK(2)PRE-QUERY(3)WHEN-CLEAR-BLOCK(4)POST-QUERY(每查一条记录,触发一次)(5)WHEN-NEW-RECORD-INSTANCE(6)WHEN-NEW-ITEM-INSTANCE10.从查询状态(F11)转为输入状态(F4)时:(1)WHEN-CLEAR-BLOCK(2)KEY-EXIT(3)WHEN-NEW-RECORD-INSTANCE(4)WHEN-NEW-ITEM-INSTANCE11.手电筒查询过程:(1)QUERY_FIND(BLOCK级)输入查询条件后,点击“查询”按钮:(2)WHEN-CLEAR-BLOCK(3)PRE-QUERY(4)WHEN-CLEAR-BLOCK(5)POST-QUERY(6)WHEN-NEW-RECORD-INSTANCE(7)WHEN-NEW-ITEM-INSTANCE12.点击“New”时:(1)WHEN-NEW-RECORD-INSTANCE(2)WHEN-NEW-ITEM-INSTANCE13.点击“EditField”时:(1)KEY-EDIT14.点击“WindowHelp”时:(1)KEY-HELP15.点击“ClearRecord”时:(1)WHEN-REMOVE-RECORD(2)POST-QUERY(3)WHEN-NEW-RECORD-INSTANCE(4)WHEN-NEW-ITEM-INSTANCE16.点击F4关闭时:(1)KEY-EXIT(2)POST-FORM17.点击“CloseForm”按钮关闭时:(1)KEY-EXIT(2)POST-FORM18.点击“Translations”按钮时:(1)TRANSLATIONS19.点击小叉号关闭时:(1)WHEN-WINDOW-CLOSED(2)CLOSE-WINDOW(3)KEY-EXIT(4)POST-FORM20.选中LOV列表:(1)KEY-LISTVAL(2)WHEN-NEW-ITEM-INSTANCE21.选中记录前面的小条时:(1)WHEN-NEW-RECORD-INSTANCE(2)WHEN-NEW-ITEM-INSTANCE(数据项级)(3)WHEN-NEW-ITEM-INSTANCE22.光标上下移动时:(1)WHEN-NEW-RECORD-INSTANCE(2)WHEN-NEW-ITEM-INSTANCE。

Oracle触发器操作

Oracle触发器操作

AS
SELECT * FROM Users
WHERE u_Name='amy';

(2)创建行级触发器

CREATE OR REPLACE TRIGGER tr_DeleteUser2 AFTER DELETE
2020/10/15 Or acle 数 据库 管理 与 应用 实例 教 程
课堂案例2—使用PL/SQL管理触发器
案例完成步骤-创建触发器
添加标 【例2-4】通过临时表将Users表中删除的记录进行临时保存(行级触发器)。
(1)创建行级触发器的测试表 CREATE TABLE userdel
题文字
建议课时:8课时
2020/10/15 Or acle 数 据库 管理 与 应用 实例 教 程
9.1 触发器概述
触发器简介 触发器是一种特殊的存储过程,它与数据表紧密联系,用于保护表中的 数据,当一个定义了特定类型触发器的基表执行插入、修改或删除表中 数据的操作时,将自动触发触发器中定义的操作,以实现数据的一致性 和完整性。 触发器拥有比数据库本身标准的功能更精细和更复杂的数据控制能力。 触发器具有以下的作用: (1)在安全性方面,触发器可以基于数据库的值使用户具有操作数据 库的某种权利。 (2)在审计方面,触发器可以跟踪用户对数据库的操作。 (3)实现复杂的数据完整性规则。 (4)实现复杂的非标准的数据库相关完整性规则。触发器可以对数据 库中相关的表进行连环更新。 (5)同步实时地复制表中的数据。 (6)自动计算数据值,如果数据的值达到了一定的要求,则进行特定 的处理。例如,如果商品的数量低于5,则立即给管理人员发送库存报 警信息。

WHO VARCHAR2(30),

oracle触发器update写法

oracle触发器update写法

oracle触发器update写法Oracle触发器是一种数据库管理系统(DBMS)中非常有用的工具。

它可以帮助管理者更好地完成对表格数据和其他对象的维护,并完成自动执行编程任务。

在Oracle环境中,更新触发器是一种重要的用法,它可以帮助使用者在更新操作过程中自动执行特定的任务。

更新触发器的执行是在更新行数据后发生的,它可以检测到更新操作,然后执行指定的任务。

它会读取更新操作发生前的原始数据,并将它们存储在一个变量中,而更新操作的最新状态会存储在另一个变量中。

这样,触发器就可以比较这两个变量,从而确定当前执行的更新操作和之前的原始数据之间的不同点,然后进行相应的任务。

Oracle更新触发器写法非常简单,但要正确使用却很复杂。

首先,使用者必须要知道如何使用CREATE TRIGGER命令,该命令可以创建一个触发器对象。

该语句需要调整一些参数,以指定更新操作发生时执行的任务。

更新触发器的实际执行程序可以使用PL/SQL编写,它可以让使用者设置具体的任务行为和执行逻辑。

同时,更新触发器的执行过程也可以嵌套任务,例如一次执行一个查询,再执行另一个查询,从而完成一个完整的任务程序。

Oracle还提供了一些有助于更新触发器执行逻辑的关键字,例如IF条件语句,FOR和WHILE循环,等等,所有这些关键字的用法也都要求使用者熟练掌握。

Oracle的更新触发器提供了很多可自定义的参数选项,它可以让使用者更有效地完成更新操作,避免数据的损失,提供更可靠的数据管理体验。

此外,更新触发器也可以帮助提高数据库更新的效率,它可以自动执行重复的任务,让使用者能够更快地完成更多的工作,从而提高整体的数据库管理系统的效率。

总之,Oracle更新触发器可以为数据库系统带来非常大的好处,它可以提高数据库更新过程的安全性、可靠性和效率,同时可以极大地减少使用者的工作量,从而节省更多的时间和精力,实现更高的效率。

oracle触发器的实例(转)

oracle触发器的实例(转)

oracle触发器的实例(转)触发器使⽤教程和命名规范⽬录触发器使⽤教程和命名规范 11,触发器简介 12,触发器⽰例 23,触发器语法和功能 34,例⼀:⾏级触发器之⼀ 45,例⼆:⾏级触发器之⼆ 46,例三:INSTEAD OF触发器 67,例四:语句级触发器之⼀ 88,例五:语句级触发器之⼆ 99,例六:⽤包封装触发器代码 1010,触发器命名规范 111,触发器简介触发器(Trigger)是数据库对象的⼀种,编码⽅式类似存储过程,与某张表(Table)相关联,当有DML语句对表进⾏操作时,可以引起触发器的执⾏,达到对插⼊记录⼀致性,正确性和规范性控制的⽬的。

在当年C/S时代盛⾏的时候,由于客户端直接连接数据库,能保证数据库⼀致性的只有数据库本⾝,此时主键(Primary Key),外键(Foreign Key),约束(Constraint)和触发器成为必要的控制机制。

⽽触发器的实现⽐较灵活,可编程性强,⾃然成为了最流⾏的控制机制。

到了B/S时代,发展成4层架构,客户端不再能直接访问数据库,只有中间件才可以访问数据库。

要控制数据库的⼀致性,既可以在中间件⾥控制,也可以在数据库端控制。

很多的青睐Java的开发者,随之将数据库当成⼀个⿊盒,把⼤多数的数据控制⼯作放在了Servlet中执⾏。

这样做,不需要了解太多的数据库知识,也减少了数据库编程的复杂性,但同时增加了Servlet编程的⼯作量。

从架构设计来看,中间件的功能是检查业务正确性和执⾏业务逻辑,如果把数据的⼀致性检查放到中间件去做,需要在所有涉及到数据写⼊的地⽅进⾏数据⼀致性检查。

由于数据库访问相对于中间件来说是远程调⽤,要编写统⼀的数据⼀致性检查代码并⾮易事,⼀般采⽤在多个地⽅的增加类似的检查步骤。

⼀旦⼀致性检查过程发⽣调整,势必导致多个地⽅的修改,不仅增加⼯作量,⽽且⽆法保证每个检查步骤的正确性。

触发器的应⽤,应该放在关键的,多⽅发起的,⾼频访问的数据表上,过多使⽤触发器,会增加数据库负担,降低数据库性能。

oracle 触发器case 写法

Oracle触发器是一种特殊类型的存储过程,它可以在特定的数据库操作发生时自动执行。

在实际应用中,我们经常会遇到需要使用Oracle触发器来实现一些复杂的业务逻辑。

在使用Oracle触发器时,我们需要根据具体的业务需求来设计触发器的逻辑,而针对不同的场景,需要使用不同的触发器写法。

本文将针对Oracle触发器的不同应用场景,介绍其对应的写法和注意事项。

一、触发器简介1.1 触发器概述Oracle触发器是一种特殊的数据库对象,它会在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动触发执行。

触发器可以在数据库级别定义,对于特定的表和事件进行相应的响应操作。

在实际应用中,触发器常用于实现数据完整性约束、数据审计、实时计算等功能。

1.2 触发器类型在Oracle数据库中,触发器主要分为行级触发器和语句级触发器两种类型。

行级触发器会在每一行数据被操作时触发执行,而语句级触发器则会在整个SQL语句执行完成时触发执行。

在设计触发器时,需要根据具体的业务需求来选择合适的触发器类型。

二、Oracle触发器的应用场景及写法2.1 实现数据完整性约束在数据库中,我们经常需要实现一些数据完整性约束,如主键约束、外键约束等。

而触发器可以作为实现这些约束的一种手段。

我们可以使用触发器在插入或更新数据时,对数据进行校验,确保符合特定的约束条件。

对于主键约束,我们可以使用BEFORE INSERT触发器来实现,在数据插入前对主键进行校验,防止重复插入数据。

示例代码如下:```sqlCREATE OR REPLACE TRIGGER trg_check_pkBEFORE INSERT ON table_nameFOR EACH ROWDECLAREv_count NUMBER;BEGINSELECT COUNT(*) INTO v_countFROM table_nameWHERE primary_key = :new.primary_key;IF v_count > 0 THENR本人SE_APPLICATION_ERROR(-0, 'Primary key already exists');END IF;END;/```对于外键约束,我们可以使用AFTER INSERT、AFTER UPDATE触发器来实现,在数据插入或更新后对外键进行校验,确保引用的数据存在。

Oracle 行级触发器

Oracle 行级触发器在创建触发器时,如果使用了FOR EACH ROW选项,则创建的该触发器为行级触发器。

对于行级触发器而言,当一个DML语句操作影响到数据库中的多行数据时,行级触发器会针对于每一行执行一次。

在行级触发器中有一个很重要的特点,当创建BEFORE行级触发器时,可以在触发器中引用受到影响的行值,甚至可以在触发器中设置它们。

下面将在表上创建一个行级触发器,并使用一种数据库对对象(序列)生主键值。

这是非常常见的FOR EACH ROW触发器的用途。

(1)创建一个测试表FOO,以及随同使用的序列,序列的作用是自动生成一组排序数。

SQL> --创建一个表SQL> create table foo(sid number,sname varchar2(20));表已创建。

SQL> --创建序列SQL> create sequence seq_foo;序列已创建。

(2)创建生成主键的行级触发器。

SQL> create or replace trigger foo_trigger2 before insert or update of sid3 on foo4 for each row--行级触发器5 begin6 if inserting then7 select seq_foo.nextval8 into :new.sid9 from dual;10 else11 raise_application_error(-20020,'不允许更新ID值!');12 end if;13 end;14 /触发器已创建(3)现在可以尝试向表FOO添加两行数据,以测试触发器是否能够成功运行。

SQL> insert into foo(sid,sname)2 values(1,'董鹏');已创建 1 行。

SQL>SQL> insert into foo(sname)2 values('刘丽');已创建 1 行。

oracle序列和触发器

oracle序列和触发器1、创建表t1 :create table t1 (id number,name nvarchar(8));2、创建序列:CREATE SEQUENCE t1_id INCREMENT BY 1 START WITH 1 MAXV ALUE 1.0E28 MINV ALUE 1 NOCYCLE CACHE 20 NOORDER3. 创建触发器:CREATE TRIGGER tig_insert_t1BEFORE INSERT ON "YINZQ"."T1"beginif (:new.id is null) thenselect t1_id.nextval into :new.id from dual; //其中的:new.id 指的是t1表中新行的列end if;end;Oracle触发器语法触发器是特定事件出现的时候,自动执行的代码块。

类似于存储过程,触发器与存储过程的区别在于:存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。

功能:1、允许/限制对表的修改2、自动生成派生列,比如自增字段3、强制数据一致性4、提供审计和日志记录5、防止无效的事务处理6、启用复杂的业务逻辑触发器触发时间有两种:after和before。

1、触发器的语法:CREATE [OR REPLACE] TIGGER触发器名触发时间触发事件ON表名[FOR EACH ROW]BEGINpl/sql语句END其中:触发器名:触发器对象的名称。

由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。

触发时间:指明触发器何时执行,该值可取:before---表示在数据库动作之前触发器执行;after---表示在数据库动作之后出发器执行。

触发事件:指明哪些数据库动作会触发此触发器:insert:数据库插入会触发此触发器;让oracle实现自增字段先建序列,然后建立一个触发器实现!cata0是表名,cata0_id是需要自增的字段!CREATE SEQUENCE SEQ_cata0INCREMENT BY 1START WITH 1MAXV ALUE 9999999CREATE TRIGGER TRG_cata0 BEFOREINSERT ON cata0FOR EACH ROW beginSELECT SEQ_cata0.NEXTV ALINTO :NEW.cata0_IDfrom DUAL;End TRG_cata0;/****@PARAM STNAME 不要创建序列的表,多个表则以“,”隔开**/CREATE OR REPLACE PROCEDURE PROC_CREATE_SEQ_TRIG(STNAME IN V ARCHAR2)ASSTRSQL VARCHAR2(4000);TABLENAME V ARCHAR2(50);PID V ARC ......。

oracle 触发器的种类和触发事件,dml触发器,ddl事件触发器,替代触发器,查看触发

oracle 触发器的种类和触发事件,DML触发器,DDL事件触发器,替代触发器,查看触发...oracle 数据库开发应用实例,招生录取系统 ... | oracle 创建,删除存储过程,参数传递,创 ...2009-04-14oracle 触发器的种类和触发事件,DML触发器,DDL事件触发器,替代触发器,查看触发器,关键字: oracle 触发器种类触发事件dml ddl 事件替代查看触发器的种类和触发事件触发器必须由事件才能触发。

触发器的触发事件分可为3类,分别是DML事件、DDL事件和数据库事件。

每类事件包含若干个事件,如下所示。

数据库的事件是具体的,在创建触发器时要指明触发的事件。

种类关键字含义Sql代码DML事件(3种) INSERT 在表或视图中插入数据时触发UPDATE 修改表或视图中的数据时触发DELETE 在删除表或视图中的数据时触发DDL事件(3种) CREATE 在创建新对象时触发ALTER 修改数据库或数据库对象时触发DROP 删除对象时触发数据库事件(5种) STARTUP 数据打开时触发SHUTDOWN 在使用NORMAL或IMMEDIATE选项关闭数据库时触发LOGON 当用户连接到数据库并建立会话时触发LOGOFF 当一个会话从数据库中断开时触发SERVERERROR 发生服务器错误时触发DML事件(3种) INSERT 在表或视图中插入数据时触发UPDATE 修改表或视图中的数据时触发DELETE 在删除表或视图中的数据时触发DDL事件(3种) CREATE 在创建新对象时触发ALTER 修改数据库或数据库对象时触发DROP 删除对象时触发数据库事件(5种) STARTUP 数据打开时触发SHUTDOWN 在使用NORMAL或IMMEDIATE选项关闭数据库时触发LOGON 当用户连接到数据库并建立会话时触发LOGOFF 当一个会话从数据库中断开时触发SERVERERROR 发生服务器错误时触发触发器的类型可划分为4种:数据操纵语言(DML)触发器、替代(INSTEAD OF)触发器、数据定义语言(DDL)触发器和数据库事件触发器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档