我收到错误
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;
我在这里做错了什么?
答案 0 :(得分:2)
这是因为Oracle Forms有两种类型的内置过程 - 限制和不受限制。某些触发器启用受限制的过程,有些则不启用(请参阅Oracle Forms帮助,每个触发器都有其启用的过程的信息)。
触发WHEN-VALIDATE-ITEM触发,例如当用户将光标从一个记录移动到另一个记录时(这称为导航)。在这种情况下,它留下一个记录并进入其他记录。触发了以下触发链
如果此触发器中的任何一个失败,则取消导航并将光标返回到原始项目。如果您调用任何启动新导航的过程(如GO_BLOCK),Oracle Forms将无法管理第一个导航。
这就是为什么某些程序受到限制的原因。
答案 1 :(得分:0)
它可能与cascade_ship_method
的内容有关。遇到此错误时,我在SET_BLOCK_PROPERTY
语句中省略了撇号。我修好后,它起作用了。这是我的代码块中的正确结构:
SET_BLOCK_PROPERTY (
'TABLE_A',
default_where,
'column_a= '
|| ''''
|| variable
|| '''');