簡體   English   中英

將MAX值分配給變量的更好方法?

[英]Better way to assign MAX values to variables?

我試圖將變量(“ 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;

提前致謝。

取決於您的“更好方式”。 一種替代方法是使用SELECT隱式游標FOR循環

FOR R IN (SELECT COUNT(VALUE_TX) AS COUNTE
                 FROM VALUE
                 WHERE TRUNC(DATE) = TRUNC(SYSDATE)
                 GROUP BY HR_UTC) LOOP
  IF R.COUNTE > 0 THEN
    DBMS_OUTPUT.PUT_LINE(R.COUNTE);
  END IF;
END LOOP;

這是一個方便的語法捷徑,如果您認為這是“更好”的話。

有一個更好的方法嗎?

當然是啦。

問題是這種情況: where trunc(date) = .... 這樣可以防止RDBMS使用date索引列。 如果表很大,這可能會導致性能問題。 我將不解釋原因,您可以在其他地方找到解釋,例如在這里: 為什么列上的函數阻止使用索引?

您需要將此條件替換為:

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

要么

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM