【问题标题】:Oracle Forms Execute_query giving FRM-40737 errorOracle Forms Execute_query 给出 FRM-40737 错误
【发布时间】:2016-01-14 12:48:13
【问题描述】:

我遇到了一个错误

FRM - 40737 - 非法受限过程 GO_BLOCK 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;

我在这里做错了什么?

【问题讨论】:

  • 谢谢 Sergii Zhevzhyk .. 我的问题现在看起来好多了 :)
  • 是整个代码吗?
  • No Sergii.. cascade_ship_method 是一个单独的过程。没有 'execute_query' 表单不会刷新,在放置 execute_query 后会出现上述错误。在某些论坛中,我发现我们不应该在 'WHEN-VALIDATE-ITEM' 下使用 'execute_query' 。是否适用于“WHEN-VALIDATE-RECORD”

标签: oracleforms oracle-ebs


【解决方案1】:

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

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

  • 何时验证项目
  • 何时验证记录
  • 后项目
  • 事后记录
  • 预录
  • 预购

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

这就是为什么某些程序会受到限制。

【讨论】:

  • 嗨 Petr... 那么如何实现这种“刷新”呢?场景是“当标头传送方法发生变化时,我们需要调用一个过程来级联到行,然后刷新它”。除了“刷新”之外,我做了所有这些。请帮助
  • 刷新记录是oracle表单中的常见问题。我们使用两种方法。如果我们需要在数据库触发器更改后刷新一条记录,我们在 POST-UPDATE 或 POST-INSERT 触发器中刷新它。我们只需将新值选择到表单项中。在这些触发器中,我们不会更改记录状态。如果我们需要刷新整个块或级联块,我们启动一个计时器并在 WHEN-TIMER-EXPIRED 触发器中进行刷新
  • 好的 Petr.. 感谢您的意见。让我试试 Post-update 或 Post - Insert 选项。非常感谢:)
【解决方案2】:

可能与cascade_ship_method 的内容有关。当我收到此错误时,我错过了 SET_BLOCK_PROPERTY 语句中的撇号。当我修复时,它起作用了。这是我的代码块中的正确结构:

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

【讨论】:

    猜你喜欢
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多