技术开发 频道

ORACLE ERP开发之OracleForms基础(一)

  深入了解Forms的事务触发机制

  编写一个健壮的FORMS应用程序,免不了要做各种数据的检验动作。所以必须了解FORMS事务触发器的工作原理。其他类型的触发器相对来说比较好理解,就不详说了。

  ① FORMS处理事务分成发送(POST)和提交(COMMIT)两个阶段。这个跟JAVA中的事务操作类似,也就是Statement和Commit两个阶段。但FORMS一些规则比较死,也就是说规定好POST之前会触发PRE触发器之类等等。

  ② 事务触发器分成三类,PRE-XXX、ON-XXX、POST-XXX,它们的执行顺序可以直接从其英文缩写得出。

  例:执行INSERT操作,会按以下顺序进行。 1.1从数据项复制数据。 1.2触发PER-INSERT触发器。 1.3检查记录的惟一性。 1.4插入行到其表或者触发ON-INSERT触发器。 1.5触发POST-INSERT触发器。

  创建FORMS数据块的主从关系

  1、先创建两个数据块,当然这两个数据块在DB应该有外键的关系(不是一定要创建数据库外键关联哦?)。
        2、选择从表的数据块,然后点击菜单数据块向导。

  3、选择关联属性。

  非孤立:表示当有从记录时,不允许删除主记录(默认)。 级联:当删除主记录时,从记录也一起删除(推荐使用)。 孤立:当删除主记录时,从记录保留不变(不推荐使用)。 事实上,当选择不同的属性时,FORMS会在主数据块中,自动创建两个触发器 ON-POPULATE-DETAILS:当插入主数据块记录时,自动将主键赋值给从数据块外键字段。 ON-CHECK-DELETE-MASTER:实现从删除主数据块记录时,从数据块要执行何种操作。

        4、设置主键及报FRM-30100错误。 ①如果数据块属性设成使用主键,那么该数据块的ITEM必须有一个设成主键,否则报FRM-30100错误。 ②即使数据块设成不使用主键。但该块的查询数据源名称与DML数据目标名称不一致时,也是必须设至少一个ITEM为主键。否则报FRM-30100错误。如图:

  注:查询数据源与DML数据目标不一致时,数据INSERT、UPDATE、DELETE都会发生在DML数据目标那张表。 例如:以视图为查询数据源,而在数据表中仅保留ID。而查询时,自动匹配查询到相应的number、description 将视图的字段设置如下,否则会报无法找到这个字段之错误。

  5、主键赋值。 按数据库设计模式范式要求,每张表都应该有一个PRIMARY KEY。而且此字段一般不让用户操作,由sequence自动维护。我们可以数据块的PRE-INSERT触发器中加入代码:
        select hek_test_sq.nextval into :hek_test_headers.hid from dual;

4
相关文章