Oracle:选择在where子句中使用的变量

时间:2010-07-08 14:50:52

标签: sql oracle select

我可以使用带有变量原始值的select into作为select语句中where子句的一部分来更改变量的值吗?

EI会使以下代码按预期工作:

declare
v_id number;
v_table number; --set elsewhere in code to either 1 or 2
begin
  select id into v_id from table_1 where name = 'John Smith';
  if(v_table = 2) then
    select id into v_id from table_2 where fk_id = v_id;
  end if;
end;

1 个答案:

答案 0 :(得分:3)

应该有效。你试过吗?有什么问题吗?

解析后,select语句应该包含v_id所在的绑定变量。在实际执行语句时进行替换。

编辑: 除非您将常量保留在查询中,否则Oracle将始终使用绑定变量将它们解析为语句 - 它使DBMS能够重用具有多个值的相同基本查询而无需重新声明语句 - 这是一个巨大的性能提升。绑定变量的整个概念是将值的运行时替换为已解析的查询。可以这样想:为了处理查询,需要知道所有值。你把它们发送到引擎,Oracle做它的工作,并返回一个结果。这是一个串行进程,输出值无法踩到输入值。