Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL开发人员清除脚本中的绑定变量_Sql_Oracle Sqldeveloper - Fatal编程技术网

SQL开发人员清除脚本中的绑定变量

SQL开发人员清除脚本中的绑定变量,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

我正在编写一个脚本,其中一个过程的输出需要用于以后的多个过程。所以,我需要绑定变量,而不是替换变量。但是,无论何时使用该变量,它都会被清除。这使得不可能多次使用变量的值。同样的脚本也适用于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版本中的一个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,问题就消失了。我曾尝试先将它分配给第二个变量来解决问题,但由于它正在移动,所以没有成功这条新线路的问题。但是我看到你是如何把这两条线路放在一个街区里的。这可能会起作用,但我不应该这样做,我已经走了。谢谢。