SQL开发人员清除脚本中的绑定变量
我正在编写一个脚本,其中一个过程的输出需要用于以后的多个过程。所以,我需要绑定变量,而不是替换变量。但是,无论何时使用该变量,它都会被清除。这使得不可能多次使用变量的值。同样的脚本也适用于SQL*Plus。我在下面做了一个简短的脚本来演示这个问题 这是一个可以在SQL Developer中更改的设置吗?这是虫子吗?在我的例子中,我使用的是SQL Developer版本4.1.5.21.78SQL开发人员清除脚本中的绑定变量,sql,oracle-sqldeveloper,Sql,Oracle Sqldeveloper,我正在编写一个脚本,其中一个过程的输出需要用于以后的多个过程。所以,我需要绑定变量,而不是替换变量。但是,无论何时使用该变量,它都会被清除。这使得不可能多次使用变量的值。同样的脚本也适用于SQL*Plus。我在下面做了一个简短的脚本来演示这个问题 这是一个可以在SQL Developer中更改的设置吗?这是虫子吗?在我的例子中,我使用的是SQL Developer版本4.1.5.21.78 var x varchar2(1) var y varchar2(1) print x print y e
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版本中的一个bug,也可能是其他版本中的bug,已由4.2.0.17版本修复
exec
只是匿名块的包装,但使用显式块也会显示问题:
begin
:x := :y;
end;
/
我敢肯定我以前看过这篇报道,但我能找到的唯一的例子;如上所述,您可以通过将值重新分配给自身来解决此问题:
begin
:x := :y;
:y := :y;
end;
/
或者不太容易理解:
exec :x := :y; :y := :y;
这显然是一个bug,但由于它在当前版本中已修复,因此似乎是解决它的一个明智的方法。否则,您需要向Oracle提出服务请求-尽管我怀疑他们会建议无论如何升级
(我可能一直在想,但这似乎是另一个问题,因为该示例在4.1.5中看起来还可以。我在Oracle支持中看不到任何关于这两个问题的错误报告;但它们并不总是发布。)我看不到在4.2.0.17中,最后两个打印命令都显示Z。(显示输出的顺序与代码不匹配,但仍然…)。不过,我也看到了4.1.5.21中的问题,所以在该版本中看起来确实像是一个bug。升级似乎是一个解决方法?我想这可能是这个bug的另一个例子:我升级到4.2.0.17.089.1709,问题就消失了。我曾尝试先将它分配给第二个变量来解决问题,但由于它正在移动,所以没有成功这条新线路的问题。但是我看到你是如何把这两条线路放在一个街区里的。这可能会起作用,但我不应该这样做,我已经走了。谢谢。