【问题标题】:Better way of implementing if statement in a loop在循环中实现 if 语句的更好方法
【发布时间】:2018-04-12 06:25:56
【问题描述】:

我有一个简单的 PL/SQL 代码,我希望对其进行优化。我有这个过程,它接受两个参数,param1(table id) 和 param2(date)。它的作用是遍历表并检查 param2 是否介于 fld_date1 和 fld_date2 列的值之间。如果是,它执行另一个逻辑。该表不能再接受除表 id 之外的其他参数。下面是sn-p

procedure proc1(
  param1                                     id table
 ,param2                                        date
)
is
begin
   for n in tab(param1).row_list loop
     if  param2 >= n.fld_date1
     and param2 <= n.n.fld_date2 then
       (...);
     end if;
   end loop;
end proc1;

这个可行,但我想你们中的一些人可能会想到一个更好的版本。我担心的是通过大量行迭代的性能。非常感谢任何帮助/建议。

谢谢!

【问题讨论】:

  • 难道您不能只使用 SELECT 来获取相关记录,然后让您的逻辑对其进行操作吗?在我看来,您无缘无故地强制进行表扫描。
  • 您好,感谢您的回复,但不允许直接访问表格。
  • 您确定 tab(param1).row_list , param1 id table 是有效的 pl/sql 语法吗?
  • 什么构成“大量行”?您是否进行过任何测试以查看是否存在性能问题?遍历集合非常非常快。从您的表中构建此集合所需的时间可能会比迭代次数多得多。

标签: for-loop optimization plsql procedure


【解决方案1】:

您可以使用“between”来检查日期是否在一个范围内,而不是检查 2 个条件。

【讨论】:

  • 看起来像语法糖。我的猜测是,在后台仍然会执行相同的检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多