我一直试图在PL / SQL中为单个值找到for (<query>) loop <statements> end loop;
语法的替代方法。原因是纯粹代码可维护性和可读性的观点之一,即我想要像for (<query>) loop <statements> end loop;
那样摆脱声明。
您可以执行以下操作:
declare
id myTable.id%type:= 4;
result myTable%rowtype;
begin
select mt.* into result
from myTable mt
where mt.id = id;
<do something with result>
end;
但我相信以下方式更清晰,并且希望单个值具有类似功能,NO_DATA_FOUND
和TOO_MANY_ROWS
上的异常与select into
一样{:1}}:
for result in (select * from myTable mt where mt.id = id) loop
<do something with result>
end loop;
重复一下,重要的部分是可维护性,因此必须声明一个只能在短范围内使用的变量是至关重要的。如果需要closures
或其他形式的范围无关紧要,性能无关紧要(最多可达1000左右),代码可读性和可维护性都可以。
我想知道的是,如果你知道一种比你的口味更好或更干净的方法,那么额外检查可能没有数据的for循环(TOO_MANY_ROWS
通常可以避免约束,这样可以避免检查)或需要声明变量的select into
语句?