Лучший способ присвоить значения MAX переменным? - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь определить переменную ("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;

заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Есть ли лучший способ сделать это?

Конечно, это так.

Проблема заключается в следующем условии: where trunc(date) = ..... Это не позволяет СУБД использовать индекс для столбца date. Если таблица большая, это может вызвать проблемы с производительностью. Я не собираюсь объяснять причину, вы можете найти объяснение в другом месте, например здесь: Почему функции на столбцах препятствуют использованию индексов?

Необходимо заменить это условие на:

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

или

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

0 голосов
/ 15 мая 2018

Зависит от того, что для вас «лучше». Альтернативой является цикл FOR с неявным курсором над SELECT.

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;

Это удобный синтаксический ярлык, если это то, что вы считаете здесь "лучше".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...