oracle FORM trigger执行顺序

合集下载

oracle function 语法

oracle function 语法

oracle function 语法【1】Oracle Function 简介在Oracle 数据库中,Function 是一种存储过程,它允许你执行一系列的操作,并在过程中返回一个值。

Oracle Function 可以用于处理复杂的业务逻辑,并将结果返回给调用者。

它们提供了更高的灵活性和可重用性,使得开发者可以更高效地管理数据库。

【2】Oracle Function 语法结构Oracle Function 的基本语法结构如下:```CREATE OR REPLACE FUNCTION function_nameRETURN return_typeIS-- 声明变量和常量-- 声明过程变量BEGIN-- 业务逻辑RETURN return_value;END;/```其中,`function_name` 是函数的名称,`return_type` 是返回值的类型,`return_value` 是实际返回的值。

【3】参数传递Oracle Function 允许你通过参数传递数据。

参数可以在声明函数时定义,也可以在调用函数时传递。

定义参数的语法如下:```FUNCTION function_name(param1 data_type, param2 data_type, ...) RETURN return_type;```【4】返回值Oracle Function 可以通过`RETURN` 语句返回一个值。

返回值可以是任意数据类型,包括字符、数字、日期等。

以下是一个返回值的示例:```FUNCTION calculate_area(p_radius IN NUMBER)RETURN NUMBERISv_area NUMBER;BEGINv_area := POWER(p_radius, 2);RETURN v_area;END;/```【5】示例:创建一个简单的Oracle Function以下是一个计算圆面积的Function 示例:```FUNCTION calculate_area(p_radius IN NUMBER) RETURN NUMBERISv_area NUMBER;BEGINv_area := POWER(p_radius, 2);RETURN v_area;END;/```调用此Function 的SQL 语句如下:```SELECT calculate_area(5) FROM dual;```以上内容仅供参考,实际操作请根据具体需求和场景进行调整。

Oracle触发器语法

Oracle触发器语法

Oracle触发器的概念和类型2008-04-16 14:23:34摘要:本文介绍了oracle触发器的概念和类型。

关键词:触发器、oracle。

1.引言2.触发器的概念和类型触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。

数据库触发器有以下的作用:* 安全性。

可以基于数据库的值使用户具有操作数据库的某种权利。

# 可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据。

# 可以基于数据库中的数据限制用户的操作,例如不允许股票的价格的升幅一次超过10%。

* 审计。

可以跟踪用户对数据库的操作。

# 审计用户操作数据库的语句。

# 把用户对数据库的更新写入审计表。

* 实现复杂的数据完整性规则。

# 实现非标准的数据完整性检查和约束。

触发器可产生比规则更为复杂的限制。

与规则不同,触发器可以引用列或数据库对象。

例如,触发器可回退任何企图吃进超过自己保证金的期货。

# 提供可变的缺省值。

* 实现复杂的非标准的数据库相关完整性规则。

触发器可以对数据库中相关的表进行连环更新。

例如,在auths表author_code列上的删除触发器可导致相应删除在其它表中的与之匹配的行。

# 在修改或删除时级联修改或删除其它表中的与之匹配的行。

# 在修改或删除时把其它表中的与之匹配的行设成NULL值。

# 在修改或删除时把其它表中的与之匹配的行级联设成缺省值。

# 触发器能够拒绝或回退那些破坏相关完整性的变化,取消试图进行数据更新的事务。

当插入一个与其主健不匹配的外部键时,这种触发器会起作用。

例如,可以在books.author_code列上生成一个插入触发器,如果新值与auths.author_ code列中的某值不匹配时,插入被回退。

* 同步实时地复制表中的数据。

* 自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理。

例如,如果公司的帐号上的资金低于5万元则立即给财务人员发送警告数据。

oracle存储过程和触发器的说明

oracle存储过程和触发器的说明

1、函数的声明及使用方法语法:create [or replace] function function_name [(argument[{in|out|in out}]type,…..argument [{in|out|in out}]type)]return return_type {is|as}function_body例子:例1:函数不带参数CREA TE OR REPLACE FUNCTION TEST1 return char isbeginreturn '0';end;运行方法1:在dos下运行步骤1:SQL> variable t1 char(1) //声明变量步骤2:SQL> exec:t1:=test1 //传入参数并执行函数步骤3:SQL> print t1 //打印结果例2:(函数带一个参数)create or replace function test2(t1 char)return char ist char(1);begint:=t1;return t;end;运行方法1:在dos下运行步骤1:SQL> variable t2 char(1) //声明变量步骤2:SQL> exec:t2:=test2('5') //传入参数并执行函数步骤3:SQL> print t2 //打印结果例3:(函数带多个参数)create or replace function test3(t1 number,t2 number)return number ast number;begint:=t1+t2;return t;运行方法1:在doc下运行步骤1:SQL> variable t3 number //声明变量步骤2:SQL> exec:t3:=test3(2,3) //传入参数并执行函数步骤3:SQL> print t3 //打印结果2、存储过程的声明及使用方法语法:create [or replace] procedure procedure_name [(argument[{in|out|in out}])type,……argument[{in|out|in |out}]type)]{is|as}procedure_body例子:例1:(不带参数的存储过程)create or replace procedure test4isbeginnull;DBMS_OUTPUT.put_line('dddddd');//输出end;运行方法1:在doc下运行步骤1 SQL> set serveroutput on size 10000//用于打开输入步骤2:SQL> exec test4例2:(带一个参数的存储过程)create or replace procedure test5(t1 in varchar)ist varchar2(10);begint:=t1;end;运行方法1:在doc下运行步骤1:SQL> exec test5('0000')例3:(带多个参数的存储过程)create or replace procedure test6(t1 in varchar2,t2 out varchar2,t3 in out varchar2)ist varchar2(100);t:=’111’;end;运行方法1:在doc下运行步骤1:运行方法2:不在doc下运行set serveroutput on size 10000;//用于打开输入declarett varchar2(10);ttt varchar2(10);beginttt:='1';test6('0000',tt,ttt);dbms_output.put_line(tt);//输出end;3、触发器的声明及使用方法语法:create [or replace] trigger trigger_name{before|alter} trigger_event on table_name[for each row[when trigger_condition]]trigger_body例子:declareQYZCH V ARCHAR2(26);count_zxjbxx number;begincount_zxjbxx:=0;if :new.ZZJGDM is not null and :new.NSRSBH_G is not null and :new.NSRSBH_D is not null and :new.ZTDM='0000000000' and :new.YZXDM='0000000000' thenselect count(*)into count_zxjbxxfrom zx_jbxxwhere QYZCH=:new.QYZCH;if count_zxjbxx<=0 theninsert into zx_jbxxvalues(:new.ZZJGDM,:new.QYZCH,:new.NSRSBH_G,:new.NSRSBH_D,:new.QYMC,:new.FDD BR,:new.SFZJHM,:new.ZS,:new.YZBM,:new.LXDH,:new.HY_DM,:new.QYLX_DM,:new.QZXKJYXM,: new.YBJYXM,:new.DJJG_DM,:new.SWDJRQ_G,:new.SWDJRQ_D,:new.SWDJJG_G,:new.SWDJJG_D,:new.GGBZ,:new.JGZCLX,:new.CLRQ,:new.BZRQ,'10',sysdate);end if;end if;exceptionWHEN OTHERS THEN raise_application_error(-20549,to_char(SQLCODE)||SQLERRM);rollback;end;。

trigger的用法总结

trigger的用法总结

Trigger的用法总结1. 什么是Trigger?Trigger(触发器)是数据库管理系统中的一种特殊的存储过程,它在定义的事件发生时自动执行。

触发器可以在插入、更新或删除数据时触发,可以用于实现数据的完整性约束、自动化业务逻辑等功能。

2. 触发器的语法触发器的语法可以根据具体的数据库管理系统有所差异,下面是一个通用的触发器语法:CREATE TRIGGER trigger_name{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name[FOR EACH ROW][WHEN (condition)]BEGIN-- 触发器的执行逻辑END;•trigger_name:触发器的名称,应具有唯一性。

•BEFORE或AFTER:指定触发器的执行时间,BEFORE表示在事件之前执行,AFTER表示在事件之后执行。

•INSERT、UPDATE或DELETE:指定触发器要监控的事件类型。

•table_name:要监控的表名。

•FOR EACH ROW:表示触发器针对每一行数据都会执行,可以省略。

•WHEN (condition):指定触发器的条件,只有满足条件时触发器才会执行,可以省略。

•BEGIN和END:触发器的执行逻辑应该放在BEGIN和END之间。

3. 触发器的重要观点3.1 触发器的类型根据触发器的执行时间,可以将触发器分为两种类型:BEFORE触发器和AFTER触发器。

•BEFORE触发器:在事件之前执行,可以用于验证数据的完整性、修改数据等操作。

例如,可以在插入数据之前检查数据的有效性,或者在更新数据之前对数据进行预处理。

•AFTER触发器:在事件之后执行,可以用于记录日志、发送通知等操作。

例如,可以在插入数据之后记录操作日志,或者在删除数据之后发送邮件通知。

3.2 触发器的事件类型触发器可以监控的事件类型包括:•INSERT:插入数据时触发。

Oracle数据库---触发器

Oracle数据库---触发器

1.创建语句触发器:2.Oracle中的触发器可以建立在数据表或视图上。

触发器时机可以有两种选择:在实际动作之前(before)或之后(after)3.一个触发器可以建立在多个动作之上。

触发器基本针对insert、update、delete,而不能针对insert.4.触发器有三个谓词---inserting/updating/deleting触发器动作可能由三个中的两个或三个组成,那么具体要判断是哪一个呢?就需要用谓词了。

5.语句触发器的作用级别为整个表,但是我们往往又需要针对单行数据执行某种特定操作,此时应该用行触发器。

在定义的时候,最后面加了一句for each row6.行触发器的变量引用行触发器基本上也是对insert、update、delete进行触发,有两个系统变量’:old’和’:new’变量,我们可以利用他们来得到很好的东西。

但由于insert没有旧的数据,所以对’:old’不可用,但对’:new’还是可以用的,而delete没有新的数据,故和insert相反。

7.我们可以用referencing关键字把new或者old关键字替换成别的。

7.触发器的条件限制。

很多时候我们对行的触发,也只是需要对一部分触发。

注意:when后面的条件要用括号括起来,并且里面用的old是old而非:old,没有冒号的。

我们分别对id=1和id=2进行操作,看输出:对id=1操作,输出为空对id=2操作,输出有值,因为在id=2的操作才触发触发器。

8系统事件的触发系统事件包括数据库的打开和关闭,系统错误等。

上面是把登陆时间写入数据表上面是把注销时间写入数据表。

8.用户事件用户事件包括create:创建对象、alter:修改对象属性、rename:重命名数据库中的对象等System.schema代表用户system的所以对象。

9.通过数据字典来查看触发器、表等信息10.启用和禁用触发器11.删除触发器。

forupdateoracle用法

forupdateoracle用法

forupdateoracle用法Oracle数据库是一种关系型数据库管理系统,它支持标准SQL查询语言以及存储过程、触发器等高级功能。

FOR UPDATE是Oracle中用来锁定条记录的关键字,可以通过SELECT ... FOR UPDATE语句来实现。

在Oracle中,当需要更新其中一行数据时,为了避免数据冲突和并发访问的问题,可以使用FOR UPDATE语句锁定该行数据,这样其他请求该行数据的事务需要等待锁释放后才能执行。

这可以保证数据的一致性和完整性。

使用FORUPDATE语句的一般步骤如下:1.开始一个事务,可以使用BEGIN语句。

2. 使用SELECT语句查询需要更新的数据,并在SELECT语句的末尾加上FOR UPDATE关键字,例如:SELECT * FROM table_name WHERE condition FOR UPDATE。

3.处理数据。

4.提交或回滚事务,可以使用COMMIT或ROLLBACK语句。

FORUPDATE语句有以下几点需要注意:1.FORUPDATE仅适用于SELECT语句,用于锁定查询结果中的行数据,以便后续的更新操作。

2.FORUPDATE只能在事务中使用,所以必须在事务开始前使用BEGIN或STARTTRANSACTION语句。

3.使用FORUPDATE将会锁定筛选出的行数据,直到事务提交或回滚。

其他事务若要读取或更新这些数据,将会被阻塞等待锁的释放。

4.FORUPDATE只会锁定满足条件的行数据,并不会锁定整个表,所以其他事务仍可以访问未被锁定的行。

5.如果多个事务同时使用FORUPDATE锁定了同一行数据,只有其中一个事务能够成功,其他事务将会被阻塞。

6. 如果SELECT语句中使用了ORDER BY子句,Oracle会在排序的过程中为每一行加锁,这可能会增加锁的粒度,导致性能下降。

以下是一个示例代码,演示了FORUPDATE的用法:```BEGIN--开启事务BEGINTRANSACTION;--查询数据并加锁SELECT * FROM employees WHERE department = 'IT' FOR UPDATE;--处理数据...--提交事务COMMIT;END;```在开发中,需要根据具体的业务需求和并发访问情况来决定是否使用FORUPDATE。

Oracle数据库应用与开发实战-第9章 使用触发器

— 18 —
9.2 创建触发器
例9-1
建立一 个触发器, 当职工表 emp 表 被 删 除一条记录 时,将被删 除记录写到 删除职工日 志表中去。
语句如下:
CREATE TABLE del_emp AS SELECT * FROM emp WHERE 1=2;
--创建与emp同结构的空表
CREATE OR REPLACE TRIGGER tr_del_emp
WHEN DELETING THEN raise_application_error(-20003, '不能删除部门80的人员记录');
— 3—
目录页
Contents Page
第9章 使用触发器
— 4—
9.1 触发器简介
9.2 创建触发器 9.3 删除和使能触发器 9.4 触发器应用举例
9.1 触发器简介
触发器类似过程和函数,是有声明、 执行和异常处理过程的PL/SQL块。当某 个事件发生时,触发器自动地隐式运行, 并且触发器不能接收参数。运行触发器 称为触发或点火(firing)。触发器常用 来完成由数据库的完整性约束难以完成 的复杂业务规则的约束,或用来监视对 数据库的各种操作实现审计的功能。
BEFORE INSERT BEFORE INSERT FOR EACH ROW AFTER INSERT AFTER INSERT FOR EACH ROW
BEFORE UPDATE BEFORE UPDATE FOR EACH ROW AFTER UPDATE AFTER UPDATE FOR EACH ROW
BEFORE DELETE BEFORE DELETE FOR EACH ROW AFTER DELETE AFTER DELETE FOR EACH ROW

Oracle一个事务中的Insert和Update执行顺序

Oracle⼀个事务中的Insert和Update执⾏顺序
今天碰到了⼀个奇怪的问题,是关于Oracle⼀个事务中的Insert和Update语句的执⾏顺序的问题。

⾸先详细说明下整个过程:
有三张表:A,B,C,Java代码中有⼀段代码是先在表A中插⼊⼀条数据,然后再更新表B的两个字段,更新的两个字段是特定值。

并且插⼊和更新在⼀个事务中。

有个需求需要在表A添加⼀个Insert的⾏级触发器,在触发器⾥,插⼊表A⼀⾏记录后去表B查看更新的两个字段是否满⾜特定条件,
如果表B的两个字段同时等于特定值,则把表A和表B的数据整合下放到表C。

触发器的初衷就是这样。

可问题来了,测试触发器的时候,发现表B的两个字段总不能满⾜条件。

查询下表B,发现表B的两个字段已经更新,并且两个都是特定值。

新建测试窗⼝,插⼊表A⼀条测试记录,能在表C插⼊整合后的数据。

初步推断可能是在事务中,Insert语句先执⾏了,先触发了触发器,然后才进⾏表B的两个字段的更新。

所以就修改了Java代码事务中Insert语句和Update语句执⾏顺序,把Update语句放到Insert语句之前,结果还是⼀样,不能在表C插⼊整合后的数据。

后来在表B上⾯创建了⼀个Update触发器,禁⽤表A的Insert触发器,测试表B的Update触发器是发现当更新的两个字段满⾜特定条件后,去表A能查询到新插⼊的数据,能把整合后的数据插⼊到表C。

得出最终不成熟的结论:Oracle⼀个事务中,Insert语句⽐Update先执⾏。

oracle执行计划详解

oracle执⾏计划详解⼀:什么是Oracle执⾏计划?执⾏计划是⼀条查询语句在Oracle中的执⾏过程或访问路径的描述⼆:怎样查看Oracle执⾏计划?因为我⼀直⽤的PLSQL远程连接的公司数据库,所以这⾥以PLSQL为例:①:配置执⾏计划需要显⽰的项:⼯具 —> ⾸选项 —> 窗⼝类型 —> 计划窗⼝ —> 根据需要配置要显⽰在执⾏计划中的列执⾏计划的常⽤列字段解释:基数(Rows):Oracle估计的当前操作的返回结果集⾏数字节(Bytes):执⾏该步骤后返回的字节数耗费(COST)、CPU耗费:Oracle估计的该步骤的执⾏成本,⽤于说明SQL执⾏的代价,理论上越⼩越好(该值可能与实际有出⼊)时间(Time):Oracle估计的当前操作所需的时间②:打开执⾏计划:在SQL窗⼝执⾏完⼀条select语句后按 F5 即可查看刚刚执⾏的这条查询语句的执⾏计划注:在PLSQL中使⽤SQL命令查看执⾏计划的话,某些SQL*PLUS命令PLSQL⽆法⽀持,⽐如SET AUTOTRACE ON三:看懂Oracle执⾏计划①:执⾏顺序:根据Operation缩进来判断,缩进最多的最先执⾏;(缩进相同时,最上⾯的最先执⾏)例:上图中 INDEX RANGE SCAN 和 INDEX UNIQUE SCAN 两个动作缩进最多,最上⾯的 INDEX RANGE SCAN 先执⾏;同⼀级如果某个动作没有⼦ID就最先执⾏同⼀级的动作执⾏时遵循最上最右先执⾏的原则例:上图中 TABLE ACCESS BY GLOBAL INDEX ROWID 和 TABLE ACCESS BY INDEX ROWID 两个动作缩进都在同⼀级,则位于上⾯的 TABLE ACCESS BY GLOBAL INDEX ROWID 这个动作先执⾏;这个动作⼜包含⼀个⼦动作 INDEX RANGE SCAN,则位于右边的⼦动作 INDEX RANGE SCAN 先执⾏;图⽰中的SQL执⾏顺序即为:INDEX RANGE SCAN —> TABLE ACCESS BY GLOBAL INDEX ROWID —> INDEX UNIQUE SCAN —> TABLE ACCESS BY INDEX ROWID —> NESTED LOOPS OUTER —> SORT GROUP BY —> SELECT STATEMENT, GOAL = ALL_ROWS(注:PLSQL提供了查看执⾏顺序的功能按钮(上图中的红框部分) )②:对图中动作的⼀些说明:1. 上图中 TABLE ACCESS BY … 即描述的是该动作执⾏时表访问(或者说Oracle访问数据)的⽅式;表访问的⼏种⽅式:(⾮全部)TABLE ACCESS FULL(全表扫描)TABLE ACCESS BY ROWID(通过ROWID的表存取)TABLE ACCESS BY INDEX SCAN(索引扫描)(1) TABLE ACCESS FULL(全表扫描):Oracle会读取表中所有的⾏,并检查每⼀⾏是否满⾜SQL语句中的 Where 限制条件;全表扫描时可以使⽤多块读(即⼀次I/O读取多块数据块)操作,提升吞吐量;使⽤建议:数据量太⼤的表不建议使⽤全表扫描,除⾮本⾝需要取出的数据较多,占到表数据总量的 5% ~ 10% 或以上(2) TABLE ACCESS BY ROWID(通过ROWID的表存取) :先说⼀下什么是ROWID?ROWID是由Oracle⾃动加在表中每⾏最后的⼀列伪列,既然是伪列,就说明表中并不会物理存储ROWID的值;你可以像使⽤其它列⼀样使⽤它,只是不能对该列的值进⾏增、删、改操作;⼀旦⼀⾏数据插⼊后,则其对应的ROWID在该⾏的⽣命周期内是唯⼀的,即使发⽣⾏迁移,该⾏的ROWID值也不变。

Oracle_触发器讲解解析


触发事件是在数据库表上执行的DML(INSERT、UPDATE、 DELETE)操作。使用触发器,可以做许多事情,包括: ● 维护不可能在表创建时通过说明性约束进行的复杂 的完整性约束限制。 ● 通过记录所进行的修改以及谁进行了修改来审计表 中的信息。 ●当表被修改的时候,自动给需要执行操作的程序发信号 。
1.触发器概念及组成
制作一个数据库触发器,目的是在某个表上执行特定的 数据维护操作时,隐含地执行一个PL/SQL块。
例子:制作一个数据库触发器。记录下那些超过其工种工 资范围的工资值(但不禁止这种操作) CREATE TRIGGER check_sal BEFORE INSERT OR UPDATE OF sal,job ON emp FOR EACH ROW WHEN(new.job<> ‘PRESIDENT’) DECLAER v_minsal sal_guide.minsal%TYPE; v_maxsal sal_guide.maxsal%TYPE; e_sal_out_of_range EXCEPTION;
触发器
触发器类似于过程、函数,因为它们都是拥有说明部 分、语句执行部分和异常处理部分的有名的PL/SQL块。与 包类似,触发器必须存储在数据库中,并且不能被块进行 本地化说明。但是,对于过程而言,可以从另一个块中通 过过程调用显式地执行一个过程,同时在调用时可以传递 参数。对于触发器而言,当触发事件发生时就会显式地执 行该触发器,并且触发器不接受参数。
注释:
· 参数MAXOPENCURSORS限制在一个数据库中可用 的关联触发器的个数,其缺省值为32。
★ 写触发器的源代码之前,先确定好其触发时间、触发事 件及触发器的类型。 内容 触发时间 触发事件 描述 与触发事件的时间次序 触发触发器的数据操作 事件类型 触发器体被执行的次数 可能值 ● BEFORE ● AFTER ● INSERT ● UPDATE ● DELETE ● Statement ● ROW 完整的 PL/ SQL块
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[FORM] Oracle Forms 触发器执行顺序 Forms, Oracle, 触发器, 顺序 Introduction ------------

This document lists the order in which triggers fire in Oracle Forms 4.5: o The first column, Action, describes the function to be performed (e.g. deleting a record). o The second column, Trigger Firing Order, describes the order in which triggers fire after a function is performed. o The third column, Level, describes the level (form, block, item) at which the trigger fires. This was accomplished by creating a form with all the triggers invoked. If a trigger could fire at all levels, it was included at all levels. Such a trigger fires at the lowest level at which it is defined.

Key triggers and triggers which fire via buttons or check boxes are not included.

This bulletin does not cover every contingency and covers only the most commonly used actions.

Action Trigger Firing Order Level ------ -------------------- ----- Runform 1. Pre-Logon Form 2. On-Logon Form 3. Post-Logon Form 4. Pre-Form Form 5. When-Create-Record Block 6. Pre-Block Block 7. Pre-Record Block 8. Pre-Text-Item Item 9. When-New-Form-Instance Form 10. When-New-Block-Instance Block 11. When-New-Record-Instance Block 12. When-New-Item-Instance Item *********** Enter Query 1. Post-Text-Item Item 2. Post-Record Block 3. When-Clear-Block Block 4. When-New-Record-Instance Block 5. When-New-Item-Instance Item

Note: If you define the Key-ENTQRY trigger, this is the only trigger which fires in an Enter Query situation.

***************** Execute Query After Enter Query 1. Pre-Query Block 2. Pre-Select Block 3. On-Select Block 4. When-Clear-Block Block 5. Post-Select Block 6. On-Fetch Block 7. On-Close Form 8. When-Clear-Block Block

Note: If you define the Key-EXEQRY trigger, this is the only trigger which fires in an Execute Query situation.

************* Execute Query Without Enter Query 1. Post-Text-Item Block 2. Pre-Query Block 3. Pre-Select Block 4. On-Select Block 5. Post-Select Block 6. On-Fetch Block 7. On-Close Form 8. When_Create_Record Block 9. Pre-Record Block 10. Pre-Text-Item Item 11. When-New-Record-Instance Block 12. When-New-Item-Instance Item

**** Exit 1. Post-Text-Item Item 2. Post-Record Block 3. Post-Block Block 4. Post-Form Form 5. On-Rollback Form 6. Pre-Logout Form 7. On-Logout Form 8. Post-Logout Form

************** Next Field and Previous field 1. When-New-Item-Instance Item

*************** Next Record and Previous Record 1. When-New-Record-Instance Block 2. When-New-Item-Instance Item

************** Next Block and Previous Block 1. Post-Text-Item Item 2. Post-Record Block 3. Post-Block Block 4. When-Create-Record Block 5. Pre-Block Block 6. Pre-Record Block 7. Pre-Text-Item Block 8. When-New-Block-Instance Block 9. When-New-Record-Instance Block 10. When-New-Item-Instance Form

******************* Records Are Queried 1. Post-Query Block 2. Post-Change Block 3. Post-Change Item 4. Post-Change Block 5. Post-Change Block Go back to Post-Query

NOTE: This cycle is repeated for each record retrieved.

********************** No Records Are Queried 1. When-New-Record-Instance Block 2. When-New-Item-Instance Item

NOTE: To observe this Trigger Firing Order: a. Enter a query. b. Enter a nonexistent record. c. Execute the query.

The two triggers listed above, the Enter Query triggers, and the Execute Query triggers fire.

************* Create Record 1. Post-Change Block 2. When-Validate-Item Block 3. Post-Text-Item Block 4. When-Validate-Record Block 5. Post-Record Block 6. Post-Block Block 7. On-Savepoint Form 8. Pre-Commit Form 9. Pre-Insert Block 10. On-Insert Form 11. Post-Insert Block 12. Post-Forms-Commit Form 13. On-Commit Form 14. Post-Database-Commit Form 15. Pre-Block Block 16. Pre-Record Block 17. Pre-Text-Item Block 18. When-New-Item-Instance Form

************* Update Record 1. When-Database-Record Block 2. Post-Change Block 3. When-Validate-Item Block 4. Post-Text-Item Block 5. When-Validate-Record Block 6. Post-Record Block 7. Post-Block Block 8. On-Savepoint Form 9. Pre-Commit Form 10. Pre-Update Block 11. On-Update Block 12. Post-Update Block 13. Post-Forms-Commit Form 14. On-Commit Form

Here the transaction is complete and one record added. 15. Post-Database-Commit Form

相关文档
最新文档