Nac*_*321 4 sql oracle plsql oracleforms
我正在使用oracle表单.每当修改特定字段的值时,我都必须运行一个过程.我必须执行的过程包含一个go_block指令,该指令不能在when_validate_item触发器中使用.反正有没有绕过这个?
编辑
我必须使用when_validate_item,因为必须在修改字段时运行我必须运行的过程,但是在执行验证之前.
Ann*_*awn 12
通常有使用上的限制GO_BLOCK或GO_ITEM上WHEN-VALIDATE-ITEM.然而,有几种方法可以解决这个问题.一种方法是使用WHEN-TIMER-EXPIRED触发器.这是如何 -
WHEN-TIMER-EXPIRED
Begin
if GET_APPLICATION_PROPERTY(TIMER_NAME) = 'NEW_TIMER' then
CALL_PROG_UNIT(); --This is your Procedure that calls the GO_BLOCK
/*Do rest of validation here*/
end if;
END;
Run Code Online (Sandbox Code Playgroud)
WHEN-VALIDATE-ITEM
DECLARE
timer_id TIMER;
Begin
timer_id := CREATE_TIMER('NEW_TIMER',1,NO_REPEAT); --set a short timer so that the WHEN-TIMER-EXPIRED trigger is fired immediately
End;
Run Code Online (Sandbox Code Playgroud)
会发生什么 - 这将在CREATE_TIMER调用函数后立即创建和终止计时器,然后表单级别触发器WHEN-TIMER-EXPIRED将检查过期的计时器名称并调用具有该函数的程序单元GO_BLOCK.希望这可以帮助.
UPDATE
Jeffery Kemp先生希望看到这个解决方案有效的证据.所以这里是 -
一个带有两个块BLOCK1并BLOCK2带有文本项的Oracle表单

WVI触发器

WTE表单触发器.这首先调用P_CALL_PROC带有GO_BLOCK函数调用的PROGRAM UNIT ,然后对该字段进行一些验证Number 2.

这是 P_CALL_PROC

这是结果 -

和

这是一个Youtube链接,可以查看表单的实际效果.