oracle - 在表单提交中使用多记录块更新表
问题描述
我想要的是使用多记录块中的值更新我的表,这是我在提交表单提交中尝试的内容:
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.
解决方案
好的,这里有几件事要说
1)我假设'table1'不是块所基于的表。如果该块基于 table1,就像用户在屏幕上编辑条目一样,那么当您执行 COMMIT_FORM 命令(或用户单击保存)时,将自动为您完成适当的更新。(这是基于数据库表的块的主要用途)。
2)所以我假设'table1'不是基于块的表。接下来是您可能需要在更新语句中使用 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 毫秒触发一次(选择名称和相应的时间),然后您将原始代码放在 time-time-expired 触发器上。
但是请先检查我的观点(1)。
推荐阅读
- java - 通过 unicode 添加表情符号反应不起作用
- outlook - 电子邮件地址中的“加号”在 Outlook 中转换为空格
- python - 试图在networkx中绘制不可见节点,但得到黑色节点
- xamarin.forms - 带有 ReactiveUI 的 Xamarin.Forms ListView 不会更新新项目
- c# - 角色没有“看到”玩家(3D 游戏)
- vba - 如何编写多标准访问搜索表单
- android - 如何修复版本更新目标版本更改为28
- c# - 无法保存或关闭创建的资源并出现内存泄漏问题
- api - Flutter:如何使用 Http.Client 删除 Rest Api?
- laravel - Laravel 分页 & 获取所有