将MAX值分配给变量的更好方法是什么?

时间:2018-05-15 16:00:09

标签: sql oracle plsql

我正在尝试将变量(“COUNT”)定义为查询的计数,以便我可以在稍后的PLSQL块中的条件语句中使用它。我使用以下语法得到计数:

Select count(value_tx) from value where trunc(date) = trunc(sysdate)

我目前知道如何执行此操作的唯一方法是使用游标。有一个更好的方法吗?我使用游标的方法如下:

Create or Replace Procedure TEST IS
CURSOR C1 is
select count(value_tx) as COUNTE
  from value
  where trunc(date) = trunc(sysdate)
  group by hr_utc;
l_var c1%ROWTYPE;
BEGIN
Open c1;
        FETCH c1 into l_var;
        IF l_var.counte > 0 THEN  DBMS_OUTPUT.PUT_LINE(l_var.COUNTE);
        END IF;
Close c1;
END TEST;

提前感谢。

1 个答案:

答案 0 :(得分:1)

  

有更好的方法吗?

当然可以。

问题是这种情况:where trunc(date) = ....。这可以防止RDBMS在date列上使用索引。如果表很大,这可能会导致性能问题。我不打算解释原因,您可以在其他地方找到解释,例如:Why do functions on columns prevent the use of indexes?

您需要将此条件替换为:

 `where date >= trunc(sysdate) AND date < trunc(sysdate) + 1

where date >= trunc(sysdate) AND date < trunc(sysdate) + interval '1' day