【问题标题】:Oracle: select into variable being used in where clauseOracle:选择在where子句中使用的变量
【发布时间】:2010-07-08 14:50:51
【问题描述】:

我可以通过在 select 语句的 where 子句中使用带有变量原始值的 select into 来更改变量的值吗?

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;

【问题讨论】:

  • ...有趣的想法。我没试过,但我不明白为什么不。 你尝试过吗?会发生什么?
  • 我确实尝试过,它似乎有效。我主要在寻找知道它会总是工作的人。我不能让它只在某些(未知)情况下工作。

标签: sql oracle select


【解决方案1】:

应该可以。你试过了吗?有什么问题吗?

解析您的选择语句后,您的 v_id 应该有绑定变量。实际执行语句时进行替换。

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

【讨论】:

  • 它确实有效。但是,我担心的是:这总是有效吗?
  • IE 你知道它会在语句执行完成后使用绑定变量和替换吗?我真的不能让它只在某些时候工作......
  • 我想如果它能让你在晚上睡觉,那么使用两个不同的变量 ;-)
  • 它会起作用的。基本上,它将变量绑定到语句,然后执行语句,该语句将返回值。唯一需要注意的是,如果语句失败(未找到数据、行太多等),我不会依赖变量中的值。
  • 正如 Gary 所说,它将始终按预期工作。如果语句失败,它将引发异常,因此不会进入第二次选择。
猜你喜欢
  • 1970-01-01
  • 2022-01-13
  • 2016-08-28
  • 2016-05-18
  • 2021-08-30
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
  • 2019-09-12
相关资源
最近更新 更多