SQL Developer 清除脚本中的绑定变量

赫尔曼迈耶

我正在编写一个脚本,其中多个后续过程需要一个过程的输出。所以,我需要绑定变量,而不是替换变量。但是,无论何时使用该变量,它都会被清除。这使得不可能多次使用变量的值。完全相同的脚本在 SQL*Plus 中工作。我在下面制作了一个简短的脚本来演示这个问题。

这是可以在 SQL Developer 中更改的设置吗?这是一个错误吗?就我而言,我使用的是 SQL Developer 版本 4.1.5.21.78。

var x varchar2(1)
var y varchar2(1)
print x
print y
exec :x := 'Z';
exec :y := 'Z';
print x
print y
exec :x := :y;
-- Why did that last line clear y?
print x
print y

输出

X
------


Y
------


PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.


X
-
Z

Y
-
Z

PL/SQL procedure successfully completed.


Y
-


X
-
Z
亚历克斯·普尔

这似乎是 4.1.5 和可能其他版本中的一个错误,已由版本 4.2.0.17 修复。

exec 只是匿名块的包装器,但使用显式块也显示了问题:

begin
  :x := :y;
end;
/

我很确定我以前看过这个报道,但我能找到的唯一例子是这个问题如上所述,您可以通过将值重新分配给自身来解决它:

begin
  :x := :y;
  :y := :y;
end;
/

或可读性稍差:

exec :x := :y; :y := :y;

这当然看起来是一个错误,但由于它已在当前版本中修复,升级似乎是解决它的明智方法。否则,您需要向 Oracle 提出服务请求——尽管我怀疑他们无论如何都会建议升级。

(我可能一直在思考这个问题,但这似乎是一个不同的问题,因为该示例在 4.1.5 中看起来不错。对于任一问题,我在 My Oracle Support 中都看不到任何错误报告;但是他们并不总是发布。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章