[nQSError:39043] 由于初始化块 使用的是行范围初始化但没有目标变量, 无法延迟执行它

来源:互联网 发布:java连接sql代码 编辑:程序博客网 时间:2024/06/04 23:35

rpd中的会话变量初始化块有一个选项叫“允许延迟执行”,即可以将该初始化块的执行从默认的用户登录的时候就执行延迟到用户引用了其中变量的时候在执行。

这样有什么好处呢?

可以减少用户登录时不必要的初始化工作,加快用户登录过程,并减少服务器的资源使用。


但是,如果我们的初始化块“行范围初始化”(Row-wise initialization)的方式,此时在去勾选“允许延迟执行”选项时,就会提示"[nQSError:39043] 由于初始化块 使用的是行范围初始化但没有目标变量, 无法延迟执行它" 错误。且Oracle官方文档写着Previously it was not possible to defer row-wise init-blocks; restriction has been lifted in 11.1.1.6 release.

也就是说11.1.1.6版本之后,是支持“行范围初始化”延迟执行的,那为什么还是会有这个错误呢?


查看相关文档发现这么一句:

The Row-wise initialization option is selected in the Session Variable Initialization Block Variable Target dialog and the variableshave not been declared explicitly with default values

原来我们需要显示声明行范围初始化块中的变量,并给它赋默认值,这样才能对行范围初始化方式的初始化块启用延迟执行。


新建会话变量,初始化块选择对应的行范围初始化块,并赋默认值。此时就可以勾选行范围初始化块的“允许延迟执行”选项了。


0 0