我正在编写一个脚本,其中多个后续过程需要一个过程的输出。所以,我需要绑定变量,而不是替换变量。但是,每当使用变量时,它都会被清除。这使得不可能多次使用变量的值。完全相同的脚本适用于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
答案 0 :(得分:1)
这似乎是4.1.5中的错误,可能还有其他版本,已由版本4.2.0.17修复。
exec
只是匿名块的包装器,但使用显式块也会显示问题:
begin
:x := :y;
end;
/
我很确定我以前见过这个报道,但我能找到的唯一例子is this question;如你所知,你可以通过重新分配价值来解决这个问题:
begin
:x := :y;
:y := :y;
end;
/
或稍微不太可读:
exec :x := :y; :y := :y;
它肯定似乎是一个错误,但正如它在当前版本中修复的那样,upgrading似乎是一种解决它的明智方法。否则,您需要向Oracle提出服务请求 - 尽管我怀疑他们仍然建议升级。
(我可能一直在考虑回this,但这似乎是一个不同的问题,因为该示例在4.1.5中看起来没问题。我无法在My中看到任何错误报告Oracle支持,针对这两个问题;但它们并不总是发布。)