1

我收到一个错误

FRM - 40737 - WHEN-VALIDATE-RECORD 触发器中的非法受限过程 GO_BLOCK。

我的代码是

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;

我在这里做错了什么?

4

2 回答 2

2

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

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

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

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

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

于 2016-01-14T21:07:14.783 回答
0

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

SET_BLOCK_PROPERTY (
                  'TABLE_A',
                  default_where,
                     'column_a= '
                  || ''''
                  || variable
                  || '''');
于 2019-03-19T14:22:07.627 回答