oracle_form_常用Trigger的触发时机-执行顺序
- 格式:doc
- 大小:124.50 KB
- 文档页数:6
oracle触发器工作原理Oracle数据库中的触发器是一种存储过程,它在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。
触发器可以用于实现数据一致性、审计、业务规则验证和复杂的数据处理逻辑。
以下是Oracle触发器工作原理的基本概述:1.定义与激活:在Oracle中,通过使用CREATE TRIGGER语句创建触发器,指定其名称、触发时机(BEFORE或AFTER)、触发事件(INSERT、UPDATE、DELETE或COMMIT等)以及作用的对象(表或视图)。
2.触发时机:BEFORE触发器会在实际操作之前执行,此时可以查看并修改将要插入、更新或删除的数据。
AFTER触发器则在实际操作完成之后执行,此时只能查看已经更改后的结果。
3.触发上下文:对于INSERT操作,触发器可以通过:NEW伪记录访问被插入的新行数据。
对于UPDATE操作,触发器同时可以获得:OLD和:NEW伪记录,分别代表更新前的老数据和更新后的新数据。
对于DELETE操作,触发器可以通过:OLD伪记录访问即将被删除的行数据。
4.执行逻辑:触发器内的PL/SQL代码会根据触发条件进行执行,可以包含任何合法的PL/SQL命令,包括对其他表的操作、控制流语句、异常处理等。
5.事务处理:触发器是事务的一部分,所以它们遵循ACID属性,并且其行为受当前事务的影响。
例如,如果事务回滚,则触发器所做的所有变更也会随之回滚。
6.实例应用:举例来说,一个AFTER INSERT触发器可能用来记录新插入数据到审计表中;而一个BEFORE UPDATE触发器可能用于检查更新的数据是否满足某些业务规则,如果不满足则阻止更新操作。
总之,Oracle触发器是数据库系统内嵌的一种自动化机制,它在特定数据库事件发生时自动执行预定义的逻辑,为确保数据完整性和业务规则得以强制执行提供了强大的支持。
oracle forms 句法详解OracleForms是一个被广泛应用于企业级应用程序开发的集成开发环境。
其句法是开发OracleForms应用程序的关键,因此本文将对Oracle Forms句法进行详细解释。
一、基本语法1.块(Block):Oracle Forms应用程序是由块(Block)构成的,每个块(Block)都是Oracle Forms对象的容器。
2.对象(Object):Oracle Forms中存在多种对象(Object),包括文本框、下拉框、按钮等等。
每个对象(Object)都包含了一定的属性和事件,可以通过代码来实现操作。
3.触发器(Trigger):触发器是指当用户执行某个操作时,Oracle Forms会自动调用一些特定的代码。
例如当用户单击一个按钮时,Oracle Forms会调用该按钮的触发器来执行一些操作。
二、Forms句法1.使用PL/SQL代码块BEGIN-- PL/SQL代码END;2. IF-THEN-ELSE条件语句IF condition THEN-- 代码块1ELSE-- 代码块2END IF;3. FOR循环语句FOR i IN 1..10 LOOP-- 代码块END LOOP;4. WHILE循环语句WHILE condition LOOP-- 代码块END LOOP;5. CASE语句CASE variableWHEN value1 THEN-- 代码块1WHEN value2 THEN-- 代码块2ELSE-- 代码块3END CASE;6.函数调用variable := function_name(arguments);7.过程调用procedure_name(arguments);8.变量声明variable_name datatype;9.变量赋值variable_name := value;10.游标声明CURSOR cursor_name IS SELECT statement;以上是Oracle Forms句法的一些基本语法,掌握这些基本语法能够使开发Oracle Forms应用程序变得更加容易。
常用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触发器执行顺序2010-9-13表:emp--创建包变量CREATE PACKAGE EMP_PACKAGE lSold_sum NUMBER;--存放原来薪水总额new_sum NUMBER;--存放新的薪水总额test1 number;--before upate 对应值1test2 number;--before update each row 对应值2test3 number;--after update each row 对应值3test4 number;--after update 对应值4END;注:每个触发器执行都会对应上面变量进行赋值业务规则1:给员工加薪时,要扣税,扣税的规则是,原来薪水在5000或以上的扣除总薪水的10%,小于5000的扣除总薪水的20%业务规则2:如果目前全体员工的总薪水大于或等于15000,则不能加薪了;如果总薪水小于10000,则不能减薪了。
一.不同类型触发器(行级和语句)1.before触发器--原来总薪水总额(语句)CREATE OR REPLACE TRIGGER before_update_salaryBEFORE UPDATE ON EMPbeginSELECT SUM(salary)INTO EMP_PACKAGE.old_sum FROM EMP;EMP_PACKAGE.TEST1:=1;/*RAISE_APPLICATION_ERROR(-20003,nvl(EMP_PACKAGE.test2,0));*/end;--更改每行数据(行级)CREATE OR REPLACE TRIGGER before_add_salaryBEFORE UPDATE ON EMPFOR EACH rowBEGINif:new.salary>:OLD.salary THEN --加薪if:old.salary <5000THEN:NEW.salary :=:NEW.salary*0.8;RAISE_APPLICATION_ERROR(-20004,nvl(EMP_PACKAGE.test1,0));EMP_PACKAGE.TEST2:=2;ELSE:NEW.salary :=:NEW.salary*0.9;RAISE_APPLICATION_ERROR(-20005,nvl(EMP_PACKAGE.test1,0));EMP_PACKAGE.TEST2:=2;END IF;END IF;END;---现在对empno =5的员工薪水改为8000,执行得到以下报错(屏蔽before_update_salary报错)--现在对empno =5的员工薪水改为8000,执行得到以下报错(屏蔽before_add_salary报错)2.after触发器--判断员工新薪水(行级)create or replace trigger after_update_salary_rowafter UPDATE ON EMPfor each rowbeginif:new.salary>:OLD.salary THENif:new.salary <5000THEN/*RAISE_APPLICATION_ERROR(-20006,nvl(EMP_PACKAGE.test4,0));*/EMP_PACKAGE.test3:=3;ELSE/* RAISE_APPLICATION_ERROR(-20007,nvl(EMP_PACKAGE.test4,0));*/ EMP_PACKAGE.test3:=3;END IF;END IF;end;----判断是否可以加薪或减薪(语句)create or replace trigger after_update_salaryafter UPDATE ON EMPbeginSELECT SUM(salary)INTO EMP_PACKAGE.new_sum FROM EMP;if EMP_PACKAGE.new_sum> EMP_PACKAGE.old_sum thenif EMP_PACKAGE.old_sum>=15000thenRAISE_APPLICATION_ERROR(-20008,nvl(EMP_PACKAGE.test3,0));EMP_PACKAGE.test4:=4;end if;elseif EMP_PACKAGE.old_sum<10000thenRAISE_APPLICATION_ERROR(-20009,nvl(EMP_PACKAGE.test3,0));EMP_PACKAGE.test4:=4;end if;end if;end;--现在对empno =5的员工薪水改为8000,执行得到以下报错(屏蔽after_update_salary_row 报错)--现在对empno =5的员工薪水改为8000,执行得到以下报错(屏蔽after_update_salary报错)综合以上结果:oracle 一个表上的多个触发器的执行顺序如下:before 语句trigger->before 行级trigger->after 行级trigger->after 语句trigg er。
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触发器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指出触发器的触发时序分别为前触发和后触发⽅式,前触发是在执⾏触发事件之前触发当前所创建的触发器,后触发是在执⾏触发事件之后触发当前所创建的触发器。
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.删除触发器。
oracle trigger 语法Oracle触发器(trigger)是在表中执行的一段代码,用于在数据库中自动执行某些操作。
在执行特定操作时,可以使用Oracle触发器,例如在插入或更新记录时要向某个表添加新数据。
以下是Oracle触发器的语法:```CREATE [ OR REPLACE ] TRIGGER trigger_name{ BEFORE | AFTER } { INSERT | UPDATE | DELETE }ON table_name[ FOR EACH ROW ][ FOLLOWS another_trigger ][ ENABLE / DISABLE ][ DECLARE ][ BEGINtrigger_body;END; ]```- `CREATE [ OR REPLACE ] TRIGGER`:创建一个新的触发器或替换已经存在的触发器。
- `trigger_name`:触发器的名称。
- `{ BEFORE | AFTER }`:指定触发器在被触发的事件之前或之后执行。
- `{ INSERT | UPDATE | DELETE }`:指定触发器是在插入、更新还是删除时触发。
- `ON table_name`:指定触发器应用于哪个表。
- `[ FOR EACH ROW ]`:指定此触发器是否应逐行执行。
- `[ FOLLOWS another_trigger ]`:指定创建触发器的顺序。
- `[ ENABLE / DISABLE ]`:启用或禁用触发器。
- `[ DECLARE ]`:定义触发器所需的任何变量。
- `[ BEGIN trigger_body; END; ]`:指定在触发器被触发时所要执行的代码块。
其中,`trigger_body`是必须的代码块,它包含当触发器被触发时要执行的SQL语句。
请注意,Oracle触发器还有其他语法选项和功能,这里只是简单列出了基本语法。
Form属性、内置子程序、触发器、系统变量一、属性1.1 通用属性名称(Name)子类信息(Subclass Information)备注(Comments)标题(Title)方向(Direction)字体名称(Font Name)字体大小(Font Size)字体粗细(Font Weight)字体风格(Font Style)字体间距(Font Spacing)前景色(Foreground)背景色(Background)填充图案(Fill Pattern)字符模式逻辑属性(Character Mode Logical Attribute)黑底白字(White on Black)视觉属性组(Visual Attribute Group)当前记录视觉属性组(Current Record Visual Attribute Group?/div> 宽度(Width)高度(Height)立体(Bevel)显示水平滚动条(Show Horizontal Scroll Bar)显示垂直滚动条(Show Vertical Scroll Bar)可见(Visible)X轴坐标(X Position)Y轴坐标(Y Position)启用(Enabled)标签文本(Label)允许查询(Query Allowed)允许插入(Insert Allowed)允许更新(Update Allowed)显示滚动条(Show Scroll Bar)带滚动条画布(Scroll Bar Canvas)滚动条标签页(Scroll Bar Tab Page)滚动条方向(Scroll Bar Orientation)滚动条的X轴坐标(Scroll Bar X Position)滚动条的Y轴坐标(Scroll Bar Y Position)滚动条的宽度(Scroll Bar Width)滚动条的高度(Scroll Bar Height)反转方向(Reverse Direction)显示的记录数(Number of Records Displayed)提取的最大记录数(Maximum Records Fetched)最大查询时间(Maximum Query Time)最大长度(Maximum Length)固定长度(Fixed Length)大小写限制(Case Restriction)列名(Column Name)自动跳离(Automatic Skip)折行风格(Wrap Style)数据类型(Data Type)记录间的距离(Distance Between Records)图标文件名(Icon Filename)需要(Required)帮助提示(Hint)1.2 表格模块对象属性控制台窗口(Console Window)菜单源(Menu Source)菜单模块(Menu Module)初始菜单(Initial Menu)菜单风格(Menu Style)推迟实行“需要”属性(Defer Required Enforcement)菜单角色(Menu Role)鼠标导航限制(Mouse Navigation Limit)第一导航数据块(First Navigation Data Block)验证单元(Validation Unit)交互模式(Interaction Mode)孤立模式(Isolation Mode)坐标系统(Coordinate System)字符单元宽度(Character Cell Width)字符单元高度(Character Cell Height)实体单位(Real Unit)使用3D控件(Use 3D Controls)表格水平工具条画布(Form Horizontal Toolbar Canvas)表格垂直工具条画布(Form Vertical Toolbar Canvas)保存点模式(Savepoint Mode)1.3 触发器对象属性触发器风格(Trigger Style)触发器文本(Trigger Text)在输入-查询模式中触发(Fire in Enter-Query Mode)执行层次(Execution Hierarchy)在“键盘帮助”中显示(Display in ‘Keyboard Help’)“键盘帮助”文本(‘Keyboard Help’Text)触发器类型(Trigger Type)1.4 警告对象属性信息(Message)警告风格(Alert Style)按钮1标签(Button1 Label)按钮2标签(Button2 Label)按钮3标签(Button3 Label)缺省警告按钮(Default Alert Button)1.5 数据块对象属性导航器风格(Navigation Style)前一个导航数据块(Previous Navigation Data Block)下一个导航数据块(Next Navigation Data Block)查询数组大小(Query Array Size)缓冲的记录数(Number of Records Buffered)查询所有记录(Query All Records)记录方向(Record Orientation)单记录(Single Record)数据库数据块(Database Block)使用主键(Enforce Primary Key)查询数据源类型(Query Data Source Type)查询数据源名称(Query Data Source Name)查询数据源列(Query Data Source Columns)查询数据源参数(Query Data Source Arguments)WHERE子句(WHERE Clause)ORDER BY子句(ORDER BY Clause)优化提示(Optimizer Hint)锁定模式(Locking Mode)允许删除(Delete Allowed)键模式(Key Mode)仅更新修改的列(Update Changed Columns Only)实行列安全控制(Enforce Column Security)DML数据目标类型(DML Data Target Type)DML数据目标名称(DML Data Target Name)插入过程名称(Insert Procedure Name)插入过程结果集列(Insert Procedure Result Set Columns)插入过程参数(Insert Procedure Arguments)更新过程名(Update Procedure Name)更新过程结果集列(Update Procedure Result Set Columns)更新过程参数(Update Procedure Arguments)删除过程名(Delete Procedure Name)删除过程结果集列(Delete Procedure Result Set Columns)删除过程参数(Delete Procedure Arguments)锁定过程名(Lock Procedure Name)锁定过程结果集列(Lock Procedure Result Set Columns)锁定过程参数(Lock Procedure Arguments)DML数组大小(DML Array Size)预计算汇总(Precompute Summaries)在数据块菜单中列出(Listed In Block Atribute)数据块描述(Data Block Description)1.6 项对象属性项类型(Item Type)对齐(Justification)多行(Multi-Line)隐藏数据(Conceal Data)保持光标位置(Keep Cursor Position)弹出式菜单(Popup Menu)文件名(Filename)执行模式(Execution Mode)通讯模式(Communication Mode)数据源数据块(Data Source Data Block)数据源X轴(Data Source X Axis)数据源Y轴(Data Source Y Axis)提交时更新(Update on Commit)复选时的值(Value when Checked)未复选时的值(Value when Unchecked)其它值的复选框映射(Check Box Mapping of Other Values)图象格式(Image Format)图象深度(Image Depth)压缩质量(Compression Quality)显示质量(Display Quality)显示面板(Show Palette)大小风格(Sizing Style)列表中的元素(Elements in List)列表风格(List Style)访问键(Access Key)图标化(Iconic)缺省按钮(Default Button)声音格式(Sound Format)音频通道(Audio Channels)压缩(Compress)声音质量(Sound Quality)可用键盘导航(Keyboard Navigable)前一个导航项(Previous Navigation Item)下一个导航项(Next Navigation Item)鼠标导航(Mouse Navigate)初始值(Initial Value)格式掩码(Format Mask)最高允许值(Highest Allowed Value)最低允许值(Lowest Allowed Value)从项中复制值(Copy Value from Item)用项同步化(Synchronize with item)计算模式(Calculation Mode)公式(Formula)汇总函数(Summary Function)汇总块(Summarized Block)汇总项(Summarized Item)显示的项数(Number of Item Displayed)主键(Primary Key)仅查询(Query Only)查询长度(Query Length)不区分大小写的查询(Case Insensitive Query)仅为NULL则更新(Update Only if NULL)锁定记录(Lock Record)值列表(List of Values)列表X轴位置(List X Position)列表Y轴位置(List Y Position)编辑器(Editor)编辑器的X轴位置(Editor X Position)编辑器的Y轴位置(Editor Y Position)画布(Canvas)标签页(Tab Page)释放(Rendered)显示播放按钮(Show Play Button)显示录制按钮(Show Record Button)显示倒回按钮(Show Rewind Button)显示快进按钮(Show Fast Forward Button)显示音量控制(Show Volume Control)显示时间显示器(Show Time Indicator)显示滑杆(Show Slider)提示(Prompt)提示显示风格(Prompt Display Style)提示文本对齐(Prompt Justification)提示附件边缘(Prompt Attachment Edge)提示对象对齐(Prompt Alignment)提示附件偏移(Prompt Attachment Offset)提示对象对齐偏移(Prompt Alignment Offset)提示阅读顺序(Prompt Reading Order)提示视觉属性组(Prompt Visual Attribute Group)提示字体名(Prompt Font Name)提示字体大小(Prompt Font Size)提示字体粗细(Prompt Font Weight)提示字体风格(Prompt Font Style)提示字体间距(Prompt Font Spacing)提示前景色(Prompt Foreground Color)提示背景色(Prompt Background Color)提示填充图案(Prompt Fill Pattern)提示(Hint)自动显示提示(Display Hint Automatically)工具提示(Tooltip)工具提示视觉属性组(Tooltip Visual Attribute Group)初始键盘状态(Initial Keyboard State)读取顺序(Reading Order)键盘状态(Keyboard State)1.7 关系对象属性从数据块(Detail Data Block)关联条件(Join Condition)删除记录行为(Delete Record Behavior)防止无主记录操作(Prevent Masterless Operations)协调(Coordination)协调状态(Coordination States)1.8 画布对象属性画布类型(Canvas Type)输入时置前(Raise On Entry)弹出式菜单(Popup Menu)窗口(Window)画布上的视图端口X轴位置(Viewport X Position Canvas)画布上的视图端口Y轴位置(Viewport Y Position Canvas)视图端口的X轴位置(Viewport X Position)视图端口的Y轴位置(Viewport Y Position)视图端口高度(Viewport Height)视图端口宽度(Viewport Width)标签风格(Tab Style)标签附件边缘(Tab Attachment Edge)1.9 框架对象属性布局数据块(Layout Data Block)更新布局(Update Layout)布局风格(Layout Style)框架对齐(Frame Alignment)单对象对齐(Single Object Alignment)水平边距(Horizontal Margin)垂直边距(Vertical Margin)水平对象偏移(Horizontal Object Offset)垂直对象偏移(Vertical Object Offset)允许扩展(Allow Expansion)收缩包容(Shrink wrap)垂直填充(Vertical Fill)每行最多对象数(Maximum Objects Per Line)起始提示对齐(Start Prompt Alignment)起始提示偏移(Start Prompt Offset)顶部提示对齐(Top Prompt Alignment)顶部提示偏移(Top Prompt Offset)允许多行提示(Allow Multi-Line)允许顶部-附加提示(Allow Top-Attached)允许起始-附加提示(Allow Start-Attached)框架标题(Frame Title)框架标题对齐(Frame Title Alignment)框架标题偏移(Frame Title Offset)框架标题间隔(Frame Title Spacing)框架标题阅读顺序(Frame Title Reading Order)滚动条对齐(Scroll Bar Alignment)框架标题视觉属性组(Frame Title Visual Attribute Group)1.10 标签页对象属性1.11 编辑器对象属性底部标题(Bottom Title)1.12 值表(Lovs)对象属性列表类型(List Type)记录组(Record Group)列映射属性(Column Mapping Properties)显示之前过滤(Filter Before Display)自动显示(Automatic Display)自动刷新(Automatic Refresh)自动选择(Automatic Select)自动位置(Automatic Position)自动列宽(Automatic Column Width)自动跳离(Automatic Skip)1.13 表格对象组对象属性1.14 表格参数对象属性参数数据类型(Parameter Data Type)参数初始值(Parameter Initial Value)1.15 表格属性类对象属性1.16 记录组对象属性记录组类型(Record Group Type)记录组查询(Record Group Query)列规格(Column Specifications)1.17 表格视觉对象属性1.18 窗口对象属性主画布(Primary Canvas)水平工具条画布(Horizontal Toolbar Canvas)垂直工具条画布(Vertical Toolbar Canvas)窗口风格(Window Style)模式(Modal)退出时隐藏(Hide on Exit)允许关闭(Close Allowed)允许移动(Move Allowed)允许重新调整大小(Resize Allowed)允许最大化(Maximize Allowed)允许最小化(Minimize Allowed)最小化标题(Minimized Title)继承菜单(Inherit Menu)1.19 菜单模块对象属性主菜单(Main Menu)菜单目录(Menu Directory)菜单文件名(Menu Filename)启动代码(Startup Code)使用安全性(Use Security)模块角色(Module Roles)1.20 菜单对象属性子标题(Subtitle)底部标题(Bottom Title)分离式菜单(Tear-Off Menu)1.21 菜单项对象属性菜单项类型(Menu Item Type)魔术项(Magic Item)菜单项单选组(Menu Item Radio Group)命令类型(Command Type)命令文本(Command Text)键盘加速键(Keyboard Accelerator)在菜单中可见(Visible in Menu)在水平菜单工具条中可见(Visible in Horizontal Menu Toolbar)在垂直菜单工具条中可见(Visible in Vertical Menu Toolbar)菜单中的图标(Icon in Menu)菜单项代码(Menu Item Code)项角色(Item Roles)无权限显示(Display without Privilege)帮助描述(Help)1.22 菜单对象组对象属性1.23 菜单参数对象属性隐藏数据(Secure)关联菜单(Associated Menus)菜单参数初始值(Menu Parameter Initial Value)1.24 菜单视觉属性对象属性二、内置子程序2.1 公共内置子程序GENERATE_SEQUENCE_NUMBERID_NULLRUN_PRODUCTVALIDATE2.2 应用内置子程序DO_KEYGET_APPLICATION_PROPERTY HOSTPAUSESET_APPLICATION_PROPERTY USER_EXIT2.3 表格内置子程序BELLBREAKCALL_FORMCALL_INPUTCLEAR_FORMCLOSE_FORMCOMMIT_FORMDEBUG_MODEENTERERASEEXECUTE_TRIGGEREXIT_FORMFIND_FORMFORM_FAILUREFORM_FATALFORM_SUCCESSGET_FORM_PROPERTYGO_FORMHELPNEW_FORMNEXT_FORMOPEN_FORMPOSTPREVIOUS_FORM REDISPLAYREPLACE_MENUSET_FORM_PROPERTY SHOW_KEYSSHOW_MENU SYNCHRONIZE2.4 块内置子程序BLOCK_MENUCLEAR_BLOCKFIND_BLOCKGET_BLOCK_PROPERTYGO_BLOCKNEXT_BLOCKPREVIOUS_BLOCKSET_BLOCK_PROPERTY2.5 记录内置子程序CHECK_RECORD_UNIQUENESS CLEAR_RECORDCREATE_QUERIED_RECORD CREATE_RECORDDELETE_RECORDDOWNDUPLICATE_RECORDFIRST_RECORDGET_RECORD_PROPERTYGO_RECORDINSERT_RECORDLAST_RECORDLOCK_RECORDNEXT_RECORDNEXT_SETPREVIOUS_RECORD SCROLL_DOWNSCROLL_UPSELECT_RECORDSSET_RECORD_PROPERTYUPUPDATE_RECORD2.6 项内置子程序CHECKBOX_CHECKEDCLEAR_EOLCLEAR_ITEMCONVERT_OTHER_VALUECOPYCOPY_REGIONCUT_REGIONDEFAULT_VALUEDISPLAY_ITEMDUMMY_REFERENCE DUPLICATE_ITEMEDIT_TEXTITEMFIND_ITEMGET_FILE_NAMEGET_ITEM_INSTANCE_PROPERTY GET_ITEM_PROPERTYGET_RADIO_BUTTON_PROPERTY GO_ITEMIMAGE_ZOOMNAME_INNEXT_ITEMNEXT_KEYPASTE_REGIONPLAY_SOUNDPREVIOUS_ITEMREAD_IMAGE_FILEREAD_SOUND_FILE RECALCULATESELECT_ALLSET_ITEM_INSTANCE_PROPERTY SET_ITEM_PROPERTYSET_RADIO_BUTTON_PROPERTYWRITE_IMAGE_FILE WRITE_SOUND_FILE2.7 窗口内置子程序FIND_WINDOWGET_WINDOW_PROPERTY HIDE_WINDOWMOVE_WINDOWREPLACE_CONTENT_VIEW RESIZE_WINDOWSET_WINDOW_PROPERTY SHOW_WINDOW2.8 画布内置子程序FIND_CANVASFIND_VIEWGET_CANVAS_PROPERTY GET_VIEW_PROPERTYHIDE_VIEWPRINTSCROLL_VIEWSET_CANVAS_PROPERTY SET_VIEW_PROPERTY SHOW_VIEW2.9 标签页内置子程序FIND_TAB_PAGEGET_TAB_PAGE_PROPERTY SET_TAB_PAGE_PROPERTY 2.10 事务处理内置子程序ENFORCE_COLUMN_SECURITY FETCH_RECORDSFORMS_DDLISSUE_ROLLBACKISSUE_SAVEPOINT LOGONLOGON_SCREENLOGOUT2.11 查询内置子程序ABORT_QUERYCOUNT_QUERYENTER_QUERYEXECUTE_QUERY2.12 关系内置子程序FIND_RELATIONGET_RELATION_PROPERTY SET_RELATION_PROPERTY2.13 记录组内置子程序ADD_GROUP_COLUMNADD_GROUP_ROWCREATE_GROUPCREATE_GROUP_FROM_QUERY DELETE_GROUPDELETE_GROUP_ROWFIND_COLUMNFIND_GROUPGET_GROUP_CHAR_CELLGET_GROUP_DATE_CELLGET_GROUP_NUMBER_CELL GET_GROUP_ROW_COUNTGET_GROUP_SELECTIONGET_GROUP_SELECTION_COUNT POPULATE_GROUP POPULATE_GROUP_WITH_QUERY RESET_GROUP_SELECTION SET_GROUP_CHAR_CELLSET_GROUP_DATE_CELLSET_GROUP_NUMBER_CELL SET_GROUP_SELECTIONUNSET_GROUP_SELECTION 2.14 列表项内置子程序ADD_LIST_ELEMENT CLEAR_LISTDELETE_LIST_ELEMENT GET_LIST_ELEMENT_COUNT GET_LIST_ELEMENT_LABEL GET_LIST_ELEMENT_VALUE POPULATE_LIST RETRIEVE_LIST2.15 参数列表内置子程序ADD_PARAMETER CREATE_PARAMETER_LIST DELETE_PARAMETER DESTROY_PARAMETER_LIST GET_PARAMETER_ATTR GET_PARAMETER_LIST SET_PARAMETER_ATTR2.16 菜单内置子程序APPLICATION_PARAMETER BACKGROUND_MENUFIND_MENU_ITEMGET_MENU_ITEM_PROPERTY HIDE_MENUITEM_ENABLEDMENU_CLEAR_FIELD MENU_NEXT_FIELDMENU_PARAMETERMENU_PREVIOUS_FIELD MENU_REDISPLAYMENU_SHOW_KEYSNEXT_MENU_ITEM PREVIOUS_MENUPREVIOUS_MENU_ITEM QUERY_PARAMETERSET_INPUT_FOCUSSET_MENU_ITEM_PROPERTY SHOW_BACKGROUND_MENU SHOW_MENUTERMINATEWHERE_DISPLAY2.17 警告内置子程序FIND_ALERTSET_ALERT_BUTTON_PROPERTY SET_ALERT_PROPERTY SHOW_ALERT2.18 消息内置子程序CLEAR_MESSAGEDBMS_ERROR_CODEDBMS_ERROR_TEXTDISPLAY_ERRORERROR_CODE.ERROR_TEXTERROR_TYPEGET_MESSAGEMESSAGE.MESSAGE_CODEMESSAGE_TEXTMESSAGE_TYPE三、触发器3.1 键触发器Key-FnKey-Others3.2 On触发器On-Check-Delete-Master On-Check-UniqueOn-Clear-DetailsOn-CloseOn-Column-SecurityOn-CommitOn-CountOn-DeleteOn-ErrorOn-FetchOn-InsertOn-LockOn-LogonOn-LogoutOn-MessageOn-Populate-Details On-RollbackOn-SavepointOn-SelectOn-Sequence-NumberOn-Update3.3 Post触发器Post-BlockPost-ChangePost-Database-Commit Post-DeletePost-FormPost-Forms-CommitPost-InsertPost-LogonPost-LogoutPost-QueryPost-RecordPost-SelectPost-Text-ItemPost-Update3.4 Pre触发器Pre-BlockPre-CommitPre-DeletePre-FormPre-InsertPre-LogonPre-LogoutPre-QueryPre-RecordPre-SelectPre-Text-ItemPre-Update3.5 When触发器When-Button-Pressed When-Checkbox-Changed When-Clear-BlockWhen-Create-Record When-Custom-Item-Event When-Database-Record When-Form-Navigate When-Image-Activated When-Image-Pressed When-List-Activated When-List-Changed When-Mouse-ClickWhen-Mouse-DoubleClick When-Mouse-DownWhen-Mouse-EnterWhen-Mouse-LeaveWhen-Mouse-MoveWhen-Mouse-UpWhen-New-Block-InstanceWhen-New-Form-InstanceWhen-New-Item-InstanceWhen-New-Record-Instance When-Radio-ChangedWhen-Remove-RecordWhen-Tab-Page-ChangedWhen-Timer-ExpiredWhen-Validate-ItemWhen-Validate-RecordWhen-Window-ActivatedWhen-Window-ClosedWhen-Window-DeactivatedWhen-Window-Resized四、系统变量$$DATE$$$$DATETIME$$$$DBDATE$$$$DBDATETIME$$$$DBTIME$$$$TIME$$SYSTEM.BLOCK_STATUS SYSTEM.COORDINATION_OPERATION SYSTEM.CURRENT_BLOCK SYSTEM.CURRENT_DATETIME SYSTEM.CURRENT_FORM SYSTEM.CURRENT_ITEM SYSTEM.CURRENT_VALUE SYSTEM.CURSOR_BLOCK SYSTEM.CURSOR_ITEM SYSTEM.CURSOR_RECORDSYSTEM.CURSOR_VALUESYSTEM.CUSTOM_ITEM_EVENTSYSTEM.CUSTOM_ITEM_EVENT_PAR-AMETERSSYSTEM.DATE_THRESHOLDSYSTEM.EFFECTIVE_DATESYSTEM.EVENT_WINDOWSYSTEM.FORM_STATUSST_FORMST_QUERYST_RECORDSYSTEM.MASTER_BLOCKSYSTEM.MESSAGE_LEVELSYSTEM.MODESYSTEM.MOUSE_BUTTON_PRESSEDSYSTEM.MOUSE_BUTTON_SHIFT_STATESYSTEM.MOUSE_CANVASSYSTEM.MOUSE_FORMSYSTEM.MOUSE_ITEMSYSTEM.MOUSE_RECORDSYSTEM.MOUSE_RECORD_OFFSETSYSTEM.MOUSE_X_POSSYSTEM.MOUSE_Y_POSSYSTEM.RECORD_STATUSSYSTEM.SUPPRESS_WORKINGSYSTEM.TAB_NEW_PAGESYSTEM.TAB_PREVIOUS_PAGESYSTEM.TRIGGER_BLOCK.SYSTEM.TRIGGER_ITEMSYSTEM.TRIGGER_RECORDForm 中trigger 执行的顺序我总结了FORM的一些操作中TRIGGER的执行顺序。
1.FORM表单1.1 Forms运行模式1.1 Form表单模块属性1.2 Form挂默认菜单及工具条即Menu Module处用:DEFAULT&SMARTBAR 1.3 Form表单之多表单应用1.4 多表单间传递参数1.4 Form参数详细使用—一个窗体使用前一窗体参数参数提供了一种简便的机制,它用来设置Form启动时所需要的输入值。
参数的变量类型可以是CHAR、NUMBER或DATE,在设计Form时定义。
在应用程序执行CALL_FORM、OPEN_FORM、RUN_PRODUCT等内部子程序时,可以向一个FORM传送参数。
参数也可以由操作员在启动Form时,从命令行输入。
参数提供了一种简便的机制,它用来设置Form启动时所需要的输入值。
参数的变量类型可以是CHAR、NUMBER或DATE,在设计Form时定义。
在应用程序执行CALL_FORM、OPEN_FORM、RUN_PRODUCT等内部子程序时,可以向一个FORM传送参数。
参数也可以由操作员在启动Form时,从命令行输入。
1.4.1创建并引用参数在对象导航器中点中“参数”(PARAMETER),然后在工具条中点击“创建”图标,即可创建参数。
创建后要在其属性窗口中设置属性。
Data Type 设置为CHAR、NUMBER或DATE。
Default 参数的缺省值,必须与参数的数据类型和长度一致。
Length 参数可存贮的最长字符数。
它只对 CHAR型参数有效,最大为64K。
NUMBER型参数的缺省值为23字节,DATE型参数的缺省值为7字节。
Name 参数的名称。
在PL/SQL中,可以引用参数,或给参数赋值,方法是将保留字PARAMETER置于参数名之前,如::PARAMETER.P_NAME1 :=’Qilu _Rubber’;或:block.item := :PARAMETER.P_NAME1;除了在PL/SQL中直接引用参数外,你也可以在某些内部子程序中,或者在对象属性中引用参数。
常用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-INSTANCE
2.当填写一行记录完成后,光标移动到下一条记录的时候:
(1)WHEN-VALIDATE-RECORD
(只将填写的记录与数据库中已存在的记录作唯一性的验证,如果只是页面上的数据重复而数据库中没有与其重复的值则不会报错.)
(2)WHEN-NEW-RECORD-INSTANCE
(3)WHEN-NEW-ITEM-INSTANCE
3.当点击“保存”时
(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-INSTANCE
4.当光标移动到当前数据块中已经显示的行上时:
(1)WHEN-REMOVE-RECORD
(2)WHEN-NEW-RECORD-INSTANCE
(3)WHEN-NEW-ITEM-INSTANCE
当在该行上的不同ITEM移动时:
(4)WHEN-NEW-ITEM-INSTANCE
5.当要进行修改时(在记录中的某个项上进行了修改时):
(1)ON-LOCK
6.在修改完成后进行保存时:
(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-INSTANCE
7.删除一条记录时:
(1)ON-LOCK
(2)WHEN-REMOVE-RECORD
(3)KEY-DELREC
(4)WHEN-NEW-RECORD-INSTANCE
(5)WHEN-NEW-ITEM-INSTANCE
8.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-INSTANCE
9.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-INSTANCE
10.从查询状态(F11)转为输入状态(F4)时:(1)WHEN-CLEAR-BLOCK
(2)KEY-EXIT
(3)WHEN-NEW-RECORD-INSTANCE
(4)WHEN-NEW-ITEM-INSTANCE
11.手电筒查询过程:
(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-INSTANCE
12.点击“New”时:
(1)WHEN-NEW-RECORD-INSTANCE
(2)WHEN-NEW-ITEM-INSTANCE
13.点击“EditField”时:
(1)KEY-EDIT
14.点击“WindowHelp”时:
(1)KEY-HELP
15.点击“ClearRecord”时:
(1)WHEN-REMOVE-RECORD
(2)POST-QUERY
(3)WHEN-NEW-RECORD-INSTANCE
(4)WHEN-NEW-ITEM-INSTANCE
16.点击F4关闭时:
(1)KEY-EXIT
(2)POST-FORM
17.点击“CloseForm”按钮关闭时:
(1)KEY-EXIT
(2)POST-FORM
18.点击“Translations”按钮时:
(1)TRANSLATIONS
19.点击小叉号关闭时:
(1)WHEN-WINDOW-CLOSED
(2)CLOSE-WINDOW
(3)KEY-EXIT
(4)POST-FORM
20.选中LOV列表:
(1)KEY-LISTVAL
(2)WHEN-NEW-ITEM-INSTANCE
21.选中记录前面的小条时:
(1)WHEN-NEW-RECORD-INSTANCE
(2)WHEN-NEW-ITEM-INSTANCE(数据项级)(3)WHEN-NEW-ITEM-INSTANCE
22.光标上下移动时:
(1)WHEN-NEW-RECORD-INSTANCE
(2)WHEN-NEW-ITEM-INSTANCE。