在 post 表单提交中使用多记录块更新 table

Update table using multi record block in post forms commit

我想要的是使用多记录块中的值更新我的 table,这是我在 post 表单提交中尝试的:

BEGIN
    FIRST_RECORD;
    LOOP 
        UPDATE table1         
        SET ord_no = :blk.new_val;
        EXIT WHEN :SYSTEM.LAST_RECORD='TRUE';
        NEXT_RECORD;
    END LOOP;
END;

但是当我保存时出现错误

FRM-40737: Illegal restricted procedure
FIRST-RECORD in POST-FORMS-COMMIT trigger.

OK,这里说几点

1) 我假设 'table1' 不是块所基于的 table。如果该块基于 table1,只要用户在屏幕上编辑条目,那么当您执行 COMMIT_FORM 命令(或用户单击“保存”)时,将自动为您完成适当的更新. (也就是数据库的主要用途-table based block)。

2) 所以我假设 'table1' 不同于基于块的 table。接下来的事情是您可能需要在更新语句中使用 WHERE 子句。我假设您正在根据块中的特定值更新 table1 中的特定值?所以它会是这样的:

update table1
set ord_no = :blk.new_val
where keycol = :blk.some_key_val

3) 在提交过程中无法执行某些导航样式操作,因此会出现错误。解决方法是将操作推迟到通过计时器完成导航。所以你的代码是这样的:

Declare
  l_timer timer;
Begin
  l_timer := find_timer('DEFERRED_CHANGES');
  if not id_null(l_timer) then
    Delete_Timer(l_timer);
  end if;
  l_timer := Create_Timer('DEFERRED_CHANGES', 100, no_Repeat);
End;

这将创建一个计时器,该计时器将在您的触发器完成后 100 毫秒触发一次(相应地选择名称和时间),然后您将原始代码放在 when-time-expired 触发器上。

但是请先看看我的观点 (1)。