我可以使用带有变量原始值的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;
答案 0 :(得分:3)
应该有效。你试过吗?有什么问题吗?
解析后,select语句应该包含v_id所在的绑定变量。在实际执行语句时进行替换。
编辑: 除非您将常量保留在查询中,否则Oracle将始终使用绑定变量将它们解析为语句 - 它使DBMS能够重用具有多个值的相同基本查询而无需重新声明语句 - 这是一个巨大的性能提升。绑定变量的整个概念是将值的运行时替换为已解析的查询。可以这样想:为了处理查询,需要知道所有值。你把它们发送到引擎,Oracle做它的工作,并返回一个结果。这是一个串行进程,输出值无法踩到输入值。