oracle触发器_第1页
oracle触发器_第2页
oracle触发器_第3页
oracle触发器_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

开发篇之开发篇之 Oracle 触发器心得触发器心得 实在对象如表格 Sequence 索引等建在本应用对应的用户表空间中 其他对象如视 图 别名创建在 Apps 下 常见错误是新手把表建在 APPS 下 以后又来建别名 这个时候 删除别名时会报对象不存在 而建别名的时候又报对象已存在 如果把脚本保存在文件里面 注意一个块比如一个创建视图的语句不要有空行 否则 会出现如下情况 把语句拷贝到 SQL Window 能正常运行 用 执行文件却报错 如果要执行 execute query 注意要 go block 到适当的 Block 但是 go block 是个 受限过程 并不一定都能成功 Master detail 关系 block both are database block each block has one item based on database displayed 在 PL SQL Develop 中没有环境变量 所以如果要查询多组织的 View 需要先执行设 置环境变量函数 BEGIN fnd client info set org context 83 END GLOBAL 变量对于所有 form 有效 可能是同一个应用 这个尚未验证 而不仅仅是 你所 开发的 form 变量比如 Global 和 Parameter 的初始化应该在 pre form 里面 在 when new form instance 里面初始 化不行 因为 when new form instance 是在进入第一 个导航块的第一个 item 之后才促发的没有属性指名 Block 的记录数 不过可以 通过 GET BLOCK PROPERTY QUERY HITS 取得查询到的记录数 hide view 并没有真正 hide 一个 画布 只是放到最下层 所以如果上层的画布没有完全覆盖下层画布 下层的画布很可能 用户还看 得到 show view 则是把画布放在最上层 lov 验证的时候是验证第一个可见的列 并且会把其他的返回值返回给各个 Item 而 不是仅仅验证而已 lov 的查询一般是针对第一列 但是如果我们把 放在最前面 则可以查 询所有列 用 Execute query 执行查询的时候 会把 Copy Value From Item 里面的那个 Item 的 值自动作为查询条件 当创建记录的时候也会直接用该值初始化 而且不改变记录的状态 在更新记录的时候不知道会不会 Copy 过来尚未验证 Get Item property 的时候用 ENFORCE KEY 属性 但不能 Set 该属性在 Master detail 设置的时候自 动创建 删除的 时候自动删除 如果不希望 Copy Value From Item 影响查询结果 可以在 Pre Query 里面 把 Item 的值设为 null app query reset block name 如果第一次调用 会 把当前的 DEFAULT WHERE 然 后什么都不做 以后再来调用的时候则会把第一次设置的 DEFAULT WHERE 用 set block property SAA HEADERS DEFAULT WHERE 设置回来 具体请参考 app core 库 When create record 的时候给 Item 赋值不改变记录状态 Sequence 如果我们在 Item 的 Initial Value 里面赋值 那么假如用户 Focus To 新记录 又回到老记录 如此 反复 Sequence 会不断变大的 SQL Order BY 的时候 null 值排在最后 这个一般不符合实际要求 可以这样解决 ORDER BY nvl Geography Code chr 0 解决 Trigger 顺序 1 pre commit 块 1 的 pre insert on insert post insert 块 2 的 pre insert on insert post insert post forms commit Trigger 顺序 2 when list changed 在前 Validation item 在后 因为 Validation item 是在要离 开这个 item 的时候才促发的 Trigger 顺序 3 pre form when create record pre block when new forms instance when validate record on insert post forms 当定位到主块的一个记录 会促发子块的 when clear record 事件和 when create record 事件 问题是如果主块的是新记录 未保存 在子块的 when create record 里 面取主块的任何东西 居然是主块 的上一次获得焦点的记录的东西 连用取块的当前记录 也是上一次获得焦点的记录 Trigger 顺序 4 post changed 在 when validate item 之前 所有的 when validate 事件是当 forms 自己验证通过之后才促发的 禁用 Clear 功能可以通过在 Form 的 key clrblk 里面调用 app exception disabled 其实只是用 Bell 覆盖默认的执行 直接放在 TAB Page 上的 Item 和放在堆叠画布上的 Item 在设计时是无法 所见即所 得 所以建议把所有的 Item 根据需要放在不同的堆叠画布上再堆到 TAB Page 上伪列 Rownum 在排序之前就已经决定 如果想得到排序后的 Rownum 应当在嵌套一个 Select 语 句 另外 Where 语句中的 rownum 只能用 或者或者 在 SQL 中用 Over 的时候 如果整个语句没有 Order by 语句 最后的结果还是会排序 的 规则是先按 Over 里面的 Partition 排序 在按 Over 里面的 Order by 排序 原因可能 和分析函数的处理顺序有关 8ifunctions pdf 有详细介绍 先查询到数据 Join Where Group By Having 再运算分析函数 先分区 然后排序 再算 Slide Windows 最后计算 最后是 Order By 另外 一个疑问 我测试到的一个结果 Group By 好像无法影响 Partition 可是按照 8ifunctions pdf 的说法 应该先执行 Group By 的 是不是因为 Group By 只是在第一阶段的处理时作用在集合函数上 之后进入第二阶段的处 理就没用了 同事在装 8i 的时候 连安装界面都没出来 而我机器可以装 后来才知道原来他的 机器是 P4 无法正常安装 实际执行的 Where 条件 是我们设置 DEFAULT WHERE 再加上通过赋过值的 Item 注意 APP FIND query range 已经重载过 我们调用的时候可以不 区分 query number range 或者 query date range 观察其代码 发现也是通过给 Item 赋值来 影响查询的 只不过是赋值的 时候 可能是加上 between 或 to dat 的错误 所以记得把字段长度加长 比如 1000 总的来说 碰到 From to 的要小心长度 当修改子类的时候 会自动更改很多属性 特别是 Required 一定要注意 当对块进行刷新时 会修改很多 Item 的属性 别以为你设置过了 Oracle 就会记住 我碰到的情况是 Insert Allowed 等被自动改掉了 即使我的子类设置为 Text Item Display Only 两个变量 如果都为 Null 判断还是不相等 所以必须用 a1 is null and a2 is null 所以在 On lock 里面的 if 条件 我们可以把所以不可以为空的字段都写成允许为空 的形式 一般来说 系统变量是很好用的 然而有时候并非如此 比如 Current Record get block property blockname Current Record 的结果并非总是一 样的 后者更加保险 特别是刚打开 Form 的时候 在 WHEN NEW RECORD INSTANCE 里面 前者是 0 后者是 1 表示一个单引号 表示两个单引号 应该是这样理解 一个单引号表示转 义字符 首尾两个单引号里面的内容表示字符串 重启 Application cd APPLCSF cd scripts cd PROD adstpall sh apps apps adstrtal sh apps apps Trigger 顺序 5 post query 只有在界面可见的记录才会促发 记录从不可见变为可见时促发 促发 过的记录不再促发 保存的时候会引发 Post Item Record Block 事件 因为要 Navigate 到 Form 数据库 org id 初始值 to number decode substrb userenv CLIENT INFO 1 1 null substrb userenv CLIENT INFO 1 10 给非数据库 Item 赋值 new 记录会变成 insert 所以就不能按 F11 了 query changed 记录不变 new 块会变成 query query changed 块不变 对 On lock 的理解 由于先入为主的缘故 开始一直很苦恼 为什么 If 里面只用 了 一个 Return Form 怎么知道要锁否 后来才知道 On 类型的数据库触发器是替换型的 On lock 也不例外 所以只要 On lock 不 Raise 什么东西出来 Form 就认为是锁成功了 至 于实际的锁 我们有 Select For Update 来完成 至于 If 判断只是进行更加严格的判 定 对 Find 的理解 开始也很纳闷 为什么在 Pre query 里面直接给 Item 赋 值就可 不用自己拼语句 现在也逐渐发现里面大有文章 回想 F11 这个时候的 block 其实是处 于 Enter query 状态 输入的东西 Form 会自 动拼成 Where 语句 当然还要加上原来的 default where 如果有 Copy from item 也要加上 对于每个 Item 上输入的值 一般 是用 如果有 就解析为 like 如果有 则把后边的表达式 比如 between 甚至是 子查询 直接作为条件 而当 form 内部执行堆栈 Navigate 到 Pre query 时 blo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论