Oracle Forms Execute_query给出了FRM-40737错误

时间:2016-01-14 12:48:14

标签: oracleforms oracle-ebs

我收到错误

  

FRM - 40737 - 非法限制程序GO_BLOCK in   WHEN-VALIDATE-RECORD触发器。

我的代码是

IF event_name = 'WHEN-VALIDATE-RECORD'
      THEN
         IF (form_name = 'OEXOEORD' AND block_name = 'ORDER')
         THEN
            -- call procedure to validate and cascade the ship method code.
            cascade_ship_method;
         execute_query;
         END IF;

我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

这是因为Oracle Forms有两种类型的内置过程 - 限制和不受限制。某些触发器启用受限制的过程,有些则不启用(请参阅Oracle Forms帮助,每个触发器都有其启用的过程的信息)。

触发WHEN-VALIDATE-ITEM触发,例如当用户将光标从一个记录移动到另一个记录时(这称为导航)。在这种情况下,它留下一个记录并进入其他记录。触发了以下触发链

  • WHEN-VALIDATE-ITEM
  • WHEN-VALIDATE-RECORD
  • POST-ITEM
  • POST-RECORD
  • 预记录
  • PRE-ITEM

如果此触发器中的任何一个失败,则取消导航并将光标返回到原始项目。如果您调用任何启动新导航的过程(如GO_BLOCK),Oracle Forms将无法管理第一个导航。

这就是为什么某些程序受到限制的原因。

答案 1 :(得分:0)

它可能与cascade_ship_method的内容有关。遇到此错误时,我在SET_BLOCK_PROPERTY语句中省略了撇号。我修好后,它起作用了。这是我的代码块中的正确结构:

SET_BLOCK_PROPERTY (
                  'TABLE_A',
                  default_where,
                     'column_a= '
                  || ''''
                  || variable
                  || '''');