我听说使用绑定变量(可以)更有效,因为对于后续使用不同绑定值的调用,查询本身仍然是相同的,因此不再需要对其进行解析。
我理解为什么这是固定值的情况。在下面的游标中,值固定为 1。如果我有一个相同的不同游标,除了 1 变为 2,这是一个不同的查询。到目前为止清楚。
declare
cursor C_CURSOR is
select * from TESTTABLE pt where pt.ID = 1;
但我想知道在游标内使用 PL/SQL 变量时是否也是这种情况。它们是像固定值一样扩展,还是被解释为绑定变量。
我进行了广泛的搜索,但在任何地方我都可以找到关于literals的示例,就像上面的例子一样,但是没有关于 PL/SQL 变量的使用的明确解释。
换句话说,在下面的两个片段中,第二个可能更有效,还是它们本质上相同?
在游标中直接使用 PL/SQL 变量:
declare
V_TEST integer := 1;
cursor C_CURSOR is
select *
from
TESTTABLE pt
where
pt.ID = V_TEST;
begin
for r in C_CURSOR loop
null;
end loop;
end;
使用绑定变量:
declare
V_TEST int := 1;
cursor C_CURSOR(B_TEST int) is
select *
from
TESTTABLE pt
where
pt.ID = B_TEST;
begin
for r in C_CURSOR(V_TEST) loop
null;
end loop;
end;