Oracle BEGIN/END中使用的Bind变量被清除
这是一个简单的示例,因此很容易重现,但重要的是我需要使用Oracle BEGIN/END中使用的Bind变量被清除,oracle,oracle-sqldeveloper,oracle12c,Oracle,Oracle Sqldeveloper,Oracle12c,这是一个简单的示例,因此很容易重现,但重要的是我需要使用将基于查询的变量设置为:someVariable from sometable,其中sometable.somecolumn=:y,然后在开始/结束块后利用这两个变量在中引用:y,其中导致其被清除。为什么会发生这种情况? 我更关心的是为什么会发生这种情况,而不是如何修复它。我有办法自行设置,但这似乎是一个奇怪的副作用。在第一个示例中,我没有声明一个名为:y的新变量,因此我认为这不是变量隐藏的问题。显然,第二个示例显示,我可以设置变量的值,并
将基于查询的变量设置为:someVariable from sometable,其中sometable.somecolumn=:y
,然后在开始/结束块后利用这两个变量在中引用:y
,其中
导致其被清除。为什么会发生这种情况?
我更关心的是为什么会发生这种情况,而不是如何修复它。我有办法自行设置,但这似乎是一个奇怪的副作用。在第一个示例中,我没有声明一个名为:y的新变量,因此我认为这不是变量隐藏的问题。显然,第二个示例显示,我可以设置变量的值,并且设置它在块的范围之外是可见的,这是我所期望的,因为变量是在块的范围之外声明的
clear screen;
variable x varchar2(10);
variable y varchar2(10);
exec :y := 'YYY';
BEGIN
select '1' into :x
from dual
where 'YYY' = :y;
END;
/
select :y from dual;
输出显示:y已清除:
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
:Y
--------------------------------
如果将:y设置为自身,则该值将保留:
clear screen;
variable x varchar2(10);
variable y varchar2(10);
exec :y := 'YYY';
BEGIN
select '1' into :x
from dual
where 'YYY' = :y;
:y := :y;
END;
/
select :y from dual;
输出:
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
:Y
--------------------------------
YYY
升级到SQL Developer 17.2.0.188后,它就消失了
似乎是这个bug:升级到SQL Developer 17.2.0.188后,它就消失了
似乎是此错误:我无法重现您的问题。您的测试用例似乎按预期工作。@BobC您使用的是什么版本?版本:12.1.0。2@BobC什么版本的SQL Developer?我认为这与客户有关。我曾经尝试过在12g和11c上连接不同的服务器,结果都是一样的。我认为这是一个错误,我使用的是同一版本的SQL Developer:我无法重现您的问题。您的测试用例似乎按预期工作。@BobC您使用的是什么版本?版本:12.1.0。2@BobC什么版本的SQL Developer?我认为这与客户有关。我曾经尝试过在12g和11c上连接不同的服务器,结果都是一样的。我认为这是一个错误,与我使用的SQL Developer版本相同: