2017-04-19 65 views
1

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

这是可以在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

我在4.2.0.17中看不到,最后两个打印命令都显示Z.(您输出的顺序与代码不匹配,但仍......)。尽管如此,我也发现4.1.5.21中的问题,所以它在该版本中看起来像是一个bug。升级似乎是一种解决方法? –

+0

我认为这可能是此错误的另一个示例:https://stackoverflow.com/q/43401127/84206 – AaronLS

回答

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 Support中我看不到任何错误报告,无论是问题;但它们并不总是发布)

+1

我升级到4.2.0.17.089.1709,问题就消失了。我试图通过先将它分配给第二个变量来解决问题,但这并不奏效,因为它将问题转移到了新的一行。但我看到你如何把这两条线放在一起。这可能会奏效,但我不应该这样做,我已经继续前进。谢谢。 –