Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как получить разницу между результатом текущего и прошлого select-а?  [new]
Дженри
Guest
Всем привет.
Подозреваю, что спрашиваю фигню, но может все-таки это возможно...

Есть простой запрос типа:
select value from table;

который возвращает некоторое число.
Число это со временем растет.
При следующем выполнении получаю уже другое число.
Можно ли как-то запросом получать разницу между ними?

Вот пример.
Вместо:
select value from table;
1024
--прошло 10 секунд
select value from table;
1028
--прошло 10 секунд
select value from table;
1300
--прошло 10 секунд
select value from table;
1400


получить:
select value from table;
1024
--прошло 10 секунд
<запрос>
4
--прошло 10 секунд
<запрос>
2
--прошло 10 секунд
<запрос>
100


P.S. Если бы было нужно промышленное решение - писал бы значения в табличку джобом через определенные промежутки времени. Но мне всего-то пару раз может быть понадобится это посмотреть, для себя, поэтому не хочется огород городить.
7 фев 14, 15:57    [15535472]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разницу между результатом текущего и прошлого select-а?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Дженри,

select * from ляля as of timestamp(sysdate - 10/(24*60*60)
7 фев 14, 16:01    [15535503]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разницу между результатом текущего и прошлого select-а?  [new]
Дженри
Guest
orawish,
timestamp, к сожалению, для меня не годится, у меня запрос к словарю (v$)
7 фев 14, 16:12    [15535603]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разницу между результатом текущего и прошлого select-а?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Дженри
orawish,
timestamp, к сожалению, для меня не годится, у меня запрос к словарю (v$)


SQL> create sequence scott.sq000;

Последовательность создана.

SQL> exec dbms_lock.sleep(10)

Процедура PL/SQL успешно завершена.

SQL> drop sequence scott.sq000;

Последовательность удалена.

SQL> select *
  2    from all_sequences as of timestamp(sysdate - 5/(24*60*60))
  3   where sequence_owner = 'SCOTT'
  4     and sequence_name = 'SQ000'
  5  ;

SEQUENCE_OWNER                 SEQUENCE_NAME                   MIN_VALUE
------------------------------ ------------------------------ ----------
 MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
---------- ------------ - - ---------- -----------
SCOTT                          SQ000                                   1
1,0000E+28            1 N N         20           1
7 фев 14, 16:23    [15535682]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разницу между результатом текущего и прошлого select-а?  [new]
уувуукукуку
Guest
orawish,
Дженри
orawish,
timestamp, к сожалению, для меня не годится, у меня запрос к словарю (v$)
7 фев 14, 16:24    [15535700]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разницу между результатом текущего и прошлого select-а?  [new]
avas
Guest
Дженри
Но мне всего-то пару раз может быть понадобится это посмотреть, для себя, поэтому не хочется огород городить.


ручка и блокнот
7 фев 14, 16:25    [15535705]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разницу между результатом текущего и прошлого select-а?  [new]
Дженри
Guest
уувуукукуку
orawish,
Дженри
orawish,
timestamp, к сожалению, для меня не годится, у меня запрос к словарю (v$)


Ага.

sys@orcl> select count(*) from v$archived_log;

  COUNT(*)
----------
        26

sys@orcl> alter system archive log current;

System altered.

sys@orcl> select count(*) from v$archived_log;

  COUNT(*)
----------
        27

sys@orcl> select count(*) from v$archived_log as of timestamp(sysdate - 10/(24*60));

  COUNT(*)
----------
        27
7 фев 14, 16:41    [15535825]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разницу между результатом текущего и прошлого select-а?  [new]
-2-
Member

Откуда:
Сообщений: 15330
Дженри,

Сохраняй результат в переменную. На плюсе есть все необходимое.
7 фев 14, 16:44    [15535839]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разницу между результатом текущего и прошлого select-а?  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
Дженри,

если в sql*plus, то можно так:
SQL> var x number
SQL> var old number
SQL> set autoprint on
...
SQL> exec select hsecs ,hsecs - nvl(:old,0) into :old,:x from v$timer;

         X
----------
        61


       OLD
----------
 505763086

SQL> exec select hsecs ,hsecs - nvl(:old,0) into :old,:x from v$timer;

         X
----------
        81


       OLD
----------
 505763167
7 фев 14, 16:49    [15535881]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разницу между результатом текущего и прошлого select-а?  [new]
Дженри
Guest
avas
Дженри
Но мне всего-то пару раз может быть понадобится это посмотреть, для себя, поэтому не хочется огород городить.


ручка и блокнот



Лень.
7 фев 14, 16:50    [15535890]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разницу между результатом текущего и прошлого select-а?  [new]
Дженри
Guest
xtender,

Спасибо огромнейшее, работает!
7 фев 14, 17:03    [15535980]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить