[英]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.