我正在编写一个脚本,其中多个后续过程需要一个过程的输出。所以,我需要绑定变量,而不是替换变量。但是,每当使用该变量时,它就会被清除。这使得不可能多次使用变量的值。完全相同的脚本在 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
output
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;
/
我很确定我以前见过这个报道,但我能找到的唯一例子这是这个问题吗 https://stackoverflow.com/q/43401127/266304;正如您所指出的,您可以通过将值重新分配给自身来解决这个问题:
begin
:x := :y;
:y := :y;
end;
/
或者可读性稍差一些:
exec :x := :y; :y := :y;
这确实是一个错误,但由于它在当前版本中已修复,升级 http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html似乎是解决这个问题的明智方法。否则,您需要向 Oracle 提出服务请求 - 尽管我怀疑他们无论如何都会建议升级。
(我可能一直在想this https://stackoverflow.com/a/15064702/266304,但这似乎是一个不同的问题,因为该示例在 4.1.5 中看起来不错。对于这两个问题,我在 My Oracle Support 中都看不到任何错误报告;但它们并不总是公开的。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)